1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-07-03 20:29:34 +00:00
kickc/src/test/ref/screen-show-spiral.log

8517 lines
552 KiB
Plaintext
Raw Normal View History

Inlined call call __init
CONTROL FLOW GRAPH SSA
(void*()) malloc((word) malloc::size)
malloc: scope:[malloc] from __start::@2 __start::__init1 init_squares
(word) malloc::size#3 ← phi( __start::@2/(word) malloc::size#2 __start::__init1/(word) malloc::size#1 init_squares/(word) malloc::size#0 )
(byte*) heap_head#13 ← phi( __start::@2/(byte*) heap_head#9 __start::__init1/(byte*) heap_head#8 init_squares/(byte*) heap_head#25 )
2020-06-27 19:18:00 +00:00
(byte*~) malloc::$0 ← (byte*) heap_head#13 - (word) malloc::size#3
(byte*) malloc::mem#0 ← (byte*~) malloc::$0
2020-06-27 19:18:00 +00:00
(byte*) heap_head#0 ← (byte*) malloc::mem#0
(void*) malloc::return#0 ← ((void*)) (byte*) malloc::mem#0
to:malloc::@return
malloc::@return: scope:[malloc] from malloc
2020-06-27 19:18:00 +00:00
(byte*) heap_head#14 ← phi( malloc/(byte*) heap_head#0 )
(void*) malloc::return#5 ← phi( malloc/(void*) malloc::return#0 )
(void*) malloc::return#1 ← (void*) malloc::return#5
2020-06-27 19:18:00 +00:00
(byte*) heap_head#1 ← (byte*) heap_head#14
return
to:@return
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
bsearch16u: scope:[bsearch16u] from sqrt
(word) bsearch16u::key#4 ← phi( sqrt/(word) bsearch16u::key#0 )
(word*) bsearch16u::items#7 ← phi( sqrt/(word*) bsearch16u::items#1 )
(byte) bsearch16u::num#7 ← phi( sqrt/(byte) bsearch16u::num#2 )
to:bsearch16u::@4
bsearch16u::@4: scope:[bsearch16u] from bsearch16u bsearch16u::@8
(word) bsearch16u::key#3 ← phi( bsearch16u/(word) bsearch16u::key#4 bsearch16u::@8/(word) bsearch16u::key#5 )
(word*) bsearch16u::items#6 ← phi( bsearch16u/(word*) bsearch16u::items#7 bsearch16u::@8/(word*) bsearch16u::items#8 )
(byte) bsearch16u::num#3 ← phi( bsearch16u/(byte) bsearch16u::num#7 bsearch16u::@8/(byte) bsearch16u::num#0 )
(bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0
if((bool~) bsearch16u::$5) goto bsearch16u::@5
to:bsearch16u::@6
bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@4
(word) bsearch16u::key#1 ← phi( bsearch16u::@4/(word) bsearch16u::key#3 )
(word*) bsearch16u::items#2 ← phi( bsearch16u::@4/(word*) bsearch16u::items#6 )
(byte) bsearch16u::num#4 ← phi( bsearch16u::@4/(byte) bsearch16u::num#3 )
(byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1
(byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD
(word*~) bsearch16u::$7 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$14
(word*) bsearch16u::pivot#0 ← (word*~) bsearch16u::$7
(signed word~) bsearch16u::$17 ← (signed word)(word) bsearch16u::key#1
(signed word~) bsearch16u::$18 ← (signed word)*((word*) bsearch16u::pivot#0)
(signed word~) bsearch16u::$8 ← (signed word~) bsearch16u::$17 - (signed word~) bsearch16u::$18
(signed word) bsearch16u::result#0 ← (signed word~) bsearch16u::$8
(bool~) bsearch16u::$9 ← (signed word) bsearch16u::result#0 == (number) 0
(bool~) bsearch16u::$10 ← ! (bool~) bsearch16u::$9
if((bool~) bsearch16u::$10) goto bsearch16u::@7
to:bsearch16u::@9
bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4
(word) bsearch16u::key#2 ← phi( bsearch16u::@4/(word) bsearch16u::key#3 )
(word*) bsearch16u::items#3 ← phi( bsearch16u::@4/(word*) bsearch16u::items#6 )
(bool~) bsearch16u::$0 ← *((word*) bsearch16u::items#3) <= (word) bsearch16u::key#2
if((bool~) bsearch16u::$0) goto bsearch16u::@1
to:bsearch16u::@2
bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@5
(word) bsearch16u::key#7 ← phi( bsearch16u::@5/(word) bsearch16u::key#1 )
(word*) bsearch16u::items#9 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 )
(word*) bsearch16u::pivot#3 ← phi( bsearch16u::@5/(word*) bsearch16u::pivot#0 )
(byte) bsearch16u::num#8 ← phi( bsearch16u::@5/(byte) bsearch16u::num#4 )
(signed word) bsearch16u::result#1 ← phi( bsearch16u::@5/(signed word) bsearch16u::result#0 )
(bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#1 > (number) 0
(bool~) bsearch16u::$12 ← ! (bool~) bsearch16u::$11
if((bool~) bsearch16u::$12) goto bsearch16u::@8
to:bsearch16u::@10
bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@5
(word*) bsearch16u::pivot#1 ← phi( bsearch16u::@5/(word*) bsearch16u::pivot#0 )
(word*) bsearch16u::return#0 ← (word*) bsearch16u::pivot#1
to:bsearch16u::@return
bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@3 bsearch16u::@9
(word*) bsearch16u::return#4 ← phi( bsearch16u::@3/(word*) bsearch16u::return#2 bsearch16u::@9/(word*) bsearch16u::return#0 )
(word*) bsearch16u::return#1 ← (word*) bsearch16u::return#4
return
to:@return
bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@10 bsearch16u::@7
(word) bsearch16u::key#5 ← phi( bsearch16u::@10/(word) bsearch16u::key#6 bsearch16u::@7/(word) bsearch16u::key#7 )
(word*) bsearch16u::items#8 ← phi( bsearch16u::@10/(word*) bsearch16u::items#0 bsearch16u::@7/(word*) bsearch16u::items#9 )
(byte) bsearch16u::num#5 ← phi( bsearch16u::@10/(byte) bsearch16u::num#1 bsearch16u::@7/(byte) bsearch16u::num#8 )
(byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (number) 1
to:bsearch16u::@4
bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@7
(word) bsearch16u::key#6 ← phi( bsearch16u::@7/(word) bsearch16u::key#7 )
(byte) bsearch16u::num#6 ← phi( bsearch16u::@7/(byte) bsearch16u::num#8 )
(word*) bsearch16u::pivot#2 ← phi( bsearch16u::@7/(word*) bsearch16u::pivot#3 )
(number~) bsearch16u::$15 ← (number) 1 * (const byte) SIZEOF_WORD
(word*~) bsearch16u::$13 ← (word*) bsearch16u::pivot#2 + (number~) bsearch16u::$15
(word*) bsearch16u::items#0 ← (word*~) bsearch16u::$13
(byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#6
to:bsearch16u::@8
bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@6
(word*) bsearch16u::items#4 ← phi( bsearch16u::@6/(word*) bsearch16u::items#3 )
(word*~) bsearch16u::$3 ← (word*) bsearch16u::items#4
to:bsearch16u::@3
bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@6
(word*) bsearch16u::items#5 ← phi( bsearch16u::@6/(word*) bsearch16u::items#3 )
(number~) bsearch16u::$16 ← (number) 1 * (const byte) SIZEOF_WORD
(word*~) bsearch16u::$1 ← (word*) bsearch16u::items#5 - (number~) bsearch16u::$16
(word*~) bsearch16u::$2 ← (word*~) bsearch16u::$1
to:bsearch16u::@3
bsearch16u::@3: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@2
(word*~) bsearch16u::$4 ← phi( bsearch16u::@1/(word*~) bsearch16u::$3 bsearch16u::@2/(word*~) bsearch16u::$2 )
(word*) bsearch16u::return#2 ← (word*~) bsearch16u::$4
to:bsearch16u::@return
(void()) init_squares()
init_squares: scope:[init_squares] from init_dist_screen
2020-06-27 19:18:00 +00:00
(byte*) heap_head#25 ← phi( init_dist_screen/(byte*) heap_head#30 )
(byte) NUM_SQUARES#7 ← phi( init_dist_screen/(byte) NUM_SQUARES#2 )
(byte~) init_squares::$0 ← (byte) NUM_SQUARES#7 * (const byte) SIZEOF_WORD
(word) malloc::size#0 ← (byte~) init_squares::$0
call malloc
(void*) malloc::return#2 ← (void*) malloc::return#1
to:init_squares::@3
init_squares::@3: scope:[init_squares] from init_squares
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#16 ← phi( init_squares/(byte) NUM_SQUARES#7 )
(byte*) heap_head#15 ← phi( init_squares/(byte*) heap_head#1 )
(void*) malloc::return#6 ← phi( init_squares/(void*) malloc::return#2 )
(void*~) init_squares::$1 ← (void*) malloc::return#6
2020-06-27 19:18:00 +00:00
(byte*) heap_head#2 ← (byte*) heap_head#15
(word*) SQUARES#0 ← ((word*)) (void*~) init_squares::$1
(word*) init_squares::squares#0 ← (word*) SQUARES#0
(word) init_squares::sqr#0 ← (word) 0
(byte) init_squares::i#0 ← (byte) 0
to:init_squares::@1
init_squares::@1: scope:[init_squares] from init_squares::@2 init_squares::@3
2020-06-27 19:18:00 +00:00
(word*) SQUARES#19 ← phi( init_squares::@2/(word*) SQUARES#29 init_squares::@3/(word*) SQUARES#0 )
(byte*) heap_head#26 ← phi( init_squares::@2/(byte*) heap_head#33 init_squares::@3/(byte*) heap_head#2 )
(word*) init_squares::squares#3 ← phi( init_squares::@2/(word*) init_squares::squares#1 init_squares::@3/(word*) init_squares::squares#0 )
(word) init_squares::sqr#3 ← phi( init_squares::@2/(word) init_squares::sqr#1 init_squares::@3/(word) init_squares::sqr#0 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#8 ← phi( init_squares::@2/(byte) NUM_SQUARES#15 init_squares::@3/(byte) NUM_SQUARES#16 )
(byte) init_squares::i#2 ← phi( init_squares::@2/(byte) init_squares::i#1 init_squares::@3/(byte) init_squares::i#0 )
2020-06-27 19:18:00 +00:00
(bool~) init_squares::$2 ← (byte) init_squares::i#2 < (byte) NUM_SQUARES#8
2020-02-15 08:30:27 +00:00
if((bool~) init_squares::$2) goto init_squares::@2
to:init_squares::@return
init_squares::@2: scope:[init_squares] from init_squares::@1
2020-06-27 19:18:00 +00:00
(word*) SQUARES#29 ← phi( init_squares::@1/(word*) SQUARES#19 )
(byte*) heap_head#33 ← phi( init_squares::@1/(byte*) heap_head#26 )
(byte) NUM_SQUARES#15 ← phi( init_squares::@1/(byte) NUM_SQUARES#8 )
2020-02-15 08:30:27 +00:00
(byte) init_squares::i#3 ← phi( init_squares::@1/(byte) init_squares::i#2 )
(word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#3 )
(word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#3 )
*((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
(word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
2020-02-15 08:30:27 +00:00
(number~) init_squares::$3 ← (byte) init_squares::i#3 * (number) 2
(number~) init_squares::$4 ← (number~) init_squares::$3 + (number) 1
(word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (number~) init_squares::$4
2020-02-15 08:30:27 +00:00
(byte) init_squares::i#1 ← ++ (byte) init_squares::i#3
to:init_squares::@1
init_squares::@return: scope:[init_squares] from init_squares::@1
2020-06-27 19:18:00 +00:00
(word*) SQUARES#9 ← phi( init_squares::@1/(word*) SQUARES#19 )
(byte*) heap_head#16 ← phi( init_squares::@1/(byte*) heap_head#26 )
(byte*) heap_head#3 ← (byte*) heap_head#16
(word*) SQUARES#1 ← (word*) SQUARES#9
return
to:@return
(word()) sqr((byte) sqr::val)
sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4
2020-06-27 19:18:00 +00:00
(word*) SQUARES#10 ← phi( init_dist_screen::@10/(word*) SQUARES#20 init_dist_screen::@4/(word*) SQUARES#21 )
(byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 )
(byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
2020-06-27 19:18:00 +00:00
(word) sqr::return#0 ← *((word*) SQUARES#10 + (byte~) sqr::$0)
to:sqr::@return
sqr::@return: scope:[sqr] from sqr
(word) sqr::return#4 ← phi( sqr/(word) sqr::return#0 )
(word) sqr::return#1 ← (word) sqr::return#4
return
to:@return
(byte()) sqrt((word) sqrt::val)
sqrt: scope:[sqrt] from init_dist_screen::@13
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#9 ← phi( init_dist_screen::@13/(byte) NUM_SQUARES#17 )
(word*) SQUARES#11 ← phi( init_dist_screen::@13/(word*) SQUARES#22 )
(word) sqrt::val#1 ← phi( init_dist_screen::@13/(word) sqrt::val#0 )
(word) bsearch16u::key#0 ← (word) sqrt::val#1
2020-06-27 19:18:00 +00:00
(word*) bsearch16u::items#1 ← (word*) SQUARES#11
(byte) bsearch16u::num#2 ← (byte) NUM_SQUARES#9
call bsearch16u
(word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
to:sqrt::@1
sqrt::@1: scope:[sqrt] from sqrt
2020-06-27 19:18:00 +00:00
(word*) SQUARES#12 ← phi( sqrt/(word*) SQUARES#11 )
(word*) bsearch16u::return#5 ← phi( sqrt/(word*) bsearch16u::return#3 )
(word*~) sqrt::$0 ← (word*) bsearch16u::return#5
(word*) sqrt::found#0 ← (word*~) sqrt::$0
2020-06-27 19:18:00 +00:00
(word~) sqrt::$2 ← (word*) sqrt::found#0 - (word*) SQUARES#12
(word~) sqrt::$1 ← (word~) sqrt::$2 / (const byte) SIZEOF_WORD
(byte) sqrt::sq#0 ← (byte)(word~) sqrt::$1
(byte) sqrt::return#0 ← (byte) sqrt::sq#0
to:sqrt::@return
sqrt::@return: scope:[sqrt] from sqrt::@1
(byte) sqrt::return#3 ← phi( sqrt::@1/(byte) sqrt::return#0 )
(byte) sqrt::return#1 ← (byte) sqrt::return#3
return
to:@return
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
atan2_16: scope:[atan2_16] from init_angle_screen::@3
(signed word) atan2_16::x#9 ← phi( init_angle_screen::@3/(signed word) atan2_16::x#0 )
(signed word) atan2_16::y#1 ← phi( init_angle_screen::@3/(signed word) atan2_16::y#0 )
(bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
if((bool~) atan2_16::$0) goto atan2_16::@1
to:atan2_16::@2
atan2_16::@1: scope:[atan2_16] from atan2_16
(signed word) atan2_16::x#5 ← phi( atan2_16/(signed word) atan2_16::x#9 )
(signed word) atan2_16::y#2 ← phi( atan2_16/(signed word) atan2_16::y#1 )
(signed word~) atan2_16::$3 ← (signed word) atan2_16::y#2
to:atan2_16::@3
atan2_16::@2: scope:[atan2_16] from atan2_16
(signed word) atan2_16::x#6 ← phi( atan2_16/(signed word) atan2_16::x#9 )
(signed word) atan2_16::y#3 ← phi( atan2_16/(signed word) atan2_16::y#1 )
(signed word~) atan2_16::$1 ← - (signed word) atan2_16::y#3
(signed word~) atan2_16::$2 ← (signed word~) atan2_16::$1
to:atan2_16::@3
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
(signed word) atan2_16::y#15 ← phi( atan2_16::@1/(signed word) atan2_16::y#2 atan2_16::@2/(signed word) atan2_16::y#3 )
(signed word) atan2_16::x#1 ← phi( atan2_16::@1/(signed word) atan2_16::x#5 atan2_16::@2/(signed word) atan2_16::x#6 )
(signed word~) atan2_16::$4 ← phi( atan2_16::@1/(signed word~) atan2_16::$3 atan2_16::@2/(signed word~) atan2_16::$2 )
(signed word) atan2_16::yi#0 ← (signed word~) atan2_16::$4
(bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
if((bool~) atan2_16::$5) goto atan2_16::@4
to:atan2_16::@5
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
(signed word) atan2_16::y#12 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
(signed word) atan2_16::yi#12 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
(signed word) atan2_16::x#2 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
(signed word~) atan2_16::$8 ← (signed word) atan2_16::x#2
to:atan2_16::@6
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
(signed word) atan2_16::y#13 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
(signed word) atan2_16::yi#13 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
(signed word) atan2_16::x#3 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
(signed word~) atan2_16::$6 ← - (signed word) atan2_16::x#3
(signed word~) atan2_16::$7 ← (signed word~) atan2_16::$6
to:atan2_16::@6
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
(signed word) atan2_16::y#9 ← phi( atan2_16::@4/(signed word) atan2_16::y#12 atan2_16::@5/(signed word) atan2_16::y#13 )
(signed word) atan2_16::x#10 ← phi( atan2_16::@4/(signed word) atan2_16::x#2 atan2_16::@5/(signed word) atan2_16::x#3 )
(signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 )
(signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 )
(signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9
(word) atan2_16::angle#0 ← (word) 0
(byte) atan2_16::i#0 ← (byte) 0
to:atan2_16::@10
atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6
(signed word) atan2_16::y#7 ← phi( atan2_16::@19/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 )
(signed word) atan2_16::x#7 ← phi( atan2_16::@19/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 )
(word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 )
(byte) atan2_16::i#6 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 )
(signed word) atan2_16::xi#6 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
(signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#9 )
(bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0
(bool~) atan2_16::$17 ← ! (bool~) atan2_16::$16
if((bool~) atan2_16::$17) goto atan2_16::@11
to:atan2_16::@12
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
(signed word) atan2_16::y#19 ← phi( atan2_16::@10/(signed word) atan2_16::y#7 )
(signed word) atan2_16::x#17 ← phi( atan2_16::@10/(signed word) atan2_16::x#7 )
(word) atan2_16::angle#19 ← phi( atan2_16::@10/(word) atan2_16::angle#12 )
(byte) atan2_16::i#2 ← phi( atan2_16::@10/(byte) atan2_16::i#6 )
(signed word) atan2_16::yi#4 ← phi( atan2_16::@10/(signed word) atan2_16::yi#3 )
(signed word) atan2_16::xi#3 ← phi( atan2_16::@10/(signed word) atan2_16::xi#6 )
(signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3
(signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#4
(byte) atan2_16::shift#0 ← (byte) atan2_16::i#2
to:atan2_16::@13
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19
(signed word) atan2_16::y#5 ← phi( atan2_16::@10/(signed word) atan2_16::y#7 atan2_16::@19/(signed word) atan2_16::y#8 )
(signed word) atan2_16::x#4 ← phi( atan2_16::@10/(signed word) atan2_16::x#7 atan2_16::@19/(signed word) atan2_16::x#8 )
(word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
(word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
(bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
(bool~) atan2_16::$11 ← ! (bool~) atan2_16::$10
if((bool~) atan2_16::$11) goto atan2_16::@7
to:atan2_16::@21
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14
(signed word) atan2_16::y#18 ← phi( atan2_16::@11/(signed word) atan2_16::y#19 atan2_16::@14/(signed word) atan2_16::y#20 )
(signed word) atan2_16::x#16 ← phi( atan2_16::@11/(signed word) atan2_16::x#17 atan2_16::@14/(signed word) atan2_16::x#18 )
(word) atan2_16::angle#18 ← phi( atan2_16::@11/(word) atan2_16::angle#19 atan2_16::@14/(word) atan2_16::angle#20 )
(byte) atan2_16::i#10 ← phi( atan2_16::@11/(byte) atan2_16::i#2 atan2_16::@14/(byte) atan2_16::i#11 )
(signed word) atan2_16::xi#11 ← phi( atan2_16::@11/(signed word) atan2_16::xi#3 atan2_16::@14/(signed word) atan2_16::xi#12 )
(signed word) atan2_16::yi#14 ← phi( atan2_16::@11/(signed word) atan2_16::yi#4 atan2_16::@14/(signed word) atan2_16::yi#15 )
(signed word) atan2_16::yd#7 ← phi( atan2_16::@11/(signed word) atan2_16::yd#0 atan2_16::@14/(signed word) atan2_16::yd#1 )
(signed word) atan2_16::xd#7 ← phi( atan2_16::@11/(signed word) atan2_16::xd#0 atan2_16::@14/(signed word) atan2_16::xd#1 )
(byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#0 atan2_16::@14/(byte) atan2_16::shift#1 )
(bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2
if((bool~) atan2_16::$18) goto atan2_16::@14
to:atan2_16::@15
atan2_16::@14: scope:[atan2_16] from atan2_16::@13
(signed word) atan2_16::y#20 ← phi( atan2_16::@13/(signed word) atan2_16::y#18 )
(signed word) atan2_16::x#18 ← phi( atan2_16::@13/(signed word) atan2_16::x#16 )
(word) atan2_16::angle#20 ← phi( atan2_16::@13/(word) atan2_16::angle#18 )
(byte) atan2_16::i#11 ← phi( atan2_16::@13/(byte) atan2_16::i#10 )
(signed word) atan2_16::xi#12 ← phi( atan2_16::@13/(signed word) atan2_16::xi#11 )
(signed word) atan2_16::yi#15 ← phi( atan2_16::@13/(signed word) atan2_16::yi#14 )
(byte) atan2_16::shift#3 ← phi( atan2_16::@13/(byte) atan2_16::shift#2 )
(signed word) atan2_16::yd#3 ← phi( atan2_16::@13/(signed word) atan2_16::yd#7 )
(signed word) atan2_16::xd#3 ← phi( atan2_16::@13/(signed word) atan2_16::xd#7 )
(signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
(signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
(byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
to:atan2_16::@13
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
(signed word) atan2_16::y#16 ← phi( atan2_16::@13/(signed word) atan2_16::y#18 )
(signed word) atan2_16::x#14 ← phi( atan2_16::@13/(signed word) atan2_16::x#16 )
(word) atan2_16::angle#16 ← phi( atan2_16::@13/(word) atan2_16::angle#18 )
(byte) atan2_16::i#8 ← phi( atan2_16::@13/(byte) atan2_16::i#10 )
(signed word) atan2_16::xi#9 ← phi( atan2_16::@13/(signed word) atan2_16::xi#11 )
(signed word) atan2_16::yd#8 ← phi( atan2_16::@13/(signed word) atan2_16::yd#7 )
(signed word) atan2_16::xd#8 ← phi( atan2_16::@13/(signed word) atan2_16::xd#7 )
(signed word) atan2_16::yi#10 ← phi( atan2_16::@13/(signed word) atan2_16::yi#14 )
(byte) atan2_16::shift#4 ← phi( atan2_16::@13/(byte) atan2_16::shift#2 )
(bool~) atan2_16::$24 ← (number) 0 != (byte) atan2_16::shift#4
(bool~) atan2_16::$19 ← ! (bool~) atan2_16::$24
if((bool~) atan2_16::$19) goto atan2_16::@17
to:atan2_16::@16
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16
(signed word) atan2_16::y#14 ← phi( atan2_16::@15/(signed word) atan2_16::y#16 atan2_16::@16/(signed word) atan2_16::y#17 )
(signed word) atan2_16::x#13 ← phi( atan2_16::@15/(signed word) atan2_16::x#14 atan2_16::@16/(signed word) atan2_16::x#15 )
(word) atan2_16::angle#14 ← phi( atan2_16::@15/(word) atan2_16::angle#16 atan2_16::@16/(word) atan2_16::angle#17 )
(byte) atan2_16::i#7 ← phi( atan2_16::@15/(byte) atan2_16::i#8 atan2_16::@16/(byte) atan2_16::i#9 )
(signed word) atan2_16::xd#9 ← phi( atan2_16::@15/(signed word) atan2_16::xd#8 atan2_16::@16/(signed word) atan2_16::xd#2 )
(signed word) atan2_16::yd#9 ← phi( atan2_16::@15/(signed word) atan2_16::yd#8 atan2_16::@16/(signed word) atan2_16::yd#2 )
(signed word) atan2_16::xi#7 ← phi( atan2_16::@15/(signed word) atan2_16::xi#9 atan2_16::@16/(signed word) atan2_16::xi#10 )
(signed word) atan2_16::yi#5 ← phi( atan2_16::@15/(signed word) atan2_16::yi#10 atan2_16::@16/(signed word) atan2_16::yi#11 )
(bool~) atan2_16::$20 ← (signed word) atan2_16::yi#5 >= (number) 0
if((bool~) atan2_16::$20) goto atan2_16::@18
to:atan2_16::@20
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
(signed word) atan2_16::y#17 ← phi( atan2_16::@15/(signed word) atan2_16::y#16 )
(signed word) atan2_16::x#15 ← phi( atan2_16::@15/(signed word) atan2_16::x#14 )
(word) atan2_16::angle#17 ← phi( atan2_16::@15/(word) atan2_16::angle#16 )
(byte) atan2_16::i#9 ← phi( atan2_16::@15/(byte) atan2_16::i#8 )
(signed word) atan2_16::xi#10 ← phi( atan2_16::@15/(signed word) atan2_16::xi#9 )
(signed word) atan2_16::yi#11 ← phi( atan2_16::@15/(signed word) atan2_16::yi#10 )
(signed word) atan2_16::yd#4 ← phi( atan2_16::@15/(signed word) atan2_16::yd#8 )
(signed word) atan2_16::xd#4 ← phi( atan2_16::@15/(signed word) atan2_16::xd#8 )
(signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
(signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
to:atan2_16::@17
atan2_16::@18: scope:[atan2_16] from atan2_16::@17
(signed word) atan2_16::y#10 ← phi( atan2_16::@17/(signed word) atan2_16::y#14 )
(signed word) atan2_16::x#11 ← phi( atan2_16::@17/(signed word) atan2_16::x#13 )
(word) atan2_16::angle#7 ← phi( atan2_16::@17/(word) atan2_16::angle#14 )
(byte) atan2_16::i#3 ← phi( atan2_16::@17/(byte) atan2_16::i#7 )
(signed word) atan2_16::xd#5 ← phi( atan2_16::@17/(signed word) atan2_16::xd#9 )
(signed word) atan2_16::yi#6 ← phi( atan2_16::@17/(signed word) atan2_16::yi#5 )
(signed word) atan2_16::yd#5 ← phi( atan2_16::@17/(signed word) atan2_16::yd#9 )
(signed word) atan2_16::xi#4 ← phi( atan2_16::@17/(signed word) atan2_16::xi#7 )
(signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#4 + (signed word) atan2_16::yd#5
(signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#6 - (signed word) atan2_16::xd#5
(byte~) atan2_16::$22 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD
2019-11-22 22:41:01 +00:00
(word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22)
to:atan2_16::@19
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
(signed word) atan2_16::y#11 ← phi( atan2_16::@17/(signed word) atan2_16::y#14 )
(signed word) atan2_16::x#12 ← phi( atan2_16::@17/(signed word) atan2_16::x#13 )
(word) atan2_16::angle#8 ← phi( atan2_16::@17/(word) atan2_16::angle#14 )
(byte) atan2_16::i#4 ← phi( atan2_16::@17/(byte) atan2_16::i#7 )
(signed word) atan2_16::xd#6 ← phi( atan2_16::@17/(signed word) atan2_16::xd#9 )
(signed word) atan2_16::yi#7 ← phi( atan2_16::@17/(signed word) atan2_16::yi#5 )
(signed word) atan2_16::yd#6 ← phi( atan2_16::@17/(signed word) atan2_16::yd#9 )
(signed word) atan2_16::xi#5 ← phi( atan2_16::@17/(signed word) atan2_16::xi#7 )
(signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#5 - (signed word) atan2_16::yd#6
(signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#7 + (signed word) atan2_16::xd#6
(byte~) atan2_16::$23 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD
2019-11-22 22:41:01 +00:00
(word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23)
to:atan2_16::@19
atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20
(signed word) atan2_16::y#8 ← phi( atan2_16::@18/(signed word) atan2_16::y#10 atan2_16::@20/(signed word) atan2_16::y#11 )
(signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 )
(signed word) atan2_16::x#8 ← phi( atan2_16::@18/(signed word) atan2_16::x#11 atan2_16::@20/(signed word) atan2_16::x#12 )
(word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
(signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 )
(byte) atan2_16::i#5 ← phi( atan2_16::@18/(byte) atan2_16::i#3 atan2_16::@20/(byte) atan2_16::i#4 )
(byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
(bool~) atan2_16::$21 ← (byte) atan2_16::i#1 != rangelast(0,CORDIC_ITERATIONS_16-1)
if((bool~) atan2_16::$21) goto atan2_16::@10
to:atan2_16::@12
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21
(word) atan2_16::angle#15 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
(signed word) atan2_16::y#4 ← phi( atan2_16::@12/(signed word) atan2_16::y#5 atan2_16::@21/(signed word) atan2_16::y#6 )
(bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0
(bool~) atan2_16::$14 ← ! (bool~) atan2_16::$13
if((bool~) atan2_16::$14) goto atan2_16::@8
to:atan2_16::@9
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
(signed word) atan2_16::y#6 ← phi( atan2_16::@12/(signed word) atan2_16::y#5 )
(word) atan2_16::angle#9 ← phi( atan2_16::@12/(word) atan2_16::angle#1 )
(number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9
(word) atan2_16::angle#4 ← (number~) atan2_16::$12
to:atan2_16::@7
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
(word) atan2_16::angle#10 ← phi( atan2_16::@7/(word) atan2_16::angle#15 atan2_16::@9/(word) atan2_16::angle#5 )
(word) atan2_16::return#0 ← (word) atan2_16::angle#10
to:atan2_16::@return
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
(word) atan2_16::angle#11 ← phi( atan2_16::@7/(word) atan2_16::angle#15 )
(word~) atan2_16::$15 ← - (word) atan2_16::angle#11
(word) atan2_16::angle#5 ← (word~) atan2_16::$15
to:atan2_16::@8
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
(word) atan2_16::return#3 ← phi( atan2_16::@8/(word) atan2_16::return#0 )
(word) atan2_16::return#1 ← (word) atan2_16::return#3
return
to:@return
(void()) main()
main: scope:[main] from __start::@1
(byte*) SCREEN_ANGLE#5 ← phi( __start::@1/(byte*) SCREEN_ANGLE#8 )
(word*) SQUARES#23 ← phi( __start::@1/(word*) SQUARES#28 )
(byte*) heap_head#27 ← phi( __start::@1/(byte*) heap_head#32 )
(byte) NUM_SQUARES#18 ← phi( __start::@1/(byte) NUM_SQUARES#22 )
(byte*) SCREEN_DIST#2 ← phi( __start::@1/(byte*) SCREEN_DIST#5 )
2020-06-27 19:18:00 +00:00
(byte*) init_dist_screen::screen#0 ← (byte*) SCREEN_DIST#2
call init_dist_screen
to:main::@9
main::@9: scope:[main] from main
2020-06-27 19:18:00 +00:00
(byte*) SCREEN_DIST#11 ← phi( main/(byte*) SCREEN_DIST#2 )
(byte*) SCREEN_ANGLE#2 ← phi( main/(byte*) SCREEN_ANGLE#5 )
(word*) SQUARES#13 ← phi( main/(word*) SQUARES#5 )
(byte*) heap_head#17 ← phi( main/(byte*) heap_head#7 )
(byte) NUM_SQUARES#10 ← phi( main/(byte) NUM_SQUARES#3 )
(byte) NUM_SQUARES#0 ← (byte) NUM_SQUARES#10
(byte*) heap_head#4 ← (byte*) heap_head#17
(word*) SQUARES#2 ← (word*) SQUARES#13
(byte*) init_angle_screen::screen#0 ← (byte*) SCREEN_ANGLE#2
call init_angle_screen
to:main::@10
main::@10: scope:[main] from main::@9
2020-06-27 19:18:00 +00:00
(word*) SQUARES#30 ← phi( main::@9/(word*) SQUARES#2 )
(byte*) heap_head#34 ← phi( main::@9/(byte*) heap_head#4 )
(byte) NUM_SQUARES#23 ← phi( main::@9/(byte) NUM_SQUARES#0 )
(byte*) SCREEN_ANGLE#9 ← phi( main::@9/(byte*) SCREEN_ANGLE#2 )
(byte*) SCREEN_DIST#8 ← phi( main::@9/(byte*) SCREEN_DIST#11 )
to:main::@1
main::@1: scope:[main] from main::@10 main::@8
2020-06-27 19:18:00 +00:00
(word*) SQUARES#24 ← phi( main::@10/(word*) SQUARES#30 main::@8/(word*) SQUARES#31 )
(byte*) heap_head#28 ← phi( main::@10/(byte*) heap_head#34 main::@8/(byte*) heap_head#35 )
(byte) NUM_SQUARES#19 ← phi( main::@10/(byte) NUM_SQUARES#23 main::@8/(byte) NUM_SQUARES#24 )
(byte*) SCREEN_ANGLE#6 ← phi( main::@10/(byte*) SCREEN_ANGLE#9 main::@8/(byte*) SCREEN_ANGLE#10 )
(byte*) SCREEN_DIST#6 ← phi( main::@10/(byte*) SCREEN_DIST#8 main::@8/(byte*) SCREEN_DIST#9 )
if(true) goto main::@2
to:main::@return
main::@2: scope:[main] from main::@1
2020-06-27 19:18:00 +00:00
(word*) SQUARES#47 ← phi( main::@1/(word*) SQUARES#24 )
(byte*) heap_head#43 ← phi( main::@1/(byte*) heap_head#28 )
(byte) NUM_SQUARES#37 ← phi( main::@1/(byte) NUM_SQUARES#19 )
(byte*) SCREEN_ANGLE#3 ← phi( main::@1/(byte*) SCREEN_ANGLE#6 )
(byte*) SCREEN_DIST#3 ← phi( main::@1/(byte*) SCREEN_DIST#6 )
(byte*) main::dist#0 ← (byte*) SCREEN_DIST#3
(byte*) main::angle#0 ← (byte*) SCREEN_ANGLE#3
(byte*) main::fill#0 ← (const nomodify byte*) SCREEN_FILL
(word) main::min_dist_angle#0 ← (word) $ffff
(byte*) main::min_fill#0 ← (const nomodify byte*) SCREEN_FILL
to:main::@3
main::@3: scope:[main] from main::@2 main::@4
2020-06-27 19:18:00 +00:00
(byte*) SCREEN_ANGLE#13 ← phi( main::@2/(byte*) SCREEN_ANGLE#3 main::@4/(byte*) SCREEN_ANGLE#12 )
(byte*) SCREEN_DIST#14 ← phi( main::@2/(byte*) SCREEN_DIST#3 main::@4/(byte*) SCREEN_DIST#13 )
(word*) SQUARES#39 ← phi( main::@2/(word*) SQUARES#47 main::@4/(word*) SQUARES#32 )
(byte*) heap_head#38 ← phi( main::@2/(byte*) heap_head#43 main::@4/(byte*) heap_head#36 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#29 ← phi( main::@2/(byte) NUM_SQUARES#37 main::@4/(byte) NUM_SQUARES#25 )
(byte*) main::min_fill#5 ← phi( main::@2/(byte*) main::min_fill#0 main::@4/(byte*) main::min_fill#4 )
(word) main::min_dist_angle#4 ← phi( main::@2/(word) main::min_dist_angle#0 main::@4/(word) main::min_dist_angle#5 )
(byte*) main::angle#4 ← phi( main::@2/(byte*) main::angle#0 main::@4/(byte*) main::angle#1 )
(byte*) main::dist#4 ← phi( main::@2/(byte*) main::dist#0 main::@4/(byte*) main::dist#1 )
(byte*) main::fill#2 ← phi( main::@2/(byte*) main::fill#0 main::@4/(byte*) main::fill#1 )
(bool~) main::$2 ← *((byte*) main::fill#2) != (const nomodify byte) FILL_CHAR
(bool~) main::$3 ← ! (bool~) main::$2
if((bool~) main::$3) goto main::@4
to:main::@5
main::@4: scope:[main] from main::@3 main::@5 main::@6
2020-06-27 19:18:00 +00:00
(byte*) SCREEN_ANGLE#12 ← phi( main::@3/(byte*) SCREEN_ANGLE#13 main::@5/(byte*) SCREEN_ANGLE#14 main::@6/(byte*) SCREEN_ANGLE#15 )
(byte*) SCREEN_DIST#13 ← phi( main::@3/(byte*) SCREEN_DIST#14 main::@5/(byte*) SCREEN_DIST#15 main::@6/(byte*) SCREEN_DIST#16 )
(word*) SQUARES#32 ← phi( main::@3/(word*) SQUARES#39 main::@5/(word*) SQUARES#40 main::@6/(word*) SQUARES#41 )
(byte*) heap_head#36 ← phi( main::@3/(byte*) heap_head#38 main::@5/(byte*) heap_head#39 main::@6/(byte*) heap_head#40 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#25 ← phi( main::@3/(byte) NUM_SQUARES#29 main::@5/(byte) NUM_SQUARES#30 main::@6/(byte) NUM_SQUARES#31 )
(byte*) main::min_fill#4 ← phi( main::@3/(byte*) main::min_fill#5 main::@5/(byte*) main::min_fill#6 main::@6/(byte*) main::min_fill#1 )
(word) main::min_dist_angle#5 ← phi( main::@3/(word) main::min_dist_angle#4 main::@5/(word) main::min_dist_angle#2 main::@6/(word) main::min_dist_angle#1 )
(byte*) main::fill#3 ← phi( main::@3/(byte*) main::fill#2 main::@5/(byte*) main::fill#5 main::@6/(byte*) main::fill#4 )
(byte*) main::angle#2 ← phi( main::@3/(byte*) main::angle#4 main::@5/(byte*) main::angle#3 main::@6/(byte*) main::angle#5 )
(byte*) main::dist#2 ← phi( main::@3/(byte*) main::dist#4 main::@5/(byte*) main::dist#3 main::@6/(byte*) main::dist#5 )
(byte*) main::dist#1 ← ++ (byte*) main::dist#2
(byte*) main::angle#1 ← ++ (byte*) main::angle#2
(byte*) main::fill#1 ← ++ (byte*) main::fill#3
(bool~) main::$6 ← (byte*) main::fill#1 < (const nomodify byte*) SCREEN_FILL+(number) $3e8
if((bool~) main::$6) goto main::@3
to:main::@7
main::@5: scope:[main] from main::@3
2020-06-27 19:18:00 +00:00
(byte*) SCREEN_ANGLE#14 ← phi( main::@3/(byte*) SCREEN_ANGLE#13 )
(byte*) SCREEN_DIST#15 ← phi( main::@3/(byte*) SCREEN_DIST#14 )
(word*) SQUARES#40 ← phi( main::@3/(word*) SQUARES#39 )
(byte*) heap_head#39 ← phi( main::@3/(byte*) heap_head#38 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#30 ← phi( main::@3/(byte) NUM_SQUARES#29 )
(byte*) main::min_fill#6 ← phi( main::@3/(byte*) main::min_fill#5 )
(byte*) main::fill#5 ← phi( main::@3/(byte*) main::fill#2 )
(word) main::min_dist_angle#2 ← phi( main::@3/(word) main::min_dist_angle#4 )
(byte*) main::angle#3 ← phi( main::@3/(byte*) main::angle#4 )
(byte*) main::dist#3 ← phi( main::@3/(byte*) main::dist#4 )
(word) main::dist_angle#0 ← (word){ *((byte*) main::dist#3), *((byte*) main::angle#3) }
(bool~) main::$4 ← (word) main::dist_angle#0 < (word) main::min_dist_angle#2
(bool~) main::$5 ← ! (bool~) main::$4
if((bool~) main::$5) goto main::@4
to:main::@6
main::@6: scope:[main] from main::@5
2020-06-27 19:18:00 +00:00
(byte*) SCREEN_ANGLE#15 ← phi( main::@5/(byte*) SCREEN_ANGLE#14 )
(byte*) SCREEN_DIST#16 ← phi( main::@5/(byte*) SCREEN_DIST#15 )
(word*) SQUARES#41 ← phi( main::@5/(word*) SQUARES#40 )
(byte*) heap_head#40 ← phi( main::@5/(byte*) heap_head#39 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#31 ← phi( main::@5/(byte) NUM_SQUARES#30 )
(byte*) main::angle#5 ← phi( main::@5/(byte*) main::angle#3 )
(byte*) main::dist#5 ← phi( main::@5/(byte*) main::dist#3 )
(word) main::dist_angle#1 ← phi( main::@5/(word) main::dist_angle#0 )
(byte*) main::fill#4 ← phi( main::@5/(byte*) main::fill#5 )
(byte*) main::min_fill#1 ← (byte*) main::fill#4
(word) main::min_dist_angle#1 ← (word) main::dist_angle#1
to:main::@4
main::@7: scope:[main] from main::@4
2020-06-27 19:18:00 +00:00
(byte*) SCREEN_ANGLE#11 ← phi( main::@4/(byte*) SCREEN_ANGLE#12 )
(byte*) SCREEN_DIST#12 ← phi( main::@4/(byte*) SCREEN_DIST#13 )
(word*) SQUARES#25 ← phi( main::@4/(word*) SQUARES#32 )
(byte*) heap_head#29 ← phi( main::@4/(byte*) heap_head#36 )
(byte) NUM_SQUARES#20 ← phi( main::@4/(byte) NUM_SQUARES#25 )
(byte*) main::min_fill#3 ← phi( main::@4/(byte*) main::min_fill#4 )
(word) main::min_dist_angle#3 ← phi( main::@4/(word) main::min_dist_angle#5 )
(bool~) main::$7 ← (word) main::min_dist_angle#3 == (number) $ffff
(bool~) main::$8 ← ! (bool~) main::$7
if((bool~) main::$8) goto main::@8
to:main::@return
main::@8: scope:[main] from main::@7
2020-06-27 19:18:00 +00:00
(word*) SQUARES#31 ← phi( main::@7/(word*) SQUARES#25 )
(byte*) heap_head#35 ← phi( main::@7/(byte*) heap_head#29 )
(byte) NUM_SQUARES#24 ← phi( main::@7/(byte) NUM_SQUARES#20 )
(byte*) SCREEN_ANGLE#10 ← phi( main::@7/(byte*) SCREEN_ANGLE#11 )
(byte*) SCREEN_DIST#9 ← phi( main::@7/(byte*) SCREEN_DIST#12 )
(byte*) main::min_fill#2 ← phi( main::@7/(byte*) main::min_fill#3 )
*((byte*) main::min_fill#2) ← (const nomodify byte) FILL_CHAR
to:main::@1
main::@return: scope:[main] from main::@1 main::@7
2020-06-27 19:18:00 +00:00
(word*) SQUARES#14 ← phi( main::@1/(word*) SQUARES#24 main::@7/(word*) SQUARES#25 )
(byte*) heap_head#18 ← phi( main::@1/(byte*) heap_head#28 main::@7/(byte*) heap_head#29 )
(byte) NUM_SQUARES#11 ← phi( main::@1/(byte) NUM_SQUARES#19 main::@7/(byte) NUM_SQUARES#20 )
(byte) NUM_SQUARES#1 ← (byte) NUM_SQUARES#11
(byte*) heap_head#5 ← (byte*) heap_head#18
(word*) SQUARES#3 ← (word*) SQUARES#14
return
to:@return
(void()) init_angle_screen((byte*) init_angle_screen::screen)
init_angle_screen: scope:[init_angle_screen] from main::@9
(byte*) init_angle_screen::screen#1 ← phi( main::@9/(byte*) init_angle_screen::screen#0 )
(byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
(byte*) init_angle_screen::screen_topline#0 ← (byte*~) init_angle_screen::$0
(byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
(byte*) init_angle_screen::screen_bottomline#0 ← (byte*~) init_angle_screen::$1
(byte) init_angle_screen::y#0 ← (byte) 0
to:init_angle_screen::@1
init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4
(byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 )
(byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 )
(byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) init_angle_screen::y#0 init_angle_screen::@4/(byte) init_angle_screen::y#1 )
(byte) init_angle_screen::x#0 ← (byte) 0
(byte) init_angle_screen::xb#0 ← (byte) $27
to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5
(byte) init_angle_screen::xb#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@5/(byte) init_angle_screen::xb#1 )
(byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_bottomline#6 init_angle_screen::@5/(byte*) init_angle_screen::screen_bottomline#2 )
(byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_topline#6 init_angle_screen::@5/(byte*) init_angle_screen::screen_topline#2 )
(byte) init_angle_screen::y#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::y#5 init_angle_screen::@5/(byte) init_angle_screen::y#6 )
(byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) init_angle_screen::x#0 init_angle_screen::@5/(byte) init_angle_screen::x#1 )
(bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13
if((bool~) init_angle_screen::$2) goto init_angle_screen::@3
to:init_angle_screen::@4
init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2
(byte*) init_angle_screen::screen_topline#4 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_topline#5 )
(byte) init_angle_screen::xb#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#4 )
(byte*) init_angle_screen::screen_bottomline#4 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_bottomline#5 )
(byte) init_angle_screen::y#2 ← phi( init_angle_screen::@2/(byte) init_angle_screen::y#4 )
(byte) init_angle_screen::x#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#2 )
(number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2
(number~) init_angle_screen::$4 ← (number) $27 - (number~) init_angle_screen::$3
(signed word) init_angle_screen::xw#0 ← (signed word)(word){ (number~) init_angle_screen::$4, (number) 0 }
(number~) init_angle_screen::$5 ← (byte) init_angle_screen::y#2 * (number) 2
(signed word) init_angle_screen::yw#0 ← (signed word)(word){ (number~) init_angle_screen::$5, (number) 0 }
(signed word) atan2_16::x#0 ← (signed word) init_angle_screen::xw#0
(signed word) atan2_16::y#0 ← (signed word) init_angle_screen::yw#0
call atan2_16
(word) atan2_16::return#2 ← (word) atan2_16::return#1
to:init_angle_screen::@5
init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3
(byte) init_angle_screen::y#6 ← phi( init_angle_screen::@3/(byte) init_angle_screen::y#2 )
(byte) init_angle_screen::x#4 ← phi( init_angle_screen::@3/(byte) init_angle_screen::x#3 )
(byte*) init_angle_screen::screen_topline#2 ← phi( init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#4 )
(byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@3/(byte) init_angle_screen::xb#3 )
(byte*) init_angle_screen::screen_bottomline#2 ← phi( init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#4 )
(word) atan2_16::return#4 ← phi( init_angle_screen::@3/(word) atan2_16::return#2 )
(word~) init_angle_screen::$6 ← (word) atan2_16::return#4
(word) init_angle_screen::angle_w#0 ← (word~) init_angle_screen::$6
(number~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (number) $80
(number~) init_angle_screen::$8 ← > (number~) init_angle_screen::$7
(byte) init_angle_screen::ang_w#0 ← (number~) init_angle_screen::$8
*((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
(byte~) init_angle_screen::$9 ← - (byte) init_angle_screen::ang_w#0
*((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$9
(number~) init_angle_screen::$10 ← (number) $80 + (byte) init_angle_screen::ang_w#0
*((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::x#4) ← (number~) init_angle_screen::$10
(number~) init_angle_screen::$11 ← (number) $80 - (byte) init_angle_screen::ang_w#0
*((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::x#4) ← (number~) init_angle_screen::$11
(byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#4
(byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
to:init_angle_screen::@2
init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2
(byte) init_angle_screen::y#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::y#4 )
(byte*) init_angle_screen::screen_bottomline#3 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_bottomline#5 )
(byte*) init_angle_screen::screen_topline#3 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_topline#5 )
(byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28
(byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28
(byte) init_angle_screen::y#1 ← (byte) init_angle_screen::y#3 + rangenext(0,$c)
(bool~) init_angle_screen::$12 ← (byte) init_angle_screen::y#1 != rangelast(0,$c)
if((bool~) init_angle_screen::$12) goto init_angle_screen::@1
to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4
return
to:@return
(void()) init_dist_screen((byte*) init_dist_screen::screen)
init_dist_screen: scope:[init_dist_screen] from main
(byte*) init_dist_screen::screen#2 ← phi( main/(byte*) init_dist_screen::screen#0 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#26 ← phi( main/(word*) SQUARES#23 )
(byte*) heap_head#30 ← phi( main/(byte*) heap_head#27 )
(byte) NUM_SQUARES#2 ← (number) $30
call init_squares
to:init_dist_screen::@11
init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#43 ← phi( init_dist_screen/(byte) NUM_SQUARES#2 )
(byte*) init_dist_screen::screen#1 ← phi( init_dist_screen/(byte*) init_dist_screen::screen#2 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#15 ← phi( init_dist_screen/(word*) SQUARES#1 )
(byte*) heap_head#19 ← phi( init_dist_screen/(byte*) heap_head#3 )
(byte*) heap_head#6 ← (byte*) heap_head#19
(word*) SQUARES#4 ← (word*) SQUARES#15
(byte*) init_dist_screen::screen_topline#0 ← (byte*) init_dist_screen::screen#1
(byte*~) init_dist_screen::$1 ← (byte*) init_dist_screen::screen#1 + (number) $28*(number) $18
(byte*) init_dist_screen::screen_bottomline#0 ← (byte*~) init_dist_screen::$1
(byte) init_dist_screen::y#0 ← (byte) 0
to:init_dist_screen::@1
init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@7
2020-06-27 19:18:00 +00:00
(byte*) heap_head#49 ← phi( init_dist_screen::@11/(byte*) heap_head#6 init_dist_screen::@7/(byte*) heap_head#31 )
(byte) NUM_SQUARES#42 ← phi( init_dist_screen::@11/(byte) NUM_SQUARES#43 init_dist_screen::@7/(byte) NUM_SQUARES#21 )
(byte*) init_dist_screen::screen_bottomline#14 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 )
(byte*) init_dist_screen::screen_topline#14 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_topline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#42 ← phi( init_dist_screen::@11/(word*) SQUARES#4 init_dist_screen::@7/(word*) SQUARES#27 )
(byte) init_dist_screen::y#2 ← phi( init_dist_screen::@11/(byte) init_dist_screen::y#0 init_dist_screen::@7/(byte) init_dist_screen::y#1 )
(number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (number) 2
(byte) init_dist_screen::y2#0 ← (number~) init_dist_screen::$2
(bool~) init_dist_screen::$3 ← (byte) init_dist_screen::y2#0 >= (number) $18
if((bool~) init_dist_screen::$3) goto init_dist_screen::@2
to:init_dist_screen::@3
init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1
2020-02-15 08:30:27 +00:00
(byte*) heap_head#46 ← phi( init_dist_screen::@1/(byte*) heap_head#49 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#40 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#42 )
(byte) init_dist_screen::y#9 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 )
(byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#14 )
(byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#14 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#33 ← phi( init_dist_screen::@1/(word*) SQUARES#42 )
(byte) init_dist_screen::y2#1 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y2#0 )
(number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (number) $18
(number~) init_dist_screen::$7 ← (number~) init_dist_screen::$6
to:init_dist_screen::@4
init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1
2020-02-15 08:30:27 +00:00
(byte*) heap_head#47 ← phi( init_dist_screen::@1/(byte*) heap_head#49 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#41 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#42 )
(byte) init_dist_screen::y#10 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 )
(byte*) init_dist_screen::screen_bottomline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#14 )
(byte*) init_dist_screen::screen_topline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#14 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#34 ← phi( init_dist_screen::@1/(word*) SQUARES#42 )
(byte) init_dist_screen::y2#2 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y2#0 )
(number~) init_dist_screen::$4 ← (number) $18 - (byte) init_dist_screen::y2#2
(number~) init_dist_screen::$5 ← (number~) init_dist_screen::$4
to:init_dist_screen::@4
init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3
2020-02-15 08:30:27 +00:00
(byte*) heap_head#44 ← phi( init_dist_screen::@2/(byte*) heap_head#46 init_dist_screen::@3/(byte*) heap_head#47 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#38 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#40 init_dist_screen::@3/(byte) NUM_SQUARES#41 )
(byte) init_dist_screen::y#7 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#9 init_dist_screen::@3/(byte) init_dist_screen::y#10 )
(byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 )
(byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#21 ← phi( init_dist_screen::@2/(word*) SQUARES#33 init_dist_screen::@3/(word*) SQUARES#34 )
(number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(number~) init_dist_screen::$7 init_dist_screen::@3/(number~) init_dist_screen::$5 )
(byte) init_dist_screen::yd#0 ← (number~) init_dist_screen::$8
(byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
call sqr
(word) sqr::return#2 ← (word) sqr::return#1
to:init_dist_screen::@12
init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4
2020-06-27 19:18:00 +00:00
(word*) SQUARES#43 ← phi( init_dist_screen::@4/(word*) SQUARES#21 )
2020-02-15 08:30:27 +00:00
(byte*) heap_head#41 ← phi( init_dist_screen::@4/(byte*) heap_head#44 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#32 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#38 )
(byte) init_dist_screen::y#5 ← phi( init_dist_screen::@4/(byte) init_dist_screen::y#7 )
(byte*) init_dist_screen::screen_bottomline#6 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_bottomline#8 )
(byte*) init_dist_screen::screen_topline#6 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_topline#8 )
(word) sqr::return#5 ← phi( init_dist_screen::@4/(word) sqr::return#2 )
(word~) init_dist_screen::$9 ← (word) sqr::return#5
(word) init_dist_screen::yds#0 ← (word~) init_dist_screen::$9
(byte) init_dist_screen::x#0 ← (byte) 0
(byte) init_dist_screen::xb#0 ← (byte) $27
to:init_dist_screen::@5
init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14
(byte) init_dist_screen::xb#8 ← phi( init_dist_screen::@12/(byte) init_dist_screen::xb#0 init_dist_screen::@14/(byte) init_dist_screen::xb#1 )
(word) init_dist_screen::yds#6 ← phi( init_dist_screen::@12/(word) init_dist_screen::yds#0 init_dist_screen::@14/(word) init_dist_screen::yds#7 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#35 ← phi( init_dist_screen::@12/(word*) SQUARES#43 init_dist_screen::@14/(word*) SQUARES#44 )
(byte*) heap_head#37 ← phi( init_dist_screen::@12/(byte*) heap_head#41 init_dist_screen::@14/(byte*) heap_head#42 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#26 ← phi( init_dist_screen::@12/(byte) NUM_SQUARES#32 init_dist_screen::@14/(byte) NUM_SQUARES#33 )
(byte) init_dist_screen::y#4 ← phi( init_dist_screen::@12/(byte) init_dist_screen::y#5 init_dist_screen::@14/(byte) init_dist_screen::y#6 )
(byte*) init_dist_screen::screen_bottomline#4 ← phi( init_dist_screen::@12/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@14/(byte*) init_dist_screen::screen_bottomline#3 )
(byte*) init_dist_screen::screen_topline#4 ← phi( init_dist_screen::@12/(byte*) init_dist_screen::screen_topline#6 init_dist_screen::@14/(byte*) init_dist_screen::screen_topline#3 )
(byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) init_dist_screen::x#0 init_dist_screen::@14/(byte) init_dist_screen::x#1 )
(bool~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 <= (number) $13
if((bool~) init_dist_screen::$10) goto init_dist_screen::@6
to:init_dist_screen::@7
init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5
2020-02-15 08:30:27 +00:00
(byte*) heap_head#52 ← phi( init_dist_screen::@5/(byte*) heap_head#37 )
(byte) init_dist_screen::y#14 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#4 )
(byte) init_dist_screen::xb#7 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#8 )
(byte*) init_dist_screen::screen_bottomline#13 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#4 )
(byte*) init_dist_screen::screen_topline#13 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#4 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#39 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#26 )
(word) init_dist_screen::yds#5 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#6 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#45 ← phi( init_dist_screen::@5/(word*) SQUARES#35 )
(byte) init_dist_screen::x#3 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#2 )
(number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (number) 2
(byte) init_dist_screen::x2#0 ← (number~) init_dist_screen::$11
(bool~) init_dist_screen::$12 ← (byte) init_dist_screen::x2#0 >= (number) $27
if((bool~) init_dist_screen::$12) goto init_dist_screen::@8
to:init_dist_screen::@9
init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5
2020-06-27 19:18:00 +00:00
(word*) SQUARES#27 ← phi( init_dist_screen::@5/(word*) SQUARES#35 )
(byte*) heap_head#31 ← phi( init_dist_screen::@5/(byte*) heap_head#37 )
(byte) NUM_SQUARES#21 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#26 )
(byte) init_dist_screen::y#3 ← phi( init_dist_screen::@5/(byte) init_dist_screen::y#4 )
(byte*) init_dist_screen::screen_bottomline#2 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_bottomline#4 )
(byte*) init_dist_screen::screen_topline#2 ← phi( init_dist_screen::@5/(byte*) init_dist_screen::screen_topline#4 )
(byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#2 + (number) $28
(byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#2 - (number) $28
(byte) init_dist_screen::y#1 ← (byte) init_dist_screen::y#3 + rangenext(0,$c)
(bool~) init_dist_screen::$21 ← (byte) init_dist_screen::y#1 != rangelast(0,$c)
if((bool~) init_dist_screen::$21) goto init_dist_screen::@1
to:init_dist_screen::@return
init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6
2020-02-15 08:30:27 +00:00
(byte*) heap_head#50 ← phi( init_dist_screen::@6/(byte*) heap_head#52 )
(byte) init_dist_screen::y#12 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#14 )
(byte) init_dist_screen::xb#5 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#7 )
(byte*) init_dist_screen::screen_bottomline#9 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#13 )
(byte) init_dist_screen::x#7 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x#3 )
(byte*) init_dist_screen::screen_topline#9 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_topline#13 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#34 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#39 )
(word) init_dist_screen::yds#3 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#5 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#36 ← phi( init_dist_screen::@6/(word*) SQUARES#45 )
(byte) init_dist_screen::x2#1 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x2#0 )
(number~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#1 - (number) $27
(number~) init_dist_screen::$16 ← (number~) init_dist_screen::$15
to:init_dist_screen::@10
init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6
2020-02-15 08:30:27 +00:00
(byte*) heap_head#51 ← phi( init_dist_screen::@6/(byte*) heap_head#52 )
(byte) init_dist_screen::y#13 ← phi( init_dist_screen::@6/(byte) init_dist_screen::y#14 )
(byte) init_dist_screen::xb#6 ← phi( init_dist_screen::@6/(byte) init_dist_screen::xb#7 )
(byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_bottomline#13 )
(byte) init_dist_screen::x#8 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x#3 )
(byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@6/(byte*) init_dist_screen::screen_topline#13 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#35 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#39 )
(word) init_dist_screen::yds#4 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#5 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#37 ← phi( init_dist_screen::@6/(word*) SQUARES#45 )
(byte) init_dist_screen::x2#2 ← phi( init_dist_screen::@6/(byte) init_dist_screen::x2#0 )
(number~) init_dist_screen::$13 ← (number) $27 - (byte) init_dist_screen::x2#2
(number~) init_dist_screen::$14 ← (number~) init_dist_screen::$13
to:init_dist_screen::@10
init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9
2020-02-15 08:30:27 +00:00
(byte*) heap_head#48 ← phi( init_dist_screen::@8/(byte*) heap_head#50 init_dist_screen::@9/(byte*) heap_head#51 )
(byte) init_dist_screen::y#11 ← phi( init_dist_screen::@8/(byte) init_dist_screen::y#12 init_dist_screen::@9/(byte) init_dist_screen::y#13 )
(byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@8/(byte) init_dist_screen::xb#5 init_dist_screen::@9/(byte) init_dist_screen::xb#6 )
(byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_bottomline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#10 )
(byte) init_dist_screen::x#6 ← phi( init_dist_screen::@8/(byte) init_dist_screen::x#7 init_dist_screen::@9/(byte) init_dist_screen::x#8 )
(byte*) init_dist_screen::screen_topline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_topline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#10 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#27 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#34 init_dist_screen::@9/(byte) NUM_SQUARES#35 )
(word) init_dist_screen::yds#2 ← phi( init_dist_screen::@8/(word) init_dist_screen::yds#3 init_dist_screen::@9/(word) init_dist_screen::yds#4 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#20 ← phi( init_dist_screen::@8/(word*) SQUARES#36 init_dist_screen::@9/(word*) SQUARES#37 )
(number~) init_dist_screen::$17 ← phi( init_dist_screen::@8/(number~) init_dist_screen::$16 init_dist_screen::@9/(number~) init_dist_screen::$14 )
(byte) init_dist_screen::xd#0 ← (number~) init_dist_screen::$17
(byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
call sqr
(word) sqr::return#3 ← (word) sqr::return#1
to:init_dist_screen::@13
init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10
2020-02-15 08:30:27 +00:00
(byte*) heap_head#45 ← phi( init_dist_screen::@10/(byte*) heap_head#48 )
(byte) init_dist_screen::y#8 ← phi( init_dist_screen::@10/(byte) init_dist_screen::y#11 )
(byte) init_dist_screen::xb#3 ← phi( init_dist_screen::@10/(byte) init_dist_screen::xb#4 )
(byte*) init_dist_screen::screen_bottomline#5 ← phi( init_dist_screen::@10/(byte*) init_dist_screen::screen_bottomline#7 )
(byte) init_dist_screen::x#5 ← phi( init_dist_screen::@10/(byte) init_dist_screen::x#6 )
(byte*) init_dist_screen::screen_topline#5 ← phi( init_dist_screen::@10/(byte*) init_dist_screen::screen_topline#7 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#17 ← phi( init_dist_screen::@10/(byte) NUM_SQUARES#27 )
(word*) SQUARES#22 ← phi( init_dist_screen::@10/(word*) SQUARES#20 )
(word) init_dist_screen::yds#1 ← phi( init_dist_screen::@10/(word) init_dist_screen::yds#2 )
(word) sqr::return#6 ← phi( init_dist_screen::@10/(word) sqr::return#3 )
(word~) init_dist_screen::$18 ← (word) sqr::return#6
(word) init_dist_screen::xds#0 ← (word~) init_dist_screen::$18
(word~) init_dist_screen::$19 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#1
(word) init_dist_screen::ds#0 ← (word~) init_dist_screen::$19
(word) sqrt::val#0 ← (word) init_dist_screen::ds#0
call sqrt
(byte) sqrt::return#2 ← (byte) sqrt::return#1
to:init_dist_screen::@14
init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13
(word) init_dist_screen::yds#7 ← phi( init_dist_screen::@13/(word) init_dist_screen::yds#1 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#44 ← phi( init_dist_screen::@13/(word*) SQUARES#22 )
(byte*) heap_head#42 ← phi( init_dist_screen::@13/(byte*) heap_head#45 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#33 ← phi( init_dist_screen::@13/(byte) NUM_SQUARES#17 )
(byte) init_dist_screen::y#6 ← phi( init_dist_screen::@13/(byte) init_dist_screen::y#8 )
(byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@13/(byte) init_dist_screen::xb#3 )
(byte*) init_dist_screen::screen_bottomline#3 ← phi( init_dist_screen::@13/(byte*) init_dist_screen::screen_bottomline#5 )
(byte) init_dist_screen::x#4 ← phi( init_dist_screen::@13/(byte) init_dist_screen::x#5 )
(byte*) init_dist_screen::screen_topline#3 ← phi( init_dist_screen::@13/(byte*) init_dist_screen::screen_topline#5 )
(byte) sqrt::return#4 ← phi( init_dist_screen::@13/(byte) sqrt::return#2 )
(byte~) init_dist_screen::$20 ← (byte) sqrt::return#4
(byte) init_dist_screen::d#0 ← (byte~) init_dist_screen::$20
*((byte*) init_dist_screen::screen_topline#3 + (byte) init_dist_screen::x#4) ← (byte) init_dist_screen::d#0
*((byte*) init_dist_screen::screen_bottomline#3 + (byte) init_dist_screen::x#4) ← (byte) init_dist_screen::d#0
*((byte*) init_dist_screen::screen_topline#3 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
*((byte*) init_dist_screen::screen_bottomline#3 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
(byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#4
(byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
to:init_dist_screen::@5
init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7
2020-06-27 19:18:00 +00:00
(word*) SQUARES#16 ← phi( init_dist_screen::@7/(word*) SQUARES#27 )
(byte*) heap_head#20 ← phi( init_dist_screen::@7/(byte*) heap_head#31 )
(byte) NUM_SQUARES#12 ← phi( init_dist_screen::@7/(byte) NUM_SQUARES#21 )
(byte) NUM_SQUARES#3 ← (byte) NUM_SQUARES#12
(byte*) heap_head#7 ← (byte*) heap_head#20
(word*) SQUARES#5 ← (word*) SQUARES#16
return
to:@return
2020-06-27 19:18:00 +00:00
(void()) __start()
__start: scope:[__start] from
to:__start::__init1
__start::__init1: scope:[__start] from __start
2020-06-27 19:18:00 +00:00
(byte*) heap_head#8 ← (const byte*) HEAP_TOP
(byte) NUM_SQUARES#4 ← (byte) $ff
(word*) SQUARES#6 ← (word*) 0
(word) malloc::size#1 ← (number) $3e8
call malloc
(void*) malloc::return#3 ← (void*) malloc::return#1
to:__start::@2
__start::@2: scope:[__start] from __start::__init1
(word*) SQUARES#46 ← phi( __start::__init1/(word*) SQUARES#6 )
(byte) NUM_SQUARES#36 ← phi( __start::__init1/(byte) NUM_SQUARES#4 )
(byte*) heap_head#21 ← phi( __start::__init1/(byte*) heap_head#1 )
(void*) malloc::return#7 ← phi( __start::__init1/(void*) malloc::return#3 )
(void*~) __start::__init1_$0 ← (void*) malloc::return#7
2020-06-27 19:18:00 +00:00
(byte*) heap_head#9 ← (byte*) heap_head#21
(byte*) SCREEN_DIST#0 ← ((byte*)) (void*~) __start::__init1_$0
2020-06-27 19:18:00 +00:00
(word) malloc::size#2 ← (number) $3e8
call malloc
(void*) malloc::return#4 ← (void*) malloc::return#1
to:__start::@3
__start::@3: scope:[__start] from __start::@2
(word*) SQUARES#38 ← phi( __start::@2/(word*) SQUARES#46 )
(byte) NUM_SQUARES#28 ← phi( __start::@2/(byte) NUM_SQUARES#36 )
(byte*) SCREEN_DIST#10 ← phi( __start::@2/(byte*) SCREEN_DIST#0 )
(byte*) heap_head#22 ← phi( __start::@2/(byte*) heap_head#1 )
(void*) malloc::return#8 ← phi( __start::@2/(void*) malloc::return#4 )
(void*~) __start::__init1_$1 ← (void*) malloc::return#8
2020-06-27 19:18:00 +00:00
(byte*) heap_head#10 ← (byte*) heap_head#22
(byte*) SCREEN_ANGLE#0 ← ((byte*)) (void*~) __start::__init1_$1
to:__start::@1
__start::@1: scope:[__start] from __start::@3
(byte*) SCREEN_ANGLE#8 ← phi( __start::@3/(byte*) SCREEN_ANGLE#0 )
(word*) SQUARES#28 ← phi( __start::@3/(word*) SQUARES#38 )
(byte*) heap_head#32 ← phi( __start::@3/(byte*) heap_head#10 )
(byte) NUM_SQUARES#22 ← phi( __start::@3/(byte) NUM_SQUARES#28 )
(byte*) SCREEN_DIST#5 ← phi( __start::@3/(byte*) SCREEN_DIST#10 )
call main
to:__start::@4
__start::@4: scope:[__start] from __start::@1
(byte*) SCREEN_ANGLE#7 ← phi( __start::@1/(byte*) SCREEN_ANGLE#8 )
(byte*) SCREEN_DIST#7 ← phi( __start::@1/(byte*) SCREEN_DIST#5 )
(word*) SQUARES#17 ← phi( __start::@1/(word*) SQUARES#3 )
(byte*) heap_head#23 ← phi( __start::@1/(byte*) heap_head#5 )
(byte) NUM_SQUARES#13 ← phi( __start::@1/(byte) NUM_SQUARES#1 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#5 ← (byte) NUM_SQUARES#13
(byte*) heap_head#11 ← (byte*) heap_head#23
(word*) SQUARES#7 ← (word*) SQUARES#17
to:__start::@return
__start::@return: scope:[__start] from __start::@4
(byte*) SCREEN_ANGLE#4 ← phi( __start::@4/(byte*) SCREEN_ANGLE#7 )
(byte*) SCREEN_DIST#4 ← phi( __start::@4/(byte*) SCREEN_DIST#7 )
(word*) SQUARES#18 ← phi( __start::@4/(word*) SQUARES#7 )
(byte) NUM_SQUARES#14 ← phi( __start::@4/(byte) NUM_SQUARES#5 )
(byte*) heap_head#24 ← phi( __start::@4/(byte*) heap_head#11 )
2020-06-27 19:18:00 +00:00
(byte*) heap_head#12 ← (byte*) heap_head#24
(byte) NUM_SQUARES#6 ← (byte) NUM_SQUARES#14
(word*) SQUARES#8 ← (word*) SQUARES#18
(byte*) SCREEN_DIST#1 ← (byte*) SCREEN_DIST#4
(byte*) SCREEN_ANGLE#1 ← (byte*) SCREEN_ANGLE#4
return
to:@return
SYMBOL TABLE SSA
(const word*) CORDIC_ATAN2_ANGLES_16[(const nomodify byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
2019-11-22 22:41:01 +00:00
.word 256*2*256*atan(1/pow(2,i))/PI/2
}}
(const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f
(const nomodify byte) FILL_CHAR = (byte) '@'
(const byte*) HEAP_TOP = (byte*)(number) $a000
(byte) NUM_SQUARES
(byte) NUM_SQUARES#0
(byte) NUM_SQUARES#1
(byte) NUM_SQUARES#10
(byte) NUM_SQUARES#11
(byte) NUM_SQUARES#12
(byte) NUM_SQUARES#13
(byte) NUM_SQUARES#14
(byte) NUM_SQUARES#15
(byte) NUM_SQUARES#16
(byte) NUM_SQUARES#17
(byte) NUM_SQUARES#18
(byte) NUM_SQUARES#19
(byte) NUM_SQUARES#2
(byte) NUM_SQUARES#20
(byte) NUM_SQUARES#21
(byte) NUM_SQUARES#22
(byte) NUM_SQUARES#23
(byte) NUM_SQUARES#24
(byte) NUM_SQUARES#25
(byte) NUM_SQUARES#26
(byte) NUM_SQUARES#27
(byte) NUM_SQUARES#28
(byte) NUM_SQUARES#29
(byte) NUM_SQUARES#3
(byte) NUM_SQUARES#30
(byte) NUM_SQUARES#31
(byte) NUM_SQUARES#32
(byte) NUM_SQUARES#33
(byte) NUM_SQUARES#34
(byte) NUM_SQUARES#35
(byte) NUM_SQUARES#36
(byte) NUM_SQUARES#37
(byte) NUM_SQUARES#38
(byte) NUM_SQUARES#39
(byte) NUM_SQUARES#4
(byte) NUM_SQUARES#40
2020-02-15 08:30:27 +00:00
(byte) NUM_SQUARES#41
(byte) NUM_SQUARES#42
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#43
(byte) NUM_SQUARES#5
(byte) NUM_SQUARES#6
(byte) NUM_SQUARES#7
(byte) NUM_SQUARES#8
(byte) NUM_SQUARES#9
2019-07-17 22:45:46 +00:00
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(byte*) SCREEN_ANGLE
(byte*) SCREEN_ANGLE#0
(byte*) SCREEN_ANGLE#1
(byte*) SCREEN_ANGLE#10
(byte*) SCREEN_ANGLE#11
(byte*) SCREEN_ANGLE#12
2020-06-27 19:18:00 +00:00
(byte*) SCREEN_ANGLE#13
(byte*) SCREEN_ANGLE#14
(byte*) SCREEN_ANGLE#15
(byte*) SCREEN_ANGLE#2
(byte*) SCREEN_ANGLE#3
(byte*) SCREEN_ANGLE#4
(byte*) SCREEN_ANGLE#5
(byte*) SCREEN_ANGLE#6
(byte*) SCREEN_ANGLE#7
(byte*) SCREEN_ANGLE#8
(byte*) SCREEN_ANGLE#9
(byte*) SCREEN_DIST
(byte*) SCREEN_DIST#0
(byte*) SCREEN_DIST#1
(byte*) SCREEN_DIST#10
(byte*) SCREEN_DIST#11
(byte*) SCREEN_DIST#12
(byte*) SCREEN_DIST#13
2020-06-27 19:18:00 +00:00
(byte*) SCREEN_DIST#14
(byte*) SCREEN_DIST#15
(byte*) SCREEN_DIST#16
(byte*) SCREEN_DIST#2
(byte*) SCREEN_DIST#3
(byte*) SCREEN_DIST#4
(byte*) SCREEN_DIST#5
(byte*) SCREEN_DIST#6
(byte*) SCREEN_DIST#7
(byte*) SCREEN_DIST#8
(byte*) SCREEN_DIST#9
(const nomodify byte*) SCREEN_FILL = (byte*)(number) $400
(const byte) SIZEOF_WORD = (byte) 2
(word*) SQUARES
(word*) SQUARES#0
(word*) SQUARES#1
(word*) SQUARES#10
(word*) SQUARES#11
(word*) SQUARES#12
(word*) SQUARES#13
(word*) SQUARES#14
(word*) SQUARES#15
(word*) SQUARES#16
(word*) SQUARES#17
(word*) SQUARES#18
(word*) SQUARES#19
(word*) SQUARES#2
(word*) SQUARES#20
(word*) SQUARES#21
(word*) SQUARES#22
(word*) SQUARES#23
(word*) SQUARES#24
(word*) SQUARES#25
(word*) SQUARES#26
(word*) SQUARES#27
(word*) SQUARES#28
(word*) SQUARES#29
(word*) SQUARES#3
(word*) SQUARES#30
(word*) SQUARES#31
(word*) SQUARES#32
(word*) SQUARES#33
(word*) SQUARES#34
(word*) SQUARES#35
(word*) SQUARES#36
(word*) SQUARES#37
(word*) SQUARES#38
(word*) SQUARES#39
(word*) SQUARES#4
(word*) SQUARES#40
(word*) SQUARES#41
(word*) SQUARES#42
(word*) SQUARES#43
(word*) SQUARES#44
(word*) SQUARES#45
2020-02-15 08:30:27 +00:00
(word*) SQUARES#46
2020-06-27 19:18:00 +00:00
(word*) SQUARES#47
(word*) SQUARES#5
(word*) SQUARES#6
(word*) SQUARES#7
(word*) SQUARES#8
(word*) SQUARES#9
(void()) __start()
(label) __start::@1
(label) __start::@2
(label) __start::@3
(label) __start::@4
(label) __start::@return
(label) __start::__init1
(void*~) __start::__init1_$0
(void*~) __start::__init1_$1
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(bool~) atan2_16::$0
(signed word~) atan2_16::$1
(bool~) atan2_16::$10
(bool~) atan2_16::$11
(number~) atan2_16::$12
(bool~) atan2_16::$13
(bool~) atan2_16::$14
(word~) atan2_16::$15
(bool~) atan2_16::$16
(bool~) atan2_16::$17
(bool~) atan2_16::$18
(bool~) atan2_16::$19
(signed word~) atan2_16::$2
(bool~) atan2_16::$20
(bool~) atan2_16::$21
(byte~) atan2_16::$22
(byte~) atan2_16::$23
(bool~) atan2_16::$24
(signed word~) atan2_16::$3
(signed word~) atan2_16::$4
(bool~) atan2_16::$5
(signed word~) atan2_16::$6
(signed word~) atan2_16::$7
(signed word~) atan2_16::$8
(signed word~) atan2_16::$9
(label) atan2_16::@1
(label) atan2_16::@10
(label) atan2_16::@11
(label) atan2_16::@12
(label) atan2_16::@13
(label) atan2_16::@14
(label) atan2_16::@15
(label) atan2_16::@16
(label) atan2_16::@17
(label) atan2_16::@18
(label) atan2_16::@19
(label) atan2_16::@2
(label) atan2_16::@20
(label) atan2_16::@21
(label) atan2_16::@3
(label) atan2_16::@4
(label) atan2_16::@5
(label) atan2_16::@6
(label) atan2_16::@7
(label) atan2_16::@8
(label) atan2_16::@9
(label) atan2_16::@return
(word) atan2_16::angle
(word) atan2_16::angle#0
(word) atan2_16::angle#1
(word) atan2_16::angle#10
(word) atan2_16::angle#11
(word) atan2_16::angle#12
(word) atan2_16::angle#13
(word) atan2_16::angle#14
(word) atan2_16::angle#15
(word) atan2_16::angle#16
(word) atan2_16::angle#17
(word) atan2_16::angle#18
(word) atan2_16::angle#19
(word) atan2_16::angle#2
(word) atan2_16::angle#20
(word) atan2_16::angle#3
(word) atan2_16::angle#4
(word) atan2_16::angle#5
(word) atan2_16::angle#6
(word) atan2_16::angle#7
(word) atan2_16::angle#8
(word) atan2_16::angle#9
(byte) atan2_16::i
(byte) atan2_16::i#0
(byte) atan2_16::i#1
(byte) atan2_16::i#10
(byte) atan2_16::i#11
(byte) atan2_16::i#2
(byte) atan2_16::i#3
(byte) atan2_16::i#4
(byte) atan2_16::i#5
(byte) atan2_16::i#6
(byte) atan2_16::i#7
(byte) atan2_16::i#8
(byte) atan2_16::i#9
(word) atan2_16::return
(word) atan2_16::return#0
(word) atan2_16::return#1
(word) atan2_16::return#2
(word) atan2_16::return#3
(word) atan2_16::return#4
(byte) atan2_16::shift
(byte) atan2_16::shift#0
(byte) atan2_16::shift#1
(byte) atan2_16::shift#2
(byte) atan2_16::shift#3
(byte) atan2_16::shift#4
(signed word) atan2_16::x
(signed word) atan2_16::x#0
(signed word) atan2_16::x#1
(signed word) atan2_16::x#10
(signed word) atan2_16::x#11
(signed word) atan2_16::x#12
(signed word) atan2_16::x#13
(signed word) atan2_16::x#14
(signed word) atan2_16::x#15
(signed word) atan2_16::x#16
(signed word) atan2_16::x#17
(signed word) atan2_16::x#18
(signed word) atan2_16::x#2
(signed word) atan2_16::x#3
(signed word) atan2_16::x#4
(signed word) atan2_16::x#5
(signed word) atan2_16::x#6
(signed word) atan2_16::x#7
(signed word) atan2_16::x#8
(signed word) atan2_16::x#9
(signed word) atan2_16::xd
(signed word) atan2_16::xd#0
(signed word) atan2_16::xd#1
(signed word) atan2_16::xd#2
(signed word) atan2_16::xd#3
(signed word) atan2_16::xd#4
(signed word) atan2_16::xd#5
(signed word) atan2_16::xd#6
(signed word) atan2_16::xd#7
(signed word) atan2_16::xd#8
(signed word) atan2_16::xd#9
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0
(signed word) atan2_16::xi#1
(signed word) atan2_16::xi#10
(signed word) atan2_16::xi#11
(signed word) atan2_16::xi#12
(signed word) atan2_16::xi#2
(signed word) atan2_16::xi#3
(signed word) atan2_16::xi#4
(signed word) atan2_16::xi#5
(signed word) atan2_16::xi#6
(signed word) atan2_16::xi#7
(signed word) atan2_16::xi#8
(signed word) atan2_16::xi#9
(signed word) atan2_16::y
(signed word) atan2_16::y#0
(signed word) atan2_16::y#1
(signed word) atan2_16::y#10
(signed word) atan2_16::y#11
(signed word) atan2_16::y#12
(signed word) atan2_16::y#13
(signed word) atan2_16::y#14
(signed word) atan2_16::y#15
(signed word) atan2_16::y#16
(signed word) atan2_16::y#17
(signed word) atan2_16::y#18
(signed word) atan2_16::y#19
(signed word) atan2_16::y#2
(signed word) atan2_16::y#20
(signed word) atan2_16::y#3
(signed word) atan2_16::y#4
(signed word) atan2_16::y#5
(signed word) atan2_16::y#6
(signed word) atan2_16::y#7
(signed word) atan2_16::y#8
(signed word) atan2_16::y#9
(signed word) atan2_16::yd
(signed word) atan2_16::yd#0
(signed word) atan2_16::yd#1
(signed word) atan2_16::yd#2
(signed word) atan2_16::yd#3
(signed word) atan2_16::yd#4
(signed word) atan2_16::yd#5
(signed word) atan2_16::yd#6
(signed word) atan2_16::yd#7
(signed word) atan2_16::yd#8
(signed word) atan2_16::yd#9
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0
(signed word) atan2_16::yi#1
(signed word) atan2_16::yi#10
(signed word) atan2_16::yi#11
(signed word) atan2_16::yi#12
(signed word) atan2_16::yi#13
(signed word) atan2_16::yi#14
(signed word) atan2_16::yi#15
(signed word) atan2_16::yi#2
(signed word) atan2_16::yi#3
(signed word) atan2_16::yi#4
(signed word) atan2_16::yi#5
(signed word) atan2_16::yi#6
(signed word) atan2_16::yi#7
(signed word) atan2_16::yi#8
(signed word) atan2_16::yi#9
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(bool~) bsearch16u::$0
(word*~) bsearch16u::$1
(bool~) bsearch16u::$10
(bool~) bsearch16u::$11
(bool~) bsearch16u::$12
(word*~) bsearch16u::$13
(byte~) bsearch16u::$14
(number~) bsearch16u::$15
(number~) bsearch16u::$16
(signed word~) bsearch16u::$17
(signed word~) bsearch16u::$18
(word*~) bsearch16u::$2
(word*~) bsearch16u::$3
(word*~) bsearch16u::$4
(bool~) bsearch16u::$5
(byte~) bsearch16u::$6
(word*~) bsearch16u::$7
(signed word~) bsearch16u::$8
(bool~) bsearch16u::$9
(label) bsearch16u::@1
(label) bsearch16u::@10
(label) bsearch16u::@2
(label) bsearch16u::@3
(label) bsearch16u::@4
(label) bsearch16u::@5
(label) bsearch16u::@6
(label) bsearch16u::@7
(label) bsearch16u::@8
(label) bsearch16u::@9
(label) bsearch16u::@return
(word*) bsearch16u::items
(word*) bsearch16u::items#0
(word*) bsearch16u::items#1
(word*) bsearch16u::items#2
(word*) bsearch16u::items#3
(word*) bsearch16u::items#4
(word*) bsearch16u::items#5
(word*) bsearch16u::items#6
(word*) bsearch16u::items#7
(word*) bsearch16u::items#8
(word*) bsearch16u::items#9
(word) bsearch16u::key
(word) bsearch16u::key#0
(word) bsearch16u::key#1
(word) bsearch16u::key#2
(word) bsearch16u::key#3
(word) bsearch16u::key#4
(word) bsearch16u::key#5
(word) bsearch16u::key#6
(word) bsearch16u::key#7
(byte) bsearch16u::num
(byte) bsearch16u::num#0
(byte) bsearch16u::num#1
(byte) bsearch16u::num#2
(byte) bsearch16u::num#3
(byte) bsearch16u::num#4
(byte) bsearch16u::num#5
(byte) bsearch16u::num#6
(byte) bsearch16u::num#7
(byte) bsearch16u::num#8
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0
(word*) bsearch16u::pivot#1
(word*) bsearch16u::pivot#2
(word*) bsearch16u::pivot#3
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0
(signed word) bsearch16u::result#1
(word*) bsearch16u::return
(word*) bsearch16u::return#0
(word*) bsearch16u::return#1
(word*) bsearch16u::return#2
(word*) bsearch16u::return#3
(word*) bsearch16u::return#4
(word*) bsearch16u::return#5
(byte*) heap_head
(byte*) heap_head#0
(byte*) heap_head#1
(byte*) heap_head#10
(byte*) heap_head#11
(byte*) heap_head#12
(byte*) heap_head#13
(byte*) heap_head#14
(byte*) heap_head#15
(byte*) heap_head#16
(byte*) heap_head#17
(byte*) heap_head#18
(byte*) heap_head#19
(byte*) heap_head#2
(byte*) heap_head#20
(byte*) heap_head#21
(byte*) heap_head#22
(byte*) heap_head#23
(byte*) heap_head#24
(byte*) heap_head#25
(byte*) heap_head#26
(byte*) heap_head#27
(byte*) heap_head#28
(byte*) heap_head#29
(byte*) heap_head#3
(byte*) heap_head#30
(byte*) heap_head#31
(byte*) heap_head#32
(byte*) heap_head#33
(byte*) heap_head#34
(byte*) heap_head#35
(byte*) heap_head#36
(byte*) heap_head#37
(byte*) heap_head#38
(byte*) heap_head#39
(byte*) heap_head#4
(byte*) heap_head#40
(byte*) heap_head#41
(byte*) heap_head#42
(byte*) heap_head#43
(byte*) heap_head#44
(byte*) heap_head#45
(byte*) heap_head#46
(byte*) heap_head#47
(byte*) heap_head#48
(byte*) heap_head#49
(byte*) heap_head#5
(byte*) heap_head#50
(byte*) heap_head#51
2020-02-15 08:30:27 +00:00
(byte*) heap_head#52
(byte*) heap_head#6
(byte*) heap_head#7
(byte*) heap_head#8
(byte*) heap_head#9
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(byte*~) init_angle_screen::$0
(byte*~) init_angle_screen::$1
(number~) init_angle_screen::$10
(number~) init_angle_screen::$11
(bool~) init_angle_screen::$12
(bool~) init_angle_screen::$2
(number~) init_angle_screen::$3
(number~) init_angle_screen::$4
(number~) init_angle_screen::$5
(word~) init_angle_screen::$6
(number~) init_angle_screen::$7
(number~) init_angle_screen::$8
(byte~) init_angle_screen::$9
(label) init_angle_screen::@1
(label) init_angle_screen::@2
(label) init_angle_screen::@3
(label) init_angle_screen::@4
(label) init_angle_screen::@5
(label) init_angle_screen::@return
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0
(byte*) init_angle_screen::screen#1
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0
(byte*) init_angle_screen::screen_bottomline#1
(byte*) init_angle_screen::screen_bottomline#2
(byte*) init_angle_screen::screen_bottomline#3
(byte*) init_angle_screen::screen_bottomline#4
(byte*) init_angle_screen::screen_bottomline#5
(byte*) init_angle_screen::screen_bottomline#6
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0
(byte*) init_angle_screen::screen_topline#1
(byte*) init_angle_screen::screen_topline#2
(byte*) init_angle_screen::screen_topline#3
(byte*) init_angle_screen::screen_topline#4
(byte*) init_angle_screen::screen_topline#5
(byte*) init_angle_screen::screen_topline#6
(byte) init_angle_screen::x
(byte) init_angle_screen::x#0
(byte) init_angle_screen::x#1
(byte) init_angle_screen::x#2
(byte) init_angle_screen::x#3
(byte) init_angle_screen::x#4
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#0
(byte) init_angle_screen::xb#1
(byte) init_angle_screen::xb#2
(byte) init_angle_screen::xb#3
(byte) init_angle_screen::xb#4
(signed word) init_angle_screen::xw
(signed word) init_angle_screen::xw#0
(byte) init_angle_screen::y
(byte) init_angle_screen::y#0
(byte) init_angle_screen::y#1
(byte) init_angle_screen::y#2
(byte) init_angle_screen::y#3
(byte) init_angle_screen::y#4
(byte) init_angle_screen::y#5
(byte) init_angle_screen::y#6
(signed word) init_angle_screen::yw
(signed word) init_angle_screen::yw#0
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte*~) init_dist_screen::$1
(bool~) init_dist_screen::$10
(number~) init_dist_screen::$11
(bool~) init_dist_screen::$12
(number~) init_dist_screen::$13
(number~) init_dist_screen::$14
(number~) init_dist_screen::$15
(number~) init_dist_screen::$16
(number~) init_dist_screen::$17
(word~) init_dist_screen::$18
(word~) init_dist_screen::$19
(number~) init_dist_screen::$2
(byte~) init_dist_screen::$20
(bool~) init_dist_screen::$21
(bool~) init_dist_screen::$3
(number~) init_dist_screen::$4
(number~) init_dist_screen::$5
(number~) init_dist_screen::$6
(number~) init_dist_screen::$7
(number~) init_dist_screen::$8
(word~) init_dist_screen::$9
(label) init_dist_screen::@1
(label) init_dist_screen::@10
(label) init_dist_screen::@11
(label) init_dist_screen::@12
(label) init_dist_screen::@13
(label) init_dist_screen::@14
(label) init_dist_screen::@2
(label) init_dist_screen::@3
(label) init_dist_screen::@4
(label) init_dist_screen::@5
(label) init_dist_screen::@6
(label) init_dist_screen::@7
(label) init_dist_screen::@8
(label) init_dist_screen::@9
(label) init_dist_screen::@return
(byte) init_dist_screen::d
(byte) init_dist_screen::d#0
(word) init_dist_screen::ds
(word) init_dist_screen::ds#0
(byte*) init_dist_screen::screen
(byte*) init_dist_screen::screen#0
(byte*) init_dist_screen::screen#1
(byte*) init_dist_screen::screen#2
(byte*) init_dist_screen::screen_bottomline
(byte*) init_dist_screen::screen_bottomline#0
(byte*) init_dist_screen::screen_bottomline#1
(byte*) init_dist_screen::screen_bottomline#10
(byte*) init_dist_screen::screen_bottomline#11
(byte*) init_dist_screen::screen_bottomline#12
(byte*) init_dist_screen::screen_bottomline#13
(byte*) init_dist_screen::screen_bottomline#14
(byte*) init_dist_screen::screen_bottomline#2
(byte*) init_dist_screen::screen_bottomline#3
(byte*) init_dist_screen::screen_bottomline#4
(byte*) init_dist_screen::screen_bottomline#5
(byte*) init_dist_screen::screen_bottomline#6
(byte*) init_dist_screen::screen_bottomline#7
(byte*) init_dist_screen::screen_bottomline#8
(byte*) init_dist_screen::screen_bottomline#9
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#0
(byte*) init_dist_screen::screen_topline#1
(byte*) init_dist_screen::screen_topline#10
(byte*) init_dist_screen::screen_topline#11
(byte*) init_dist_screen::screen_topline#12
(byte*) init_dist_screen::screen_topline#13
(byte*) init_dist_screen::screen_topline#14
(byte*) init_dist_screen::screen_topline#2
(byte*) init_dist_screen::screen_topline#3
(byte*) init_dist_screen::screen_topline#4
(byte*) init_dist_screen::screen_topline#5
(byte*) init_dist_screen::screen_topline#6
(byte*) init_dist_screen::screen_topline#7
(byte*) init_dist_screen::screen_topline#8
(byte*) init_dist_screen::screen_topline#9
(byte) init_dist_screen::x
(byte) init_dist_screen::x#0
(byte) init_dist_screen::x#1
(byte) init_dist_screen::x#2
(byte) init_dist_screen::x#3
(byte) init_dist_screen::x#4
(byte) init_dist_screen::x#5
(byte) init_dist_screen::x#6
(byte) init_dist_screen::x#7
(byte) init_dist_screen::x#8
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0
(byte) init_dist_screen::x2#1
(byte) init_dist_screen::x2#2
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#0
(byte) init_dist_screen::xb#1
(byte) init_dist_screen::xb#2
(byte) init_dist_screen::xb#3
(byte) init_dist_screen::xb#4
(byte) init_dist_screen::xb#5
(byte) init_dist_screen::xb#6
(byte) init_dist_screen::xb#7
(byte) init_dist_screen::xb#8
(byte) init_dist_screen::xd
(byte) init_dist_screen::xd#0
(word) init_dist_screen::xds
(word) init_dist_screen::xds#0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#0
(byte) init_dist_screen::y#1
(byte) init_dist_screen::y#10
(byte) init_dist_screen::y#11
(byte) init_dist_screen::y#12
(byte) init_dist_screen::y#13
(byte) init_dist_screen::y#14
(byte) init_dist_screen::y#2
(byte) init_dist_screen::y#3
(byte) init_dist_screen::y#4
(byte) init_dist_screen::y#5
(byte) init_dist_screen::y#6
(byte) init_dist_screen::y#7
(byte) init_dist_screen::y#8
(byte) init_dist_screen::y#9
(byte) init_dist_screen::y2
(byte) init_dist_screen::y2#0
(byte) init_dist_screen::y2#1
(byte) init_dist_screen::y2#2
(byte) init_dist_screen::yd
(byte) init_dist_screen::yd#0
(word) init_dist_screen::yds
(word) init_dist_screen::yds#0
(word) init_dist_screen::yds#1
(word) init_dist_screen::yds#2
(word) init_dist_screen::yds#3
(word) init_dist_screen::yds#4
(word) init_dist_screen::yds#5
(word) init_dist_screen::yds#6
(word) init_dist_screen::yds#7
(void()) init_squares()
(byte~) init_squares::$0
(void*~) init_squares::$1
2020-02-15 08:30:27 +00:00
(bool~) init_squares::$2
(number~) init_squares::$3
(number~) init_squares::$4
(label) init_squares::@1
2020-02-15 08:30:27 +00:00
(label) init_squares::@2
(label) init_squares::@3
(label) init_squares::@return
(byte) init_squares::i
(byte) init_squares::i#0
(byte) init_squares::i#1
(byte) init_squares::i#2
2020-02-15 08:30:27 +00:00
(byte) init_squares::i#3
(word) init_squares::sqr
(word) init_squares::sqr#0
(word) init_squares::sqr#1
(word) init_squares::sqr#2
2020-02-15 08:30:27 +00:00
(word) init_squares::sqr#3
(word*) init_squares::squares
(word*) init_squares::squares#0
(word*) init_squares::squares#1
(word*) init_squares::squares#2
2020-02-15 08:30:27 +00:00
(word*) init_squares::squares#3
(void()) main()
(bool~) main::$2
(bool~) main::$3
(bool~) main::$4
(bool~) main::$5
(bool~) main::$6
(bool~) main::$7
(bool~) main::$8
(label) main::@1
(label) main::@10
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(byte*) main::angle
(byte*) main::angle#0
(byte*) main::angle#1
(byte*) main::angle#2
(byte*) main::angle#3
(byte*) main::angle#4
(byte*) main::angle#5
(byte*) main::dist
(byte*) main::dist#0
(byte*) main::dist#1
(byte*) main::dist#2
(byte*) main::dist#3
(byte*) main::dist#4
(byte*) main::dist#5
(word) main::dist_angle
(word) main::dist_angle#0
(word) main::dist_angle#1
(byte*) main::fill
(byte*) main::fill#0
(byte*) main::fill#1
(byte*) main::fill#2
(byte*) main::fill#3
(byte*) main::fill#4
(byte*) main::fill#5
(word) main::min_dist_angle
(word) main::min_dist_angle#0
(word) main::min_dist_angle#1
(word) main::min_dist_angle#2
(word) main::min_dist_angle#3
(word) main::min_dist_angle#4
(word) main::min_dist_angle#5
(byte*) main::min_fill
(byte*) main::min_fill#0
(byte*) main::min_fill#1
(byte*) main::min_fill#2
(byte*) main::min_fill#3
(byte*) main::min_fill#4
(byte*) main::min_fill#5
(byte*) main::min_fill#6
(void*()) malloc((word) malloc::size)
(byte*~) malloc::$0
(label) malloc::@return
(byte*) malloc::mem
(byte*) malloc::mem#0
(void*) malloc::return
(void*) malloc::return#0
(void*) malloc::return#1
(void*) malloc::return#2
(void*) malloc::return#3
(void*) malloc::return#4
(void*) malloc::return#5
(void*) malloc::return#6
(void*) malloc::return#7
(void*) malloc::return#8
(word) malloc::size
(word) malloc::size#0
(word) malloc::size#1
(word) malloc::size#2
(word) malloc::size#3
(word()) sqr((byte) sqr::val)
(byte~) sqr::$0
(label) sqr::@return
(word) sqr::return
(word) sqr::return#0
(word) sqr::return#1
(word) sqr::return#2
(word) sqr::return#3
(word) sqr::return#4
(word) sqr::return#5
(word) sqr::return#6
(byte) sqr::val
(byte) sqr::val#0
(byte) sqr::val#1
(byte) sqr::val#2
(byte()) sqrt((word) sqrt::val)
(word*~) sqrt::$0
(word~) sqrt::$1
(word~) sqrt::$2
(label) sqrt::@1
(label) sqrt::@return
(word*) sqrt::found
(word*) sqrt::found#0
(byte) sqrt::return
(byte) sqrt::return#0
(byte) sqrt::return#1
(byte) sqrt::return#2
(byte) sqrt::return#3
(byte) sqrt::return#4
(byte) sqrt::sq
(byte) sqrt::sq#0
(word) sqrt::val
(word) sqrt::val#0
(word) sqrt::val#1
Fixing inline constructor with main::$9 ← (byte)*(main::dist#3) w= (byte)*(main::angle#3)
Fixing inline constructor with init_angle_screen::$13 ← (byte)init_angle_screen::$4 w= (byte)0
Fixing inline constructor with init_angle_screen::$14 ← (byte)init_angle_screen::$5 w= (byte)0
Successful SSA optimization Pass2FixInlineConstructors
Adding number conversion cast (unumber) 0 in (bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0
Adding number conversion cast (unumber) 1 in (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1
Adding number conversion cast (snumber) 0 in (bool~) bsearch16u::$9 ← (signed word) bsearch16u::result#0 == (number) 0
Adding number conversion cast (snumber) 0 in (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#1 > (number) 0
Adding number conversion cast (unumber) 1 in (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (number) 1
Adding number conversion cast (unumber) 1 in (number~) bsearch16u::$15 ← (number) 1 * (const byte) SIZEOF_WORD
Adding number conversion cast (unumber) bsearch16u::$15 in (number~) bsearch16u::$15 ← (unumber)(number) 1 * (const byte) SIZEOF_WORD
Adding number conversion cast (unumber) 1 in (number~) bsearch16u::$16 ← (number) 1 * (const byte) SIZEOF_WORD
Adding number conversion cast (unumber) bsearch16u::$16 in (number~) bsearch16u::$16 ← (unumber)(number) 1 * (const byte) SIZEOF_WORD
2020-02-15 08:30:27 +00:00
Adding number conversion cast (unumber) 2 in (number~) init_squares::$3 ← (byte) init_squares::i#3 * (number) 2
Adding number conversion cast (unumber) init_squares::$3 in (number~) init_squares::$3 ← (byte) init_squares::i#3 * (unumber)(number) 2
Adding number conversion cast (unumber) 1 in (number~) init_squares::$4 ← (unumber~) init_squares::$3 + (number) 1
Adding number conversion cast (unumber) init_squares::$4 in (number~) init_squares::$4 ← (unumber~) init_squares::$3 + (unumber)(number) 1
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0
Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
Adding number conversion cast (unumber) 2 in (bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
Adding number conversion cast (unumber) 2 in (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
Adding number conversion cast (unumber) 0 in (bool~) atan2_16::$24 ← (number) 0 != (byte) atan2_16::shift#4
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#5 >= (number) 0
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
Adding number conversion cast (unumber) 1 in (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0
Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9
Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9
Adding number conversion cast (unumber) $3e8 in (bool~) main::$6 ← (byte*) main::fill#1 < (const nomodify byte*) SCREEN_FILL+(number) $3e8
Adding number conversion cast (unumber) $ffff in (bool~) main::$7 ← (word) main::min_dist_angle#3 == (number) $ffff
Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2
Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2
Adding number conversion cast (unumber) $27 in (number~) init_angle_screen::$4 ← (number) $27 - (unumber~) init_angle_screen::$3
Adding number conversion cast (unumber) init_angle_screen::$4 in (number~) init_angle_screen::$4 ← (unumber)(number) $27 - (unumber~) init_angle_screen::$3
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$5 ← (byte) init_angle_screen::y#2 * (number) 2
Adding number conversion cast (unumber) init_angle_screen::$5 in (number~) init_angle_screen::$5 ← (byte) init_angle_screen::y#2 * (unumber)(number) 2
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (number) $80
Adding number conversion cast (unumber) init_angle_screen::$7 in (number~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (unumber)(number) $80
Adding number conversion cast (unumber) init_angle_screen::$8 in (number~) init_angle_screen::$8 ← > (unumber~) init_angle_screen::$7
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$10 ← (number) $80 + (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$10 in (number~) init_angle_screen::$10 ← (unumber)(number) $80 + (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$11 ← (number) $80 - (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$11 in (number~) init_angle_screen::$11 ← (unumber)(number) $80 - (byte) init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28
Adding number conversion cast (unumber) $28 in (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28
2020-06-27 19:18:00 +00:00
Adding number conversion cast (unumber) $30 in (byte) NUM_SQUARES#2 ← (number) $30
Adding number conversion cast (unumber) $28*$18 in (byte*~) init_dist_screen::$1 ← (byte*) init_dist_screen::screen#1 + (number) $28*(number) $18
Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (number) 2
Adding number conversion cast (unumber) init_dist_screen::$2 in (number~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (unumber)(number) 2
Adding number conversion cast (unumber) $18 in (bool~) init_dist_screen::$3 ← (byte) init_dist_screen::y2#0 >= (number) $18
Adding number conversion cast (unumber) $18 in (number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (number) $18
Adding number conversion cast (unumber) init_dist_screen::$6 in (number~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (unumber)(number) $18
Adding number conversion cast (unumber) init_dist_screen::$7 in (number~) init_dist_screen::$7 ← (unumber~) init_dist_screen::$6
Adding number conversion cast (unumber) $18 in (number~) init_dist_screen::$4 ← (number) $18 - (byte) init_dist_screen::y2#2
Adding number conversion cast (unumber) init_dist_screen::$4 in (number~) init_dist_screen::$4 ← (unumber)(number) $18 - (byte) init_dist_screen::y2#2
Adding number conversion cast (unumber) init_dist_screen::$5 in (number~) init_dist_screen::$5 ← (unumber~) init_dist_screen::$4
2020-02-15 08:30:27 +00:00
Adding number conversion cast (unumber) init_dist_screen::$8 in (byte*) heap_head#44 ← phi( init_dist_screen::@2/(byte*) heap_head#46 init_dist_screen::@3/(byte*) heap_head#47 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#38 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#40 init_dist_screen::@3/(byte) NUM_SQUARES#41 )
(byte) init_dist_screen::y#7 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#9 init_dist_screen::@3/(byte) init_dist_screen::y#10 )
(byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 )
(byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#21 ← phi( init_dist_screen::@2/(word*) SQUARES#33 init_dist_screen::@3/(word*) SQUARES#34 )
(number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(unumber~) init_dist_screen::$7 init_dist_screen::@3/(unumber~) init_dist_screen::$5 )
Adding number conversion cast (unumber) $13 in (bool~) init_dist_screen::$10 ← (byte) init_dist_screen::x#2 <= (number) $13
Adding number conversion cast (unumber) 2 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (number) 2
Adding number conversion cast (unumber) init_dist_screen::$11 in (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (unumber)(number) 2
Adding number conversion cast (unumber) $27 in (bool~) init_dist_screen::$12 ← (byte) init_dist_screen::x2#0 >= (number) $27
Adding number conversion cast (unumber) $28 in (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#2 + (number) $28
Adding number conversion cast (unumber) $28 in (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#2 - (number) $28
Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#1 - (number) $27
Adding number conversion cast (unumber) init_dist_screen::$15 in (number~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#1 - (unumber)(number) $27
Adding number conversion cast (unumber) init_dist_screen::$16 in (number~) init_dist_screen::$16 ← (unumber~) init_dist_screen::$15
Adding number conversion cast (unumber) $27 in (number~) init_dist_screen::$13 ← (number) $27 - (byte) init_dist_screen::x2#2
Adding number conversion cast (unumber) init_dist_screen::$13 in (number~) init_dist_screen::$13 ← (unumber)(number) $27 - (byte) init_dist_screen::x2#2
Adding number conversion cast (unumber) init_dist_screen::$14 in (number~) init_dist_screen::$14 ← (unumber~) init_dist_screen::$13
2020-02-15 08:30:27 +00:00
Adding number conversion cast (unumber) init_dist_screen::$17 in (byte*) heap_head#48 ← phi( init_dist_screen::@8/(byte*) heap_head#50 init_dist_screen::@9/(byte*) heap_head#51 )
(byte) init_dist_screen::y#11 ← phi( init_dist_screen::@8/(byte) init_dist_screen::y#12 init_dist_screen::@9/(byte) init_dist_screen::y#13 )
(byte) init_dist_screen::xb#4 ← phi( init_dist_screen::@8/(byte) init_dist_screen::xb#5 init_dist_screen::@9/(byte) init_dist_screen::xb#6 )
(byte*) init_dist_screen::screen_bottomline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_bottomline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#10 )
(byte) init_dist_screen::x#6 ← phi( init_dist_screen::@8/(byte) init_dist_screen::x#7 init_dist_screen::@9/(byte) init_dist_screen::x#8 )
(byte*) init_dist_screen::screen_topline#7 ← phi( init_dist_screen::@8/(byte*) init_dist_screen::screen_topline#9 init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#10 )
2020-06-27 19:18:00 +00:00
(byte) NUM_SQUARES#27 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#34 init_dist_screen::@9/(byte) NUM_SQUARES#35 )
(word) init_dist_screen::yds#2 ← phi( init_dist_screen::@8/(word) init_dist_screen::yds#3 init_dist_screen::@9/(word) init_dist_screen::yds#4 )
2020-06-27 19:18:00 +00:00
(word*) SQUARES#20 ← phi( init_dist_screen::@8/(word*) SQUARES#36 init_dist_screen::@9/(word*) SQUARES#37 )
(number~) init_dist_screen::$17 ← phi( init_dist_screen::@8/(unumber~) init_dist_screen::$16 init_dist_screen::@9/(unumber~) init_dist_screen::$14 )
2020-06-27 19:18:00 +00:00
Adding number conversion cast (unumber) $3e8 in (word) malloc::size#1 ← (number) $3e8
Adding number conversion cast (unumber) $3e8 in (word) malloc::size#2 ← (number) $3e8
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0
2020-06-27 19:18:00 +00:00
Inlining cast (word*) SQUARES#0 ← (word*)(void*~) init_squares::$1
Inlining cast (byte) NUM_SQUARES#2 ← (unumber)(number) $30
Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8
Inlining cast (byte*) SCREEN_DIST#0 ← (byte*)(void*~) __start::__init1_$0
Inlining cast (word) malloc::size#2 ← (unumber)(number) $3e8
Inlining cast (byte*) SCREEN_ANGLE#0 ← (byte*)(void*~) __start::__init1_$1
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (byte*) 40960
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast $8000
Simplifying constant integer cast $3e8
Simplifying constant integer cast *((byte*) main::dist#3)
Simplifying constant integer cast *((byte*) main::angle#3)
Simplifying constant integer cast $ffff
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $30
Simplifying constant integer cast 2
Simplifying constant integer cast $18
Simplifying constant integer cast $18
Simplifying constant integer cast $18
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $27
Simplifying constant integer cast $27
2020-06-27 19:18:00 +00:00
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 2
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 2
Finalized signed number type (signed byte) 2
Finalized signed number type (signed byte) 2
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 0
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 1
Finalized signed number type (signed byte) 1
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized unsigned number type (word) $8000
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $ffff
Finalized unsigned number type (byte) $13
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) $13
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $27
2020-06-27 19:18:00 +00:00
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3e8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) bsearch16u::$15 ← (byte) 1 * (const byte) SIZEOF_WORD
Inferred type updated to byte in (unumber~) bsearch16u::$16 ← (byte) 1 * (const byte) SIZEOF_WORD
2020-02-15 08:30:27 +00:00
Inferred type updated to byte in (unumber~) init_squares::$3 ← (byte) init_squares::i#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9
Inferred type updated to byte in (unumber~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
Inferred type updated to byte in (unumber~) init_angle_screen::$5 ← (byte) init_angle_screen::y#2 * (byte) 2
Inferred type updated to word in (unumber~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (byte) $80
Inferred type updated to byte in (unumber~) init_angle_screen::$8 ← > (word~) init_angle_screen::$7
Inferred type updated to byte in (unumber~) init_angle_screen::$10 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
Inferred type updated to byte in (unumber~) init_angle_screen::$11 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
Inferred type updated to byte in (unumber~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (byte) 2
Inferred type updated to byte in (unumber~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (byte) $18
Inferred type updated to byte in (unumber~) init_dist_screen::$7 ← (byte~) init_dist_screen::$6
Inferred type updated to byte in (unumber~) init_dist_screen::$4 ← (byte) $18 - (byte) init_dist_screen::y2#2
Inferred type updated to byte in (unumber~) init_dist_screen::$5 ← (byte~) init_dist_screen::$4
Inferred type updated to byte for (unumber~) init_dist_screen::$8
Inferred type updated to byte in (unumber~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#1 - (byte) $27
Inferred type updated to byte in (unumber~) init_dist_screen::$16 ← (byte~) init_dist_screen::$15
Inferred type updated to byte in (unumber~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#2
Inferred type updated to byte in (unumber~) init_dist_screen::$14 ← (byte~) init_dist_screen::$13
Inferred type updated to byte for (unumber~) init_dist_screen::$17
2020-06-27 19:18:00 +00:00
Inversing boolean not [23] (bool~) bsearch16u::$10 ← (signed word) bsearch16u::result#0 != (signed byte) 0 from [22] (bool~) bsearch16u::$9 ← (signed word) bsearch16u::result#0 == (signed byte) 0
Inversing boolean not [30] (bool~) bsearch16u::$12 ← (signed word) bsearch16u::result#1 <= (signed byte) 0 from [29] (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#1 > (signed byte) 0
Inversing boolean not [123] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [122] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0
Inversing boolean not [132] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [131] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0
Inversing boolean not [143] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [142] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4
Inversing boolean not [167] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [166] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0
Inversing boolean not [200] (bool~) main::$3 ← *((byte*) main::fill#2) == (const nomodify byte) FILL_CHAR from [199] (bool~) main::$2 ← *((byte*) main::fill#2) != (const nomodify byte) FILL_CHAR
Inversing boolean not [212] (bool~) main::$5 ← (word) main::dist_angle#0 >= (word) main::min_dist_angle#2 from [211] (bool~) main::$4 ← (word) main::dist_angle#0 < (word) main::min_dist_angle#2
Inversing boolean not [219] (bool~) main::$8 ← (word) main::min_dist_angle#3 != (word) $ffff from [218] (bool~) main::$7 ← (word) main::min_dist_angle#3 == (word) $ffff
Successful SSA optimization Pass2UnaryNotSimplification
Alias malloc::mem#0 = malloc::$0
Alias malloc::return#0 = malloc::return#5 malloc::return#1
2020-06-27 19:18:00 +00:00
Alias heap_head#0 = heap_head#14 heap_head#1
Alias bsearch16u::num#3 = bsearch16u::num#4 bsearch16u::num#8 bsearch16u::num#6
Alias bsearch16u::items#2 = bsearch16u::items#6 bsearch16u::items#3 bsearch16u::items#9 bsearch16u::items#4 bsearch16u::$3 bsearch16u::items#5
Alias bsearch16u::key#1 = bsearch16u::key#3 bsearch16u::key#2 bsearch16u::key#7 bsearch16u::key#6
Alias bsearch16u::pivot#0 = bsearch16u::$7 bsearch16u::pivot#3 bsearch16u::pivot#1 bsearch16u::return#0 bsearch16u::pivot#2
Alias bsearch16u::result#0 = bsearch16u::$8 bsearch16u::result#1
Alias bsearch16u::return#1 = bsearch16u::return#4
Alias bsearch16u::items#0 = bsearch16u::$13
Alias bsearch16u::$2 = bsearch16u::$1
Alias bsearch16u::return#2 = bsearch16u::$4
Alias malloc::size#0 = init_squares::$0
Alias malloc::return#2 = malloc::return#6
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#16 = NUM_SQUARES#7
Alias heap_head#15 = heap_head#2
Alias init_squares::sqr#2 = init_squares::sqr#3
Alias init_squares::squares#2 = init_squares::squares#3
Alias init_squares::i#2 = init_squares::i#3
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#15 = NUM_SQUARES#8
Alias heap_head#16 = heap_head#33 heap_head#26 heap_head#3
Alias SQUARES#1 = SQUARES#29 SQUARES#19 SQUARES#9
Alias sqr::return#0 = sqr::return#4 sqr::return#1
Alias bsearch16u::return#3 = bsearch16u::return#5
2020-06-27 19:18:00 +00:00
Alias SQUARES#11 = SQUARES#12
Alias sqrt::found#0 = sqrt::$0
Alias sqrt::return#0 = sqrt::sq#0 sqrt::return#3 sqrt::return#1
Alias atan2_16::y#1 = atan2_16::y#2 atan2_16::$3 atan2_16::y#3
Alias atan2_16::x#5 = atan2_16::x#9 atan2_16::x#6
Alias atan2_16::$2 = atan2_16::$1
Alias atan2_16::yi#0 = atan2_16::$4 atan2_16::yi#12 atan2_16::yi#13
Alias atan2_16::x#1 = atan2_16::x#2 atan2_16::$8 atan2_16::x#3
Alias atan2_16::y#12 = atan2_16::y#15 atan2_16::y#13
Alias atan2_16::$7 = atan2_16::$6
Alias atan2_16::xi#0 = atan2_16::$9
Alias atan2_16::xi#3 = atan2_16::xi#6 atan2_16::xd#0
Alias atan2_16::yi#3 = atan2_16::yi#4 atan2_16::yd#0
Alias atan2_16::i#2 = atan2_16::i#6 atan2_16::shift#0
Alias atan2_16::angle#12 = atan2_16::angle#19
Alias atan2_16::x#17 = atan2_16::x#7
Alias atan2_16::y#19 = atan2_16::y#7
Alias atan2_16::xd#3 = atan2_16::xd#7 atan2_16::xd#8 atan2_16::xd#4
Alias atan2_16::yd#3 = atan2_16::yd#7 atan2_16::yd#8 atan2_16::yd#4
Alias atan2_16::shift#2 = atan2_16::shift#3 atan2_16::shift#4
Alias atan2_16::yi#10 = atan2_16::yi#15 atan2_16::yi#14 atan2_16::yi#11
Alias atan2_16::xi#10 = atan2_16::xi#12 atan2_16::xi#11 atan2_16::xi#9
Alias atan2_16::i#10 = atan2_16::i#11 atan2_16::i#8 atan2_16::i#9
Alias atan2_16::angle#16 = atan2_16::angle#20 atan2_16::angle#18 atan2_16::angle#17
Alias atan2_16::x#14 = atan2_16::x#18 atan2_16::x#16 atan2_16::x#15
Alias atan2_16::y#16 = atan2_16::y#20 atan2_16::y#18 atan2_16::y#17
Alias atan2_16::xi#4 = atan2_16::xi#7 atan2_16::xi#5
Alias atan2_16::yd#5 = atan2_16::yd#9 atan2_16::yd#6
Alias atan2_16::yi#5 = atan2_16::yi#6 atan2_16::yi#7
Alias atan2_16::xd#5 = atan2_16::xd#9 atan2_16::xd#6
Alias atan2_16::i#3 = atan2_16::i#7 atan2_16::i#4
Alias atan2_16::angle#14 = atan2_16::angle#7 atan2_16::angle#8
Alias atan2_16::x#11 = atan2_16::x#13 atan2_16::x#12
Alias atan2_16::y#10 = atan2_16::y#14 atan2_16::y#11
Alias atan2_16::angle#1 = atan2_16::angle#9
Alias atan2_16::y#5 = atan2_16::y#6
Alias atan2_16::angle#4 = atan2_16::$12
Alias atan2_16::return#0 = atan2_16::angle#10 atan2_16::return#3 atan2_16::return#1
Alias atan2_16::angle#11 = atan2_16::angle#15
Alias atan2_16::angle#5 = atan2_16::$15
2020-06-27 19:18:00 +00:00
Alias SCREEN_ANGLE#2 = SCREEN_ANGLE#5 SCREEN_ANGLE#9
Alias SCREEN_DIST#11 = SCREEN_DIST#2 SCREEN_DIST#8
Alias NUM_SQUARES#0 = NUM_SQUARES#10 NUM_SQUARES#23
Alias heap_head#17 = heap_head#4 heap_head#34
Alias SQUARES#13 = SQUARES#2 SQUARES#30
Alias SCREEN_DIST#3 = SCREEN_DIST#6
Alias SCREEN_ANGLE#3 = SCREEN_ANGLE#6
Alias NUM_SQUARES#19 = NUM_SQUARES#37
Alias heap_head#28 = heap_head#43
Alias SQUARES#24 = SQUARES#47
Alias main::dist#3 = main::dist#4 main::dist#5
Alias main::angle#3 = main::angle#4 main::angle#5
Alias main::min_dist_angle#2 = main::min_dist_angle#4
Alias main::fill#2 = main::fill#5 main::fill#4 main::min_fill#1
Alias main::min_fill#5 = main::min_fill#6
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#29 = NUM_SQUARES#30 NUM_SQUARES#31
Alias heap_head#38 = heap_head#39 heap_head#40
2020-06-27 19:18:00 +00:00
Alias SQUARES#39 = SQUARES#40 SQUARES#41
Alias SCREEN_DIST#14 = SCREEN_DIST#15 SCREEN_DIST#16
Alias SCREEN_ANGLE#13 = SCREEN_ANGLE#14 SCREEN_ANGLE#15
Alias main::dist_angle#0 = main::$9 main::dist_angle#1 main::min_dist_angle#1
Alias main::min_dist_angle#3 = main::min_dist_angle#5
Alias main::min_fill#2 = main::min_fill#3 main::min_fill#4
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#20 = NUM_SQUARES#25 NUM_SQUARES#24
Alias heap_head#29 = heap_head#36 heap_head#35
Alias SQUARES#25 = SQUARES#32 SQUARES#31
Alias SCREEN_DIST#12 = SCREEN_DIST#13 SCREEN_DIST#9
Alias SCREEN_ANGLE#10 = SCREEN_ANGLE#11 SCREEN_ANGLE#12
Alias NUM_SQUARES#1 = NUM_SQUARES#11
Alias heap_head#18 = heap_head#5
Alias SQUARES#14 = SQUARES#3
Alias init_angle_screen::screen_topline#0 = init_angle_screen::$0
Alias init_angle_screen::screen_bottomline#0 = init_angle_screen::$1
Alias init_angle_screen::x#2 = init_angle_screen::x#3 init_angle_screen::x#4
Alias init_angle_screen::y#2 = init_angle_screen::y#4 init_angle_screen::y#6 init_angle_screen::y#3
Alias init_angle_screen::screen_bottomline#2 = init_angle_screen::screen_bottomline#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#3
Alias init_angle_screen::xb#2 = init_angle_screen::xb#3 init_angle_screen::xb#4
Alias init_angle_screen::screen_topline#2 = init_angle_screen::screen_topline#4 init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#3
Alias atan2_16::return#2 = atan2_16::return#4
Alias init_angle_screen::angle_w#0 = init_angle_screen::$6
Alias init_angle_screen::ang_w#0 = init_angle_screen::$8
Alias init_dist_screen::screen#1 = init_dist_screen::screen#2 init_dist_screen::screen_topline#0
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#2 = NUM_SQUARES#43
Alias heap_head#19 = heap_head#6
Alias SQUARES#15 = SQUARES#4
Alias init_dist_screen::screen_bottomline#0 = init_dist_screen::$1
Alias init_dist_screen::y2#0 = init_dist_screen::$2 init_dist_screen::y2#1 init_dist_screen::y2#2
2020-06-27 19:18:00 +00:00
Alias SQUARES#33 = SQUARES#42 SQUARES#34
Alias init_dist_screen::screen_topline#11 = init_dist_screen::screen_topline#14 init_dist_screen::screen_topline#12
Alias init_dist_screen::screen_bottomline#11 = init_dist_screen::screen_bottomline#14 init_dist_screen::screen_bottomline#12
Alias init_dist_screen::y#10 = init_dist_screen::y#9 init_dist_screen::y#2
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#40 = NUM_SQUARES#42 NUM_SQUARES#41
Alias heap_head#46 = heap_head#49 heap_head#47
Alias init_dist_screen::$7 = init_dist_screen::$6
Alias init_dist_screen::$5 = init_dist_screen::$4
Alias init_dist_screen::yd#0 = init_dist_screen::$8
Alias sqr::return#2 = sqr::return#5
Alias init_dist_screen::screen_topline#6 = init_dist_screen::screen_topline#8
Alias init_dist_screen::screen_bottomline#6 = init_dist_screen::screen_bottomline#8
Alias init_dist_screen::y#5 = init_dist_screen::y#7
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#32 = NUM_SQUARES#38
Alias heap_head#41 = heap_head#44
2020-06-27 19:18:00 +00:00
Alias SQUARES#21 = SQUARES#43
Alias init_dist_screen::yds#0 = init_dist_screen::$9
Alias init_dist_screen::x#2 = init_dist_screen::x#3 init_dist_screen::x#7 init_dist_screen::x#8
2020-06-27 19:18:00 +00:00
Alias SQUARES#16 = SQUARES#45 SQUARES#35 SQUARES#27 SQUARES#36 SQUARES#37 SQUARES#5
Alias init_dist_screen::yds#3 = init_dist_screen::yds#5 init_dist_screen::yds#6 init_dist_screen::yds#4
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#12 = NUM_SQUARES#39 NUM_SQUARES#26 NUM_SQUARES#21 NUM_SQUARES#34 NUM_SQUARES#35 NUM_SQUARES#3
Alias init_dist_screen::screen_topline#10 = init_dist_screen::screen_topline#13 init_dist_screen::screen_topline#4 init_dist_screen::screen_topline#2 init_dist_screen::screen_topline#9
Alias init_dist_screen::screen_bottomline#10 = init_dist_screen::screen_bottomline#13 init_dist_screen::screen_bottomline#4 init_dist_screen::screen_bottomline#2 init_dist_screen::screen_bottomline#9
Alias init_dist_screen::xb#5 = init_dist_screen::xb#7 init_dist_screen::xb#8 init_dist_screen::xb#6
Alias init_dist_screen::y#12 = init_dist_screen::y#14 init_dist_screen::y#4 init_dist_screen::y#3 init_dist_screen::y#13
2020-06-27 19:18:00 +00:00
Alias heap_head#20 = heap_head#52 heap_head#37 heap_head#31 heap_head#50 heap_head#51 heap_head#7
Alias init_dist_screen::x2#0 = init_dist_screen::$11 init_dist_screen::x2#1 init_dist_screen::x2#2
Alias init_dist_screen::$16 = init_dist_screen::$15
Alias init_dist_screen::$14 = init_dist_screen::$13
Alias init_dist_screen::xd#0 = init_dist_screen::$17
Alias sqr::return#3 = sqr::return#6
Alias init_dist_screen::yds#1 = init_dist_screen::yds#2 init_dist_screen::yds#7
2020-06-27 19:18:00 +00:00
Alias SQUARES#20 = SQUARES#22 SQUARES#44
Alias NUM_SQUARES#17 = NUM_SQUARES#27 NUM_SQUARES#33
Alias init_dist_screen::screen_topline#3 = init_dist_screen::screen_topline#5 init_dist_screen::screen_topline#7
Alias init_dist_screen::x#4 = init_dist_screen::x#5 init_dist_screen::x#6
Alias init_dist_screen::screen_bottomline#3 = init_dist_screen::screen_bottomline#5 init_dist_screen::screen_bottomline#7
Alias init_dist_screen::xb#2 = init_dist_screen::xb#3 init_dist_screen::xb#4
Alias init_dist_screen::y#11 = init_dist_screen::y#8 init_dist_screen::y#6
Alias heap_head#42 = heap_head#45 heap_head#48
Alias init_dist_screen::xds#0 = init_dist_screen::$18
Alias init_dist_screen::ds#0 = init_dist_screen::$19
Alias sqrt::return#2 = sqrt::return#4
Alias init_dist_screen::d#0 = init_dist_screen::$20
2020-06-27 19:18:00 +00:00
Alias malloc::return#3 = malloc::return#7
Alias NUM_SQUARES#22 = NUM_SQUARES#36 NUM_SQUARES#4 NUM_SQUARES#28
Alias SQUARES#28 = SQUARES#46 SQUARES#6 SQUARES#38
Alias heap_head#21 = heap_head#9
Alias malloc::return#4 = malloc::return#8
Alias SCREEN_DIST#0 = SCREEN_DIST#10 SCREEN_DIST#5 SCREEN_DIST#7 SCREEN_DIST#4 SCREEN_DIST#1
Alias heap_head#10 = heap_head#22 heap_head#32
Alias SCREEN_ANGLE#0 = SCREEN_ANGLE#8 SCREEN_ANGLE#7 SCREEN_ANGLE#4 SCREEN_ANGLE#1
Alias NUM_SQUARES#13 = NUM_SQUARES#5 NUM_SQUARES#14 NUM_SQUARES#6
Alias heap_head#11 = heap_head#23 heap_head#24 heap_head#12
Alias SQUARES#17 = SQUARES#7 SQUARES#18 SQUARES#8
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) main::fill#2 = main::fill#3
Alias bsearch16u::key#1 = bsearch16u::key#5
Alias atan2_16::x#1 = atan2_16::x#5 atan2_16::x#10
Alias atan2_16::y#1 = atan2_16::y#12 atan2_16::y#9
Alias atan2_16::yi#0 = atan2_16::yi#9
Alias atan2_16::yi#10 = atan2_16::yi#5
Alias atan2_16::xi#10 = atan2_16::xi#4
Alias atan2_16::i#10 = atan2_16::i#3 atan2_16::i#5
Alias atan2_16::angle#14 = atan2_16::angle#16
Alias atan2_16::x#11 = atan2_16::x#14 atan2_16::x#8
Alias atan2_16::y#10 = atan2_16::y#16 atan2_16::y#8
Alias atan2_16::y#4 = atan2_16::y#5
Alias main::dist#2 = main::dist#3
Alias main::angle#2 = main::angle#3
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#20 = NUM_SQUARES#29
Alias heap_head#29 = heap_head#38
Alias SQUARES#25 = SQUARES#39
Alias SCREEN_DIST#12 = SCREEN_DIST#14
Alias SCREEN_ANGLE#10 = SCREEN_ANGLE#13
Alias SQUARES#21 = SQUARES#33
Alias init_dist_screen::screen_topline#11 = init_dist_screen::screen_topline#6
Alias init_dist_screen::screen_bottomline#11 = init_dist_screen::screen_bottomline#6
Alias init_dist_screen::y#10 = init_dist_screen::y#5
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#32 = NUM_SQUARES#40
Alias heap_head#41 = heap_head#46
2020-06-27 19:18:00 +00:00
Alias SQUARES#16 = SQUARES#20
Alias init_dist_screen::yds#1 = init_dist_screen::yds#3
2020-06-27 19:18:00 +00:00
Alias NUM_SQUARES#12 = NUM_SQUARES#17
Alias init_dist_screen::screen_topline#10 = init_dist_screen::screen_topline#3
Alias init_dist_screen::x#2 = init_dist_screen::x#4
Alias init_dist_screen::screen_bottomline#10 = init_dist_screen::screen_bottomline#3
Alias init_dist_screen::xb#2 = init_dist_screen::xb#5
Alias init_dist_screen::y#11 = init_dist_screen::y#12
2020-06-27 19:18:00 +00:00
Alias heap_head#20 = heap_head#42
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) main::fill#2 = main::fill#3
Identical Phi Values (byte) bsearch16u::num#7 (byte) bsearch16u::num#2
Identical Phi Values (word*) bsearch16u::items#7 (word*) bsearch16u::items#1
Identical Phi Values (word) bsearch16u::key#4 (word) bsearch16u::key#0
Identical Phi Values (word) bsearch16u::key#1 (word) bsearch16u::key#4
2020-06-27 19:18:00 +00:00
Identical Phi Values (byte) NUM_SQUARES#16 (byte) NUM_SQUARES#2
Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#30
Identical Phi Values (byte*) heap_head#15 (byte*) heap_head#0
Identical Phi Values (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#16
Identical Phi Values (byte*) heap_head#16 (byte*) heap_head#15
Identical Phi Values (word*) SQUARES#1 (word*) SQUARES#0
Identical Phi Values (word) sqrt::val#1 (word) sqrt::val#0
2020-06-27 19:18:00 +00:00
Identical Phi Values (word*) SQUARES#11 (word*) SQUARES#16
Identical Phi Values (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#12
Identical Phi Values (signed word) atan2_16::y#1 (signed word) atan2_16::y#0
Identical Phi Values (signed word) atan2_16::x#1 (signed word) atan2_16::x#0
Identical Phi Values (signed word) atan2_16::yi#10 (signed word) atan2_16::yi#3
Identical Phi Values (signed word) atan2_16::xi#10 (signed word) atan2_16::xi#3
Identical Phi Values (byte) atan2_16::i#10 (byte) atan2_16::i#2
Identical Phi Values (word) atan2_16::angle#14 (word) atan2_16::angle#12
Identical Phi Values (signed word) atan2_16::x#11 (signed word) atan2_16::x#17
Identical Phi Values (signed word) atan2_16::y#10 (signed word) atan2_16::y#19
2020-06-27 19:18:00 +00:00
Identical Phi Values (byte*) SCREEN_DIST#11 (byte*) SCREEN_DIST#0
Identical Phi Values (byte) NUM_SQUARES#18 (byte) NUM_SQUARES#22
Identical Phi Values (byte*) heap_head#27 (byte*) heap_head#10
Identical Phi Values (word*) SQUARES#23 (word*) SQUARES#28
Identical Phi Values (byte*) SCREEN_ANGLE#2 (byte*) SCREEN_ANGLE#0
Identical Phi Values (byte) NUM_SQUARES#0 (byte) NUM_SQUARES#12
Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#20
Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#16
Identical Phi Values (byte) NUM_SQUARES#20 (byte) NUM_SQUARES#19
Identical Phi Values (byte*) heap_head#29 (byte*) heap_head#28
Identical Phi Values (word*) SQUARES#25 (word*) SQUARES#24
Identical Phi Values (byte*) SCREEN_DIST#12 (byte*) SCREEN_DIST#3
Identical Phi Values (byte*) SCREEN_ANGLE#10 (byte*) SCREEN_ANGLE#3
Identical Phi Values (byte*) main::fill#3 (byte*) main::fill#2
Identical Phi Values (byte*) init_angle_screen::screen#1 (byte*) init_angle_screen::screen#0
Identical Phi Values (byte) init_angle_screen::y#2 (byte) init_angle_screen::y#5
Identical Phi Values (byte*) init_angle_screen::screen_topline#2 (byte*) init_angle_screen::screen_topline#6
Identical Phi Values (byte*) init_angle_screen::screen_bottomline#2 (byte*) init_angle_screen::screen_bottomline#6
2020-06-27 19:18:00 +00:00
Identical Phi Values (byte*) heap_head#30 (byte*) heap_head#27
Identical Phi Values (word*) SQUARES#26 (word*) SQUARES#23
Identical Phi Values (byte*) init_dist_screen::screen#1 (byte*) init_dist_screen::screen#0
2020-06-27 19:18:00 +00:00
Identical Phi Values (byte*) heap_head#19 (byte*) heap_head#16
Identical Phi Values (word*) SQUARES#15 (word*) SQUARES#1
Identical Phi Values (byte*) init_dist_screen::screen_topline#10 (byte*) init_dist_screen::screen_topline#11
Identical Phi Values (byte*) init_dist_screen::screen_bottomline#10 (byte*) init_dist_screen::screen_bottomline#11
Identical Phi Values (byte) init_dist_screen::y#11 (byte) init_dist_screen::y#10
2020-06-27 19:18:00 +00:00
Identical Phi Values (byte) NUM_SQUARES#12 (byte) NUM_SQUARES#32
Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#41
Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#21
Identical Phi Values (word) init_dist_screen::yds#1 (word) init_dist_screen::yds#0
2020-06-27 19:18:00 +00:00
Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#0
Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#0
Identical Phi Values (byte) NUM_SQUARES#13 (byte) NUM_SQUARES#1
Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#18
Identical Phi Values (word*) SQUARES#17 (word*) SQUARES#14
Successful SSA optimization Pass2IdenticalPhiElimination
2020-06-27 19:18:00 +00:00
Identical Phi Values (word*) SQUARES#10 (word*) SQUARES#21
Identical Phi Values (signed word) atan2_16::x#17 (signed word) atan2_16::x#0
Identical Phi Values (signed word) atan2_16::y#19 (signed word) atan2_16::y#0
Identical Phi Values (signed word) atan2_16::x#4 (signed word) atan2_16::x#17
Identical Phi Values (signed word) atan2_16::y#4 (signed word) atan2_16::y#19
2020-06-27 19:18:00 +00:00
Identical Phi Values (byte*) SCREEN_DIST#3 (byte*) SCREEN_DIST#0
Identical Phi Values (byte*) SCREEN_ANGLE#3 (byte*) SCREEN_ANGLE#0
Identical Phi Values (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#32
Identical Phi Values (byte*) heap_head#28 (byte*) heap_head#41
Identical Phi Values (word*) SQUARES#24 (word*) SQUARES#21
Identical Phi Values (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#19
Identical Phi Values (byte*) heap_head#18 (byte*) heap_head#28
Identical Phi Values (word*) SQUARES#14 (word*) SQUARES#24
Identical Phi Values (word*) SQUARES#21 (word*) SQUARES#0
Identical Phi Values (byte) NUM_SQUARES#32 (byte) NUM_SQUARES#2
Identical Phi Values (byte*) heap_head#41 (byte*) heap_head#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [231] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
Successful SSA optimization Pass2DuplicateRValueIdentification
2020-06-27 19:18:00 +00:00
Simple Condition (bool~) bsearch16u::$5 [8] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@5
Simple Condition (bool~) bsearch16u::$10 [16] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@7
Simple Condition (bool~) bsearch16u::$0 [18] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@1
Simple Condition (bool~) bsearch16u::$12 [20] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@8
Simple Condition (bool~) init_squares::$2 [43] if((byte) init_squares::i#2<(byte) NUM_SQUARES#2) goto init_squares::@2
Simple Condition (bool~) atan2_16::$0 [68] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
Simple Condition (bool~) atan2_16::$5 [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
Simple Condition (bool~) atan2_16::$17 [79] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
Simple Condition (bool~) atan2_16::$11 [83] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
Simple Condition (bool~) atan2_16::$18 [86] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14
Simple Condition (bool~) atan2_16::$19 [91] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17
Simple Condition (bool~) atan2_16::$20 [94] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18
Simple Condition (bool~) atan2_16::$21 [108] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@10
Simple Condition (bool~) atan2_16::$14 [111] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
Simple Condition (bool~) main::$3 [131] if(*((byte*) main::fill#2)==(const nomodify byte) FILL_CHAR) goto main::@4
Simple Condition (bool~) main::$6 [137] if((byte*) main::fill#1<(const nomodify byte*) SCREEN_FILL+(word) $3e8) goto main::@3
Simple Condition (bool~) main::$5 [140] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@4
Simple Condition (bool~) main::$8 [142] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@8
Simple Condition (bool~) init_angle_screen::$2 [155] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Simple Condition (bool~) init_angle_screen::$12 [183] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
Simple Condition (bool~) init_dist_screen::$3 [194] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
Simple Condition (bool~) init_dist_screen::$10 [206] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6
Simple Condition (bool~) init_dist_screen::$12 [209] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8
Simple Condition (bool~) init_dist_screen::$21 [214] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
2020-06-27 19:18:00 +00:00
Negating conditional jump and destination [108] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
2020-06-27 19:18:00 +00:00
Constant right-side identified [25] (byte~) bsearch16u::$15 ← (byte) 1 * (const byte) SIZEOF_WORD
Constant right-side identified [28] (byte~) bsearch16u::$16 ← (byte) 1 * (const byte) SIZEOF_WORD
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) bsearch16u::$15 = 1*SIZEOF_WORD
Constant (const byte) bsearch16u::$16 = 1*SIZEOF_WORD
Constant (const word) init_squares::sqr#0 = 0
Constant (const byte) init_squares::i#0 = 0
Constant (const word) atan2_16::angle#0 = 0
Constant (const byte) atan2_16::i#0 = 0
Constant (const byte*) main::fill#0 = SCREEN_FILL
Constant (const word) main::min_dist_angle#0 = $ffff
Constant (const byte*) main::min_fill#0 = SCREEN_FILL
Constant (const byte) init_angle_screen::y#0 = 0
Constant (const byte) init_angle_screen::x#0 = 0
Constant (const byte) init_angle_screen::xb#0 = $27
2020-06-27 19:18:00 +00:00
Constant (const byte) NUM_SQUARES#2 = $30
Constant (const byte) init_dist_screen::y#0 = 0
Constant (const byte) init_dist_screen::x#0 = 0
Constant (const byte) init_dist_screen::xb#0 = $27
2020-06-27 19:18:00 +00:00
Constant (const byte*) heap_head#8 = HEAP_TOP
Constant (const byte) NUM_SQUARES#22 = $ff
Constant (const word*) SQUARES#28 = (word*) 0
Constant (const word) malloc::size#1 = $3e8
Constant (const word) malloc::size#2 = $3e8
Successful SSA optimization Pass2ConstantIdentification
2020-06-27 19:18:00 +00:00
Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#2
Successful SSA optimization Pass2ConstantIdentification
2020-06-27 19:18:00 +00:00
if() condition always true - replacing block destination [123] if(true) goto main::@2
Successful SSA optimization Pass2ConstantIfs
2020-06-27 19:18:00 +00:00
Resolved ranged next value [106] atan2_16::i#1 ← ++ atan2_16::i#2 to ++
Resolved ranged comparison value [108] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12 to (const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1
Resolved ranged next value [181] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++
Resolved ranged comparison value [183] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d
Resolved ranged next value [212] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++
Resolved ranged comparison value [214] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d
Rewriting conditional comparison [155] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Rewriting conditional comparison [206] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6
Eliminating unused constant (const byte) NUM_SQUARES#22
Eliminating unused constant (const word*) SQUARES#28
Successful SSA optimization PassNEliminateUnusedVars
Adding number conversion cast (unumber) CORDIC_ITERATIONS_16-1+1 in if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@12
Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@12
Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#2<(byte) $13+(number) 1) goto init_angle_screen::@3
Adding number conversion cast (unumber) 1 in if((byte) init_angle_screen::x#2<(unumber)(byte) $13+(number) 1) goto init_angle_screen::@3
Adding number conversion cast (unumber) $d in if((byte) init_angle_screen::y#1!=(number) $d) goto init_angle_screen::@1
Adding number conversion cast (unumber) $13+1 in if((byte) init_dist_screen::x#2<(byte) $13+(number) 1) goto init_dist_screen::@6
Adding number conversion cast (unumber) 1 in if((byte) init_dist_screen::x#2<(unumber)(byte) $13+(number) 1) goto init_dist_screen::@6
Adding number conversion cast (unumber) $d in if((byte) init_dist_screen::y#1!=(number) $d) goto init_dist_screen::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (byte) $13+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (byte~) init_angle_screen::$4
Simplifying constant integer cast (byte~) init_angle_screen::$5
Simplifying constant integer cast $d
Simplifying constant integer cast (byte) $13+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast $d
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $d
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $d
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias init_angle_screen::screen_bottomline#0 = init_angle_screen::screen_topline#0
Successful SSA optimization Pass2AliasElimination
2020-06-27 19:18:00 +00:00
Constant right-side identified [24] (word) malloc::size#0 ← (const byte) NUM_SQUARES#2 * (const byte) SIZEOF_WORD
Successful SSA optimization Pass2ConstantRValueConsolidation
2020-06-27 19:18:00 +00:00
Constant (const word) malloc::size#0 = NUM_SQUARES#2*SIZEOF_WORD
Successful SSA optimization Pass2ConstantIdentification
Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [10] (signed word~) bsearch16u::$17 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0
Inlining Noop Cast [11] (signed word~) bsearch16u::$18 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0)
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [25] (void*) malloc::return#2 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [179] (void*) malloc::return#3 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [183] (void*) malloc::return#4 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Successful SSA optimization Pass2NopCastInlining
2020-06-27 19:18:00 +00:00
Inlining Noop Cast [27] (word*) SQUARES#0 ← (word*)(void*~) init_squares::$1 keeping SQUARES#0
Inlining Noop Cast [114] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$13 keeping init_angle_screen::xw#0
Inlining Noop Cast [117] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$14 keeping init_angle_screen::yw#0
Inlining Noop Cast [181] (byte*) SCREEN_DIST#0 ← (byte*)(void*~) __start::__init1_$0 keeping SCREEN_DIST#0
Inlining Noop Cast [185] (byte*) SCREEN_ANGLE#0 ← (byte*)(void*~) __start::__init1_$1 keeping SCREEN_ANGLE#0
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [8] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD
2020-02-15 08:30:27 +00:00
Rewriting multiplication to use shift [33] (byte~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2
Rewriting multiplication to use shift [39] (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
Rewriting division to use shift [48] (word~) sqrt::$1 ← (word~) sqrt::$2 / (const byte) SIZEOF_WORD
Rewriting division to use shift [60] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2
Rewriting multiplication to use shift [74] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [78] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [111] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2
Rewriting multiplication to use shift [115] (byte~) init_angle_screen::$5 ← (byte) init_angle_screen::y#5 * (byte) 2
Rewriting multiplication to use shift [142] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2
Rewriting multiplication to use shift [153] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 * (byte) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const word) malloc::size#1
Inlining constant with var siblings (const word) malloc::size#2
Inlining constant with var siblings (const word) malloc::size#0
Inlining constant with var siblings (const byte) bsearch16u::num#2
Inlining constant with var siblings (const word) init_squares::sqr#0
Inlining constant with var siblings (const byte) init_squares::i#0
Inlining constant with var siblings (const word) atan2_16::angle#0
Inlining constant with var siblings (const byte) atan2_16::i#0
Inlining constant with var siblings (const byte*) main::fill#0
Inlining constant with var siblings (const word) main::min_dist_angle#0
Inlining constant with var siblings (const byte*) main::min_fill#0
Inlining constant with var siblings (const byte) init_angle_screen::y#0
Inlining constant with var siblings (const byte) init_angle_screen::x#0
Inlining constant with var siblings (const byte) init_angle_screen::xb#0
Inlining constant with var siblings (const byte) init_dist_screen::y#0
Inlining constant with var siblings (const byte) init_dist_screen::x#0
Inlining constant with var siblings (const byte) init_dist_screen::xb#0
2020-06-27 19:18:00 +00:00
Inlining constant with var siblings (const byte*) heap_head#8
Constant inlined main::fill#0 = (const nomodify byte*) SCREEN_FILL
Constant inlined malloc::size#2 = (word) $3e8
Constant inlined init_squares::sqr#0 = (word) 0
2020-06-27 19:18:00 +00:00
Constant inlined bsearch16u::num#2 = (const byte) NUM_SQUARES#2
Constant inlined init_angle_screen::xb#0 = (byte) $27
Constant inlined bsearch16u::$15 = (byte) 1*(const byte) SIZEOF_WORD
Constant inlined atan2_16::i#0 = (byte) 0
Constant inlined init_angle_screen::y#0 = (byte) 0
Constant inlined bsearch16u::$16 = (byte) 1*(const byte) SIZEOF_WORD
Constant inlined init_angle_screen::x#0 = (byte) 0
Constant inlined malloc::size#1 = (word) $3e8
Constant inlined atan2_16::angle#0 = (word) 0
2020-06-27 19:18:00 +00:00
Constant inlined malloc::size#0 = (const byte) NUM_SQUARES#2*(const byte) SIZEOF_WORD
Constant inlined init_dist_screen::y#0 = (byte) 0
Constant inlined init_dist_screen::xb#0 = (byte) $27
2020-06-27 19:18:00 +00:00
Constant inlined heap_head#8 = (const byte*) HEAP_TOP
Constant inlined main::min_dist_angle#0 = (word) $ffff
Constant inlined init_dist_screen::x#0 = (byte) 0
Constant inlined init_squares::i#0 = (byte) 0
Constant inlined main::min_fill#0 = (const nomodify byte*) SCREEN_FILL
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting bsearch16u::@11(between bsearch16u::@7 and bsearch16u::@8)
Added new block during phi lifting atan2_16::@22(between atan2_16::@19 and atan2_16::@10)
Added new block during phi lifting atan2_16::@23(between atan2_16::@10 and atan2_16::@12)
Added new block during phi lifting atan2_16::@24(between atan2_16::@19 and atan2_16::@12)
Added new block during phi lifting atan2_16::@25(between atan2_16::@15 and atan2_16::@17)
Added new block during phi lifting atan2_16::@26(between atan2_16::@12 and atan2_16::@7)
Added new block during phi lifting atan2_16::@27(between atan2_16::@7 and atan2_16::@8)
Added new block during phi lifting main::@11(between main::@4 and main::@3)
Added new block during phi lifting main::@12(between main::@3 and main::@4)
Added new block during phi lifting main::@13(between main::@5 and main::@4)
Added new block during phi lifting init_angle_screen::@6(between init_angle_screen::@4 and init_angle_screen::@1)
Added new block during phi lifting init_dist_screen::@15(between init_dist_screen::@7 and init_dist_screen::@1)
Adding NOP phi() at start of __start
Adding NOP phi() at start of __start::__init1
Adding NOP phi() at start of __start::@1
Adding NOP phi() at start of __start::@4
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of init_dist_screen
CALL GRAPH
Calls in [__start] to malloc:2 malloc:5 main:8
Calls in [main] to init_dist_screen:16 init_angle_screen:18
Calls in [init_dist_screen] to init_squares:49 sqr:61 sqr:81 sqrt:86
Calls in [init_angle_screen] to atan2_16:122
Calls in [init_squares] to malloc:139
Calls in [sqrt] to bsearch16u:161
Created 48 initial phi equivalence classes
2020-06-27 19:18:00 +00:00
Coalesced [4] heap_head#53 ← heap_head#0
Not coalescing [13] heap_head#0 ← malloc::mem#0
Coalesced [23] main::dist#6 ← main::dist#0
Coalesced [24] main::angle#6 ← main::angle#0
Coalesced [29] main::min_dist_angle#9 ← main::dist_angle#0
Not coalescing [30] main::min_fill#10 ← main::fill#2
Coalesced [39] main::fill#6 ← main::fill#1
Coalesced [40] main::dist#7 ← main::dist#1
Coalesced [41] main::angle#7 ← main::angle#1
Not coalescing [42] main::min_dist_angle#6 ← main::min_dist_angle#3
Coalesced [43] main::min_fill#7 ← main::min_fill#2
Not coalescing [44] main::min_dist_angle#8 ← main::min_dist_angle#2
Coalesced (already) [45] main::min_fill#9 ← main::min_fill#5
Not coalescing [46] main::min_dist_angle#7 ← main::min_dist_angle#2
Coalesced (already) [47] main::min_fill#8 ← main::min_fill#5
Coalesced [51] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0
Coalesced [52] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0
Coalesced [57] init_dist_screen::yd#2 ← init_dist_screen::$5
Coalesced [60] sqr::val#4 ← sqr::val#0
Coalesced [71] init_dist_screen::y#15 ← init_dist_screen::y#1
Coalesced [72] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1
Coalesced [73] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1
Coalesced [77] init_dist_screen::xd#2 ← init_dist_screen::$14
Coalesced [80] sqr::val#3 ← sqr::val#1
Coalesced [95] init_dist_screen::x#9 ← init_dist_screen::x#1
Coalesced [96] init_dist_screen::xb#9 ← init_dist_screen::xb#1
Coalesced [98] init_dist_screen::xd#1 ← init_dist_screen::$16
Coalesced [100] init_dist_screen::yd#1 ← init_dist_screen::$7
Not coalescing [102] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_bottomline#0
Coalesced [103] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0
Coalesced [112] init_angle_screen::y#7 ← init_angle_screen::y#1
Coalesced [113] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1
Coalesced [114] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1
Coalesced [136] init_angle_screen::x#5 ← init_angle_screen::x#1
Coalesced [137] init_angle_screen::xb#5 ← init_angle_screen::xb#1
Coalesced (already) [138] heap_head#54 ← heap_head#0
Coalesced [142] init_squares::squares#5 ← init_squares::squares#0
Coalesced [152] init_squares::i#4 ← init_squares::i#1
Coalesced [153] init_squares::sqr#4 ← init_squares::sqr#1
Coalesced [154] init_squares::squares#4 ← init_squares::squares#1
Coalesced [170] atan2_16::yi#17 ← atan2_16::$2
Coalesced [174] atan2_16::xi#14 ← atan2_16::$7
Coalesced [176] atan2_16::yi#19 ← atan2_16::yi#0
Coalesced [177] atan2_16::xi#16 ← atan2_16::xi#0
Coalesced [180] atan2_16::angle#22 ← atan2_16::angle#12
Coalesced [185] atan2_16::angle#27 ← atan2_16::angle#4
Coalesced [189] atan2_16::return#6 ← atan2_16::angle#5
Coalesced [192] atan2_16::return#5 ← atan2_16::angle#11
Coalesced [193] atan2_16::angle#26 ← atan2_16::angle#1
Not coalescing [194] atan2_16::shift#5 ← atan2_16::i#2
Not coalescing [195] atan2_16::xd#10 ← atan2_16::xi#3
Not coalescing [196] atan2_16::yd#10 ← atan2_16::yi#3
Coalesced [202] atan2_16::yd#13 ← atan2_16::yd#2
Coalesced [203] atan2_16::xd#13 ← atan2_16::xd#2
Coalesced [210] atan2_16::yi#21 ← atan2_16::yi#2
Coalesced [211] atan2_16::angle#25 ← atan2_16::angle#3
Coalesced [212] atan2_16::xi#18 ← atan2_16::xi#2
Coalesced [216] atan2_16::yi#18 ← atan2_16::yi#8
Coalesced [217] atan2_16::xi#15 ← atan2_16::xi#8
Coalesced [218] atan2_16::i#12 ← atan2_16::i#1
Coalesced [219] atan2_16::angle#21 ← atan2_16::angle#13
Coalesced (already) [220] atan2_16::angle#23 ← atan2_16::angle#13
Coalesced [225] atan2_16::yi#20 ← atan2_16::yi#1
Coalesced [226] atan2_16::angle#24 ← atan2_16::angle#2
Coalesced [227] atan2_16::xi#17 ← atan2_16::xi#1
Coalesced [228] atan2_16::yd#12 ← atan2_16::yd#3
Coalesced [229] atan2_16::xd#12 ← atan2_16::xd#3
Coalesced [233] atan2_16::shift#6 ← atan2_16::shift#1
Coalesced [234] atan2_16::xd#11 ← atan2_16::xd#1
Coalesced [235] atan2_16::yd#11 ← atan2_16::yd#1
Not coalescing [236] atan2_16::xi#13 ← atan2_16::x#0
Not coalescing [237] atan2_16::yi#16 ← atan2_16::y#0
Coalesced [238] bsearch16u::items#10 ← bsearch16u::items#1
Coalesced [243] bsearch16u::return#9 ← bsearch16u::$2
Coalesced [245] bsearch16u::return#6 ← bsearch16u::return#2
Coalesced [248] bsearch16u::return#8 ← bsearch16u::items#2
Not coalescing [254] bsearch16u::return#7 ← bsearch16u::pivot#0
Coalesced [258] bsearch16u::num#10 ← bsearch16u::num#1
Coalesced [259] bsearch16u::items#12 ← bsearch16u::items#0
Coalesced [262] bsearch16u::num#9 ← bsearch16u::num#0
Coalesced [263] bsearch16u::items#11 ← bsearch16u::items#8
Coalesced [264] bsearch16u::num#11 ← bsearch16u::num#3
Coalesced (already) [265] bsearch16u::items#13 ← bsearch16u::items#2
Coalesced down to 38 phi equivalence classes
Culled Empty Block (label) __start::@4
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@1
Culled Empty Block (label) init_dist_screen::@15
Culled Empty Block (label) init_angle_screen::@6
Culled Empty Block (label) atan2_16::@23
Culled Empty Block (label) atan2_16::@27
Culled Empty Block (label) atan2_16::@26
Culled Empty Block (label) atan2_16::@22
Culled Empty Block (label) atan2_16::@24
Culled Empty Block (label) atan2_16::@25
Culled Empty Block (label) bsearch16u::@1
Culled Empty Block (label) bsearch16u::@11
Renumbering block bsearch16u::@2 to bsearch16u::@1
Renumbering block bsearch16u::@3 to bsearch16u::@2
Renumbering block bsearch16u::@4 to bsearch16u::@3
Renumbering block bsearch16u::@5 to bsearch16u::@4
Renumbering block bsearch16u::@6 to bsearch16u::@5
Renumbering block bsearch16u::@7 to bsearch16u::@6
Renumbering block bsearch16u::@8 to bsearch16u::@7
Renumbering block bsearch16u::@9 to bsearch16u::@8
Renumbering block bsearch16u::@10 to bsearch16u::@9
Renumbering block main::@2 to main::@1
Renumbering block main::@3 to main::@2
Renumbering block main::@4 to main::@3
Renumbering block main::@5 to main::@4
Renumbering block main::@6 to main::@5
Renumbering block main::@7 to main::@6
Renumbering block main::@8 to main::@7
Renumbering block main::@9 to main::@8
Renumbering block main::@11 to main::@9
Renumbering block main::@12 to main::@10
Renumbering block main::@13 to main::@11
Adding NOP phi() at start of __start
Adding NOP phi() at start of __start::__init1
Adding NOP phi() at start of __start::@1
Adding NOP phi() at start of init_dist_screen
Adding NOP phi() at start of init_squares
Adding NOP phi() at start of bsearch16u
FINAL CONTROL FLOW GRAPH
2020-06-27 19:18:00 +00:00
(void()) __start()
__start: scope:[__start] from
[0] phi()
to:__start::__init1
__start::__init1: scope:[__start] from __start
[1] phi()
[2] call malloc
to:__start::@2
__start::@2: scope:[__start] from __start::__init1
[3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
[4] call malloc
to:__start::@3
__start::@3: scope:[__start] from __start::@2
[5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0
to:__start::@1
__start::@1: scope:[__start] from __start::@3
[6] phi()
[7] call main
to:__start::@return
__start::@return: scope:[__start] from __start::@1
2020-06-27 19:18:00 +00:00
[8] return
to:@return
(void*()) malloc((word) malloc::size)
malloc: scope:[malloc] from __start::@2 __start::__init1 init_squares
[9] (word) malloc::size#3 ← phi( __start::@2/(word) $3e8 __start::__init1/(word) $3e8 init_squares/(const byte) NUM_SQUARES#2*(const byte) SIZEOF_WORD )
[9] (byte*) heap_head#13 ← phi( __start::@2/(byte*) heap_head#0 __start::__init1/(const byte*) HEAP_TOP init_squares/(byte*) heap_head#0 )
[10] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#3
[11] (byte*) heap_head#0 ← (byte*) malloc::mem#0
to:malloc::@return
malloc::@return: scope:[malloc] from malloc
[12] return
to:@return
(void()) main()
main: scope:[main] from __start::@1
[13] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0
[14] call init_dist_screen
to:main::@8
main::@8: scope:[main] from main
[15] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0
[16] call init_angle_screen
to:main::@1
main::@1: scope:[main] from main::@7 main::@8
[17] (byte*) main::dist#0 ← (byte*)(void*) SCREEN_DIST#0
[18] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0
to:main::@2
main::@2: scope:[main] from main::@1 main::@9
[19] (byte*) main::min_fill#5 ← phi( main::@1/(const nomodify byte*) SCREEN_FILL main::@9/(byte*) main::min_fill#2 )
[19] (word) main::min_dist_angle#2 ← phi( main::@1/(word) $ffff main::@9/(word) main::min_dist_angle#6 )
[19] (byte*) main::angle#2 ← phi( main::@1/(byte*) main::angle#0 main::@9/(byte*) main::angle#1 )
[19] (byte*) main::dist#2 ← phi( main::@1/(byte*) main::dist#0 main::@9/(byte*) main::dist#1 )
[19] (byte*) main::fill#2 ← phi( main::@1/(const nomodify byte*) SCREEN_FILL main::@9/(byte*) main::fill#1 )
[20] if(*((byte*) main::fill#2)==(const nomodify byte) FILL_CHAR) goto main::@10
to:main::@4
main::@4: scope:[main] from main::@2
[21] (word) main::dist_angle#0 ← *((byte*) main::dist#2) w= *((byte*) main::angle#2)
[22] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@11
to:main::@5
main::@5: scope:[main] from main::@4
[23] (byte*) main::min_fill#10 ← (byte*) main::fill#2
to:main::@3
main::@3: scope:[main] from main::@10 main::@11 main::@5
[24] (byte*) main::min_fill#2 ← phi( main::@10/(byte*) main::min_fill#5 main::@11/(byte*) main::min_fill#5 main::@5/(byte*) main::min_fill#10 )
[24] (word) main::min_dist_angle#3 ← phi( main::@10/(word) main::min_dist_angle#7 main::@11/(word) main::min_dist_angle#8 main::@5/(word) main::dist_angle#0 )
[25] (byte*) main::dist#1 ← ++ (byte*) main::dist#2
[26] (byte*) main::angle#1 ← ++ (byte*) main::angle#2
[27] (byte*) main::fill#1 ← ++ (byte*) main::fill#2
[28] if((byte*) main::fill#1<(const nomodify byte*) SCREEN_FILL+(word) $3e8) goto main::@9
to:main::@6
main::@6: scope:[main] from main::@3
[29] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@7
to:main::@return
main::@return: scope:[main] from main::@6
[30] return
to:@return
main::@7: scope:[main] from main::@6
[31] *((byte*) main::min_fill#2) ← (const nomodify byte) FILL_CHAR
to:main::@1
main::@9: scope:[main] from main::@3
[32] (word) main::min_dist_angle#6 ← (word) main::min_dist_angle#3
to:main::@2
main::@11: scope:[main] from main::@4
[33] (word) main::min_dist_angle#8 ← (word) main::min_dist_angle#2
to:main::@3
main::@10: scope:[main] from main::@2
[34] (word) main::min_dist_angle#7 ← (word) main::min_dist_angle#2
to:main::@3
(void()) init_dist_screen((byte*) init_dist_screen::screen)
init_dist_screen: scope:[init_dist_screen] from main
[35] phi()
[36] call init_squares
to:init_dist_screen::@11
init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen
[37] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18
to:init_dist_screen::@1
init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@7
[38] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 )
[38] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 )
[38] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 )
[39] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
[40] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
to:init_dist_screen::@3
init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1
[41] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0
to:init_dist_screen::@4
init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3
[42] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 )
[43] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
[44] call sqr
[45] (word) sqr::return#2 ← (word) sqr::return#0
to:init_dist_screen::@12
init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4
[46] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
to:init_dist_screen::@5
init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14
[47] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 )
[47] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 )
[48] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6
to:init_dist_screen::@7
init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5
[49] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28
[50] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28
[51] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
[52] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1
to:init_dist_screen::@return
init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7
[53] return
to:@return
init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5
[54] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
[55] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8
to:init_dist_screen::@9
init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6
[56] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0
to:init_dist_screen::@10
init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9
[57] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 )
[58] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
[59] call sqr
[60] (word) sqr::return#3 ← (word) sqr::return#0
to:init_dist_screen::@13
init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10
[61] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
[62] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
[63] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
[64] call sqrt
[65] (byte) sqrt::return#2 ← (byte) sqrt::return#0
to:init_dist_screen::@14
init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13
[66] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
[67] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
[68] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
[69] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
[70] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
[71] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
[72] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
to:init_dist_screen::@5
init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6
[73] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27
to:init_dist_screen::@10
init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1
[74] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
to:init_dist_screen::@4
(void()) init_angle_screen((byte*) init_angle_screen::screen)
init_angle_screen: scope:[init_angle_screen] from main::@8
[75] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
[76] (byte*) init_angle_screen::screen_topline#7 ← (byte*) init_angle_screen::screen_bottomline#0
to:init_angle_screen::@1
init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4
[77] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 )
[77] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#7 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 )
[77] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 )
to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5
[78] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 )
[78] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 )
[79] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3
to:init_angle_screen::@4
init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2
[80] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28
[81] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28
[82] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5
[83] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1
to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4
[84] return
to:@return
init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2
[85] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1
[86] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
[87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0
[88] (byte~) init_angle_screen::$5 ← (byte) init_angle_screen::y#5 << (byte) 1
[89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$5 w= (byte) 0
[90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
[91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
[92] call atan2_16
[93] (word) atan2_16::return#2 ← (word) atan2_16::return#0
to:init_angle_screen::@5
init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3
[94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
[95] (word~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (byte) $80
[96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$7
[97] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
[98] (byte~) init_angle_screen::$9 ← - (byte) init_angle_screen::ang_w#0
[99] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$9
[100] (byte~) init_angle_screen::$10 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
[101] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$10
[102] (byte~) init_angle_screen::$11 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
[103] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$11
[104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2
[105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
to:init_angle_screen::@2
(void()) init_squares()
init_squares: scope:[init_squares] from init_dist_screen
[106] phi()
[107] call malloc
to:init_squares::@3
init_squares::@3: scope:[init_squares] from init_squares
[108] (void*) SQUARES#0 ← (void*)(byte*) malloc::mem#0
[109] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#0
to:init_squares::@1
init_squares::@1: scope:[init_squares] from init_squares::@2 init_squares::@3
[110] (word*) init_squares::squares#2 ← phi( init_squares::@2/(word*) init_squares::squares#1 init_squares::@3/(word*) init_squares::squares#0 )
[110] (word) init_squares::sqr#2 ← phi( init_squares::@2/(word) init_squares::sqr#1 init_squares::@3/(word) 0 )
[110] (byte) init_squares::i#2 ← phi( init_squares::@2/(byte) init_squares::i#1 init_squares::@3/(byte) 0 )
[111] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#2) goto init_squares::@2
to:init_squares::@return
init_squares::@return: scope:[init_squares] from init_squares::@1
[112] return
to:@return
init_squares::@2: scope:[init_squares] from init_squares::@1
[113] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
[114] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
[115] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
[116] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
[117] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
[118] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
to:init_squares::@1
(word()) sqr((byte) sqr::val)
sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4
[119] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 )
[120] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
[121] (word) sqr::return#0 ← *((word*)(void*) SQUARES#0 + (byte~) sqr::$0)
to:sqr::@return
sqr::@return: scope:[sqr] from sqr
[122] return
to:@return
(byte()) sqrt((word) sqrt::val)
sqrt: scope:[sqrt] from init_dist_screen::@13
[123] (word) bsearch16u::key#0 ← (word) sqrt::val#0
[124] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#0
[125] call bsearch16u
[126] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
to:sqrt::@1
sqrt::@1: scope:[sqrt] from sqrt
[127] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
[128] (word~) sqrt::$2 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#0
[129] (word~) sqrt::$1 ← (word~) sqrt::$2 >> (byte) 1
[130] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
to:sqrt::@return
sqrt::@return: scope:[sqrt] from sqrt::@1
[131] return
to:@return
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
atan2_16: scope:[atan2_16] from init_angle_screen::@3
[132] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
to:atan2_16::@2
atan2_16::@2: scope:[atan2_16] from atan2_16
[133] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0
to:atan2_16::@3
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
[134] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
[135] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
to:atan2_16::@5
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
[136] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0
to:atan2_16::@6
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
[137] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 )
to:atan2_16::@10
atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6
[138] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 )
[138] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
[138] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
[138] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 )
[139] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
to:atan2_16::@12
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19
[140] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
[141] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
[142] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
to:atan2_16::@21
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
[143] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1
to:atan2_16::@7
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21
[144] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
[145] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
to:atan2_16::@9
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
[146] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11
to:atan2_16::@8
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
[147] (word) atan2_16::return#0 ← phi( atan2_16::@7/(word) atan2_16::angle#11 atan2_16::@9/(word) atan2_16::angle#5 )
to:atan2_16::@return
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
[148] return
to:@return
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
[149] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2
[150] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
[151] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3
to:atan2_16::@13
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14
[152] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 )
[152] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 )
[152] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
[153] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14
to:atan2_16::@15
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
[154] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17
to:atan2_16::@16
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
[155] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
[156] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1
to:atan2_16::@17
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16
[157] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 )
[157] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 )
[158] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18
to:atan2_16::@20
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
[159] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
[160] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
[161] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
[162] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23)
to:atan2_16::@19
atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20
[163] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 )
[163] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
[163] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 )
[164] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
[165] if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12
to:atan2_16::@10
atan2_16::@18: scope:[atan2_16] from atan2_16::@17
[166] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
[167] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
[168] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1
[169] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22)
to:atan2_16::@19
atan2_16::@14: scope:[atan2_16] from atan2_16::@13
[170] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
[171] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
[172] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2
to:atan2_16::@13
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
[173] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0
to:atan2_16::@6
atan2_16::@1: scope:[atan2_16] from atan2_16
[174] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0
to:atan2_16::@3
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
bsearch16u: scope:[bsearch16u] from sqrt
[175] phi()
to:bsearch16u::@3
bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7
[176] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
[176] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#2 bsearch16u::@7/(byte) bsearch16u::num#0 )
[177] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
to:bsearch16u::@5
bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3
[178] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
to:bsearch16u::@1
bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5
[179] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD
to:bsearch16u::@2
bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5
[180] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 )
to:bsearch16u::@return
bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8
[181] (word*) bsearch16u::return#1 ← phi( bsearch16u::@2/(word*) bsearch16u::return#2 bsearch16u::@8/(word*) bsearch16u::return#7 )
[182] return
to:@return
bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3
[183] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
[184] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 << (byte) 1
[185] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$14
[186] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
[187] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
to:bsearch16u::@8
bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4
[188] (word*) bsearch16u::return#7 ← (word*) bsearch16u::pivot#0
to:bsearch16u::@return
bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4
[189] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
to:bsearch16u::@9
bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6
[190] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
[191] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
to:bsearch16u::@7
bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9
[192] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
[192] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
[193] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
to:bsearch16u::@3
VARIABLE REGISTER WEIGHTS
(byte) NUM_SQUARES
(byte*) SCREEN_ANGLE
(void*) SCREEN_ANGLE#0 0.08695652173913043
(byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 0.08
(word*) SQUARES
2020-06-27 19:18:00 +00:00
(void*) SQUARES#0 16.14516129032258
(void()) __start()
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 200002.0
(byte~) atan2_16::$22 2.00000002E8
(byte~) atan2_16::$23 2.00000002E8
(signed word~) atan2_16::$7 200002.0
(word) atan2_16::angle
(word) atan2_16::angle#1 150001.5
(word) atan2_16::angle#11 200002.0
(word) atan2_16::angle#12 1.904761923809524E7
(word) atan2_16::angle#13 1.3333333466666667E8
(word) atan2_16::angle#2 2.00000002E8
(word) atan2_16::angle#3 2.00000002E8
(word) atan2_16::angle#4 200002.0
(word) atan2_16::angle#5 200002.0
(word) atan2_16::angle#6 2.00100003E8
(byte) atan2_16::i
(byte) atan2_16::i#1 1.500000015E8
(byte) atan2_16::i#2 2.0833333541666668E7
(word) atan2_16::return
(word) atan2_16::return#0 70001.0
(word) atan2_16::return#2 20002.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 2.000000002E9
(byte) atan2_16::shift#2 8.0000000125E8
(byte) atan2_16::shift#5 6.6666667333333336E7
(signed word) atan2_16::x
(signed word) atan2_16::x#0 10789.605263157895
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 6.666666673333334E8
(signed word) atan2_16::xd#10 1.00000001E8
(signed word) atan2_16::xd#2 1.00000001E8
(signed word) atan2_16::xd#3 7.666666683333335E8
(signed word) atan2_16::xd#5 1.00000001E8
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 300003.0
(signed word) atan2_16::xi#1 5.00000005E7
(signed word) atan2_16::xi#13 200002.0
(signed word) atan2_16::xi#2 5.00000005E7
(signed word) atan2_16::xi#3 2.6673333666666668E7
(signed word) atan2_16::xi#8 1.00000001E8
(signed word) atan2_16::y
(signed word) atan2_16::y#0 10250.125
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 1.000000001E9
(signed word) atan2_16::yd#10 2.00000002E8
(signed word) atan2_16::yd#2 2.00000002E8
(signed word) atan2_16::yd#3 4.6000000099999994E8
(signed word) atan2_16::yd#5 2.00000002E8
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 60000.600000000006
(signed word) atan2_16::yi#1 6.6666667333333336E7
(signed word) atan2_16::yi#16 200002.0
(signed word) atan2_16::yi#2 6.6666667333333336E7
(signed word) atan2_16::yi#3 3.53000004117647E7
(signed word) atan2_16::yi#8 1.00000001E8
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(byte~) bsearch16u::$14 2.000000002E9
(word*~) bsearch16u::$2 2000002.0
(byte~) bsearch16u::$6 2.000000002E9
(word*) bsearch16u::items
(word*) bsearch16u::items#0 1.000000001E9
(word*) bsearch16u::items#1 550001.0
(word*) bsearch16u::items#2 3.337777785555556E8
(word*) bsearch16u::items#8 1.5000000015E9
(word) bsearch16u::key
(word) bsearch16u::key#0 73333.46666666667
(byte) bsearch16u::num
(byte) bsearch16u::num#0 2.000000002E9
(byte) bsearch16u::num#1 2.000000002E9
(byte) bsearch16u::num#3 5.555555561111112E8
(byte) bsearch16u::num#5 3.000000003E9
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0 5.0025000075E8
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0 1.5000000015E9
(word*) bsearch16u::return
(word*) bsearch16u::return#1 700001.0
(word*) bsearch16u::return#2 3000003.0
(word*) bsearch16u::return#3 200002.0
(word*) bsearch16u::return#7 2000002.0
(byte*) heap_head
2020-06-27 19:18:00 +00:00
(byte*) heap_head#0 1100.4
(byte*) heap_head#13 11004.0
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(byte~) init_angle_screen::$10 20002.0
(byte~) init_angle_screen::$11 20002.0
(byte~) init_angle_screen::$3 20002.0
(byte~) init_angle_screen::$4 20002.0
(byte~) init_angle_screen::$5 20002.0
(word~) init_angle_screen::$7 20002.0
(byte~) init_angle_screen::$9 20002.0
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0 8334.166666666666
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0 20002.0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0 112.0
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0 151.5
(byte*) init_angle_screen::screen_bottomline#1 667.3333333333334
(byte*) init_angle_screen::screen_bottomline#6 884.2
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#1 500.5
(byte*) init_angle_screen::screen_topline#6 921.0416666666666
(byte*) init_angle_screen::screen_topline#7 202.0
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 10001.0
(byte) init_angle_screen::x#2 2857.4285714285716
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 20002.0
(byte) init_angle_screen::xb#2 1818.3636363636363
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 3333.6666666666665
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 1501.5
(byte) init_angle_screen::y#5 461.65384615384613
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 5000.5
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte~) init_dist_screen::$14 20002.0
(byte~) init_dist_screen::$16 20002.0
(byte~) init_dist_screen::$5 2002.0
(byte~) init_dist_screen::$7 2002.0
(byte) init_dist_screen::d
(byte) init_dist_screen::d#0 12501.25
(word) init_dist_screen::ds
(word) init_dist_screen::ds#0 20002.0
(byte*) init_dist_screen::screen
(byte*) init_dist_screen::screen#0 53.25
(byte*) init_dist_screen::screen_bottomline
(byte*) init_dist_screen::screen_bottomline#0 202.0
(byte*) init_dist_screen::screen_bottomline#1 667.3333333333334
(byte*) init_dist_screen::screen_bottomline#11 669.8484848484848
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#1 500.5
(byte*) init_dist_screen::screen_topline#11 690.78125
(byte) init_dist_screen::x
(byte) init_dist_screen::x#1 10001.0
(byte) init_dist_screen::x#2 3000.3
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0 20002.0
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#1 20002.0
(byte) init_dist_screen::xb#2 1904.952380952381
(byte) init_dist_screen::xd
(byte) init_dist_screen::xd#0 30003.0
(word) init_dist_screen::xds
(word) init_dist_screen::xds#0 20002.0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#1 1501.5
(byte) init_dist_screen::y#10 88.32352941176471
(byte) init_dist_screen::y2
(byte) init_dist_screen::y2#0 2002.0
(byte) init_dist_screen::yd
(byte) init_dist_screen::yd#0 3003.0
(word) init_dist_screen::yds
(word) init_dist_screen::yds#0 478.3478260869565
(void()) init_squares()
(byte~) init_squares::$3 20002.0
(byte~) init_squares::$4 20002.0
(byte) init_squares::i
(byte) init_squares::i#1 20002.0
(byte) init_squares::i#2 5714.857142857143
(word) init_squares::sqr
(word) init_squares::sqr#1 10001.0
(word) init_squares::sqr#2 5000.5
(word*) init_squares::squares
(word*) init_squares::squares#0 2002.0
(word*) init_squares::squares#1 4000.4
(word*) init_squares::squares#2 10334.666666666666
(void()) main()
(byte*) main::angle
(byte*) main::angle#0 202.0
(byte*) main::angle#1 500.5
(byte*) main::angle#2 344.8888888888889
(byte*) main::dist
(byte*) main::dist#0 101.0
(byte*) main::dist#1 400.4
(byte*) main::dist#2 388.0
(word) main::dist_angle
(word) main::dist_angle#0 1001.0
(byte*) main::fill
(byte*) main::fill#1 1001.0
(byte*) main::fill#2 400.4
(word) main::min_dist_angle
(word) main::min_dist_angle#2 1001.0
(word) main::min_dist_angle#3 821.0
(word) main::min_dist_angle#6 2002.0
(word) main::min_dist_angle#7 2002.0
(word) main::min_dist_angle#8 2002.0
(byte*) main::min_fill
(byte*) main::min_fill#10 2002.0
(byte*) main::min_fill#2 586.4285714285714
(byte*) main::min_fill#5 500.5
(void*()) malloc((word) malloc::size)
(byte*) malloc::mem
(byte*) malloc::mem#0 3333.6666666666665
(void*) malloc::return
(word) malloc::size
(word) malloc::size#3 10001.0
(word()) sqr((byte) sqr::val)
(byte~) sqr::$0 200002.0
(word) sqr::return
(word) sqr::return#0 27750.75
(word) sqr::return#2 2002.0
(word) sqr::return#3 20002.0
(byte) sqr::val
(byte) sqr::val#0 2002.0
(byte) sqr::val#1 20002.0
(byte) sqr::val#2 111003.0
(byte()) sqrt((word) sqrt::val)
(word~) sqrt::$1 100001.0
(word~) sqrt::$2 200002.0
(word*) sqrt::found
(word*) sqrt::found#0 200002.0
(byte) sqrt::return
(byte) sqrt::return#0 36667.33333333333
(byte) sqrt::return#2 20002.0
(byte) sqrt::sq
(word) sqrt::val
(word) sqrt::val#0 110002.0
Initial phi equivalence classes
[ heap_head#13 heap_head#0 ]
[ malloc::size#3 ]
[ main::fill#2 main::fill#1 ]
[ main::dist#2 main::dist#0 main::dist#1 ]
[ main::angle#2 main::angle#0 main::angle#1 ]
[ main::min_dist_angle#2 main::min_dist_angle#6 ]
[ main::min_fill#5 main::min_fill#2 main::min_fill#10 ]
[ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ]
[ init_dist_screen::y#10 init_dist_screen::y#1 ]
[ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
[ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
[ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
[ init_dist_screen::x#2 init_dist_screen::x#1 ]
[ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
[ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
[ init_squares::i#2 init_squares::i#1 ]
[ init_squares::sqr#2 init_squares::sqr#1 ]
[ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
[ sqr::val#2 sqr::val#1 sqr::val#0 ]
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
[ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
[ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
[ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
[ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
[ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ]
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
2019-12-08 15:04:35 +00:00
Added variable SCREEN_DIST#0 to live range equivalence class [ SCREEN_DIST#0 ]
Added variable SCREEN_ANGLE#0 to live range equivalence class [ SCREEN_ANGLE#0 ]
Added variable malloc::mem#0 to live range equivalence class [ malloc::mem#0 ]
2019-12-08 15:04:35 +00:00
Added variable init_angle_screen::screen#0 to live range equivalence class [ init_angle_screen::screen#0 ]
Added variable init_dist_screen::y2#0 to live range equivalence class [ init_dist_screen::y2#0 ]
Added variable sqr::return#2 to live range equivalence class [ sqr::return#2 ]
Added variable init_dist_screen::yds#0 to live range equivalence class [ init_dist_screen::yds#0 ]
Added variable init_dist_screen::x2#0 to live range equivalence class [ init_dist_screen::x2#0 ]
Added variable sqr::return#3 to live range equivalence class [ sqr::return#3 ]
Added variable init_dist_screen::xds#0 to live range equivalence class [ init_dist_screen::xds#0 ]
Added variable init_dist_screen::ds#0 to live range equivalence class [ init_dist_screen::ds#0 ]
Added variable sqrt::val#0 to live range equivalence class [ sqrt::val#0 ]
Added variable sqrt::return#2 to live range equivalence class [ sqrt::return#2 ]
Added variable init_dist_screen::d#0 to live range equivalence class [ init_dist_screen::d#0 ]
2019-12-08 15:04:35 +00:00
Added variable init_angle_screen::$3 to live range equivalence class [ init_angle_screen::$3 ]
Added variable init_angle_screen::$4 to live range equivalence class [ init_angle_screen::$4 ]
Added variable init_angle_screen::xw#0 to live range equivalence class [ init_angle_screen::xw#0 ]
Added variable init_angle_screen::$5 to live range equivalence class [ init_angle_screen::$5 ]
2019-12-08 15:04:35 +00:00
Added variable init_angle_screen::yw#0 to live range equivalence class [ init_angle_screen::yw#0 ]
Added variable atan2_16::x#0 to live range equivalence class [ atan2_16::x#0 ]
Added variable atan2_16::y#0 to live range equivalence class [ atan2_16::y#0 ]
Added variable atan2_16::return#2 to live range equivalence class [ atan2_16::return#2 ]
Added variable init_angle_screen::angle_w#0 to live range equivalence class [ init_angle_screen::angle_w#0 ]
Added variable init_angle_screen::$7 to live range equivalence class [ init_angle_screen::$7 ]
2019-12-08 15:04:35 +00:00
Added variable init_angle_screen::ang_w#0 to live range equivalence class [ init_angle_screen::ang_w#0 ]
Added variable init_angle_screen::$9 to live range equivalence class [ init_angle_screen::$9 ]
Added variable init_angle_screen::$10 to live range equivalence class [ init_angle_screen::$10 ]
Added variable init_angle_screen::$11 to live range equivalence class [ init_angle_screen::$11 ]
Added variable SQUARES#0 to live range equivalence class [ SQUARES#0 ]
Added variable init_squares::$3 to live range equivalence class [ init_squares::$3 ]
Added variable init_squares::$4 to live range equivalence class [ init_squares::$4 ]
Added variable sqr::$0 to live range equivalence class [ sqr::$0 ]
Added variable sqr::return#0 to live range equivalence class [ sqr::return#0 ]
2019-12-08 15:04:35 +00:00
Added variable bsearch16u::key#0 to live range equivalence class [ bsearch16u::key#0 ]
Added variable bsearch16u::return#3 to live range equivalence class [ bsearch16u::return#3 ]
Added variable sqrt::found#0 to live range equivalence class [ sqrt::found#0 ]
Added variable sqrt::$2 to live range equivalence class [ sqrt::$2 ]
2019-12-08 15:04:35 +00:00
Added variable sqrt::$1 to live range equivalence class [ sqrt::$1 ]
Added variable sqrt::return#0 to live range equivalence class [ sqrt::return#0 ]
Added variable atan2_16::$23 to live range equivalence class [ atan2_16::$23 ]
Added variable atan2_16::$22 to live range equivalence class [ atan2_16::$22 ]
2019-12-08 15:04:35 +00:00
Added variable bsearch16u::$6 to live range equivalence class [ bsearch16u::$6 ]
Added variable bsearch16u::$14 to live range equivalence class [ bsearch16u::$14 ]
2019-12-08 15:04:35 +00:00
Added variable bsearch16u::pivot#0 to live range equivalence class [ bsearch16u::pivot#0 ]
Added variable bsearch16u::result#0 to live range equivalence class [ bsearch16u::result#0 ]
Complete equivalence classes
[ heap_head#13 heap_head#0 ]
[ malloc::size#3 ]
[ main::fill#2 main::fill#1 ]
[ main::dist#2 main::dist#0 main::dist#1 ]
[ main::angle#2 main::angle#0 main::angle#1 ]
[ main::min_dist_angle#2 main::min_dist_angle#6 ]
[ main::min_fill#5 main::min_fill#2 main::min_fill#10 ]
[ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ]
[ init_dist_screen::y#10 init_dist_screen::y#1 ]
[ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
[ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
[ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
[ init_dist_screen::x#2 init_dist_screen::x#1 ]
[ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
[ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
[ init_squares::i#2 init_squares::i#1 ]
[ init_squares::sqr#2 init_squares::sqr#1 ]
[ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
[ sqr::val#2 sqr::val#1 sqr::val#0 ]
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
[ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
[ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
[ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
[ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
[ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ]
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
[ SCREEN_DIST#0 ]
[ SCREEN_ANGLE#0 ]
[ malloc::mem#0 ]
[ init_angle_screen::screen#0 ]
[ init_dist_screen::y2#0 ]
[ sqr::return#2 ]
[ init_dist_screen::yds#0 ]
[ init_dist_screen::x2#0 ]
[ sqr::return#3 ]
[ init_dist_screen::xds#0 ]
[ init_dist_screen::ds#0 ]
[ sqrt::val#0 ]
[ sqrt::return#2 ]
[ init_dist_screen::d#0 ]
[ init_angle_screen::$3 ]
[ init_angle_screen::$4 ]
[ init_angle_screen::xw#0 ]
[ init_angle_screen::$5 ]
[ init_angle_screen::yw#0 ]
[ atan2_16::x#0 ]
[ atan2_16::y#0 ]
[ atan2_16::return#2 ]
[ init_angle_screen::angle_w#0 ]
[ init_angle_screen::$7 ]
[ init_angle_screen::ang_w#0 ]
[ init_angle_screen::$9 ]
[ init_angle_screen::$10 ]
[ init_angle_screen::$11 ]
[ SQUARES#0 ]
[ init_squares::$3 ]
[ init_squares::$4 ]
[ sqr::$0 ]
[ sqr::return#0 ]
[ bsearch16u::key#0 ]
[ bsearch16u::return#3 ]
[ sqrt::found#0 ]
[ sqrt::$2 ]
[ sqrt::$1 ]
[ sqrt::return#0 ]
[ atan2_16::$23 ]
[ atan2_16::$22 ]
[ bsearch16u::$6 ]
[ bsearch16u::$14 ]
[ bsearch16u::pivot#0 ]
[ bsearch16u::result#0 ]
Allocated zp[2]:2 [ heap_head#13 heap_head#0 ]
Allocated zp[2]:4 [ malloc::size#3 ]
Allocated zp[2]:6 [ main::fill#2 main::fill#1 ]
Allocated zp[2]:8 [ main::dist#2 main::dist#0 main::dist#1 ]
Allocated zp[2]:10 [ main::angle#2 main::angle#0 main::angle#1 ]
Allocated zp[2]:12 [ main::min_dist_angle#2 main::min_dist_angle#6 ]
Allocated zp[2]:14 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ]
Allocated zp[2]:16 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ]
Allocated zp[1]:18 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Allocated zp[2]:19 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
Allocated zp[2]:21 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
Allocated zp[1]:23 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Allocated zp[1]:24 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Allocated zp[1]:25 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Allocated zp[1]:26 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
Allocated zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Allocated zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ]
Allocated zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
Allocated zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Allocated zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Allocated zp[1]:34 [ init_squares::i#2 init_squares::i#1 ]
Allocated zp[2]:35 [ init_squares::sqr#2 init_squares::sqr#1 ]
Allocated zp[2]:37 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
Allocated zp[1]:39 [ sqr::val#2 sqr::val#1 sqr::val#0 ]
Allocated zp[2]:40 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
Allocated zp[2]:42 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
Allocated zp[1]:44 [ atan2_16::i#2 atan2_16::i#1 ]
Allocated zp[2]:45 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
Allocated zp[2]:47 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
Allocated zp[1]:49 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Allocated zp[2]:50 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated zp[2]:52 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ]
Allocated zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Allocated zp[2]:57 [ SCREEN_DIST#0 ]
Allocated zp[2]:59 [ SCREEN_ANGLE#0 ]
Allocated zp[2]:61 [ malloc::mem#0 ]
Allocated zp[2]:63 [ init_angle_screen::screen#0 ]
Allocated zp[1]:65 [ init_dist_screen::y2#0 ]
Allocated zp[2]:66 [ sqr::return#2 ]
Allocated zp[2]:68 [ init_dist_screen::yds#0 ]
Allocated zp[1]:70 [ init_dist_screen::x2#0 ]
Allocated zp[2]:71 [ sqr::return#3 ]
Allocated zp[2]:73 [ init_dist_screen::xds#0 ]
Allocated zp[2]:75 [ init_dist_screen::ds#0 ]
Allocated zp[2]:77 [ sqrt::val#0 ]
Allocated zp[1]:79 [ sqrt::return#2 ]
Allocated zp[1]:80 [ init_dist_screen::d#0 ]
Allocated zp[1]:81 [ init_angle_screen::$3 ]
Allocated zp[1]:82 [ init_angle_screen::$4 ]
Allocated zp[2]:83 [ init_angle_screen::xw#0 ]
Allocated zp[1]:85 [ init_angle_screen::$5 ]
Allocated zp[2]:86 [ init_angle_screen::yw#0 ]
Allocated zp[2]:88 [ atan2_16::x#0 ]
Allocated zp[2]:90 [ atan2_16::y#0 ]
Allocated zp[2]:92 [ atan2_16::return#2 ]
Allocated zp[2]:94 [ init_angle_screen::angle_w#0 ]
Allocated zp[2]:96 [ init_angle_screen::$7 ]
Allocated zp[1]:98 [ init_angle_screen::ang_w#0 ]
Allocated zp[1]:99 [ init_angle_screen::$9 ]
Allocated zp[1]:100 [ init_angle_screen::$10 ]
Allocated zp[1]:101 [ init_angle_screen::$11 ]
Allocated zp[2]:102 [ SQUARES#0 ]
Allocated zp[1]:104 [ init_squares::$3 ]
Allocated zp[1]:105 [ init_squares::$4 ]
Allocated zp[1]:106 [ sqr::$0 ]
Allocated zp[2]:107 [ sqr::return#0 ]
Allocated zp[2]:109 [ bsearch16u::key#0 ]
Allocated zp[2]:111 [ bsearch16u::return#3 ]
Allocated zp[2]:113 [ sqrt::found#0 ]
Allocated zp[2]:115 [ sqrt::$2 ]
Allocated zp[2]:117 [ sqrt::$1 ]
Allocated zp[1]:119 [ sqrt::return#0 ]
Allocated zp[1]:120 [ atan2_16::$23 ]
Allocated zp[1]:121 [ atan2_16::$22 ]
Allocated zp[1]:122 [ bsearch16u::$6 ]
Allocated zp[1]:123 [ bsearch16u::$14 ]
Allocated zp[2]:124 [ bsearch16u::pivot#0 ]
Allocated zp[2]:126 [ bsearch16u::result#0 ]
INITIAL ASM
Target platform is c64basic / MOS6502X
// File Comments
// Fill screen using a spiral based on distance-to-center / angle-to-center
// Upstart
.pc = $801 "Basic"
:BasicUpstart(__start)
.pc = $80d "Program"
// Global Constants & labels
.const SIZEOF_WORD = 2
// The number of iterations performed during 16-bit CORDIC atan2 calculation
.const CORDIC_ITERATIONS_16 = $f
// Char to fill with
.const FILL_CHAR = '@'
// The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt()
.const NUM_SQUARES = $30
// Screen containing angle to center
.label SCREEN_FILL = $400
// Top of the heap used by malloc()
.label HEAP_TOP = $a000
// Head of the heap. Moved backward each malloc()
.label heap_head = 2
// Squares for each char value SQUARES[i] = i*i
// Initialized by init_squares()
.label SQUARES = $66
2020-06-27 19:18:00 +00:00
// Screen containing distance to center
.label SCREEN_DIST = $39
2020-06-27 19:18:00 +00:00
// Screen containing angle to center
.label SCREEN_ANGLE = $3b
// __start
__start: {
// [1] phi from __start to __start::__init1 [phi:__start->__start::__init1]
__init1_from___start:
jmp __init1
// __start::__init1
__init1:
2020-06-27 19:18:00 +00:00
// [2] call malloc
// [9] phi from __start::__init1 to malloc [phi:__start::__init1->malloc]
malloc_from___init1:
// [9] phi (word) malloc::size#3 = (word) $3e8 [phi:__start::__init1->malloc#0] -- vwuz1=vwuc1
2020-06-27 19:18:00 +00:00
lda #<$3e8
sta.z malloc.size
lda #>$3e8
sta.z malloc.size+1
// [9] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP [phi:__start::__init1->malloc#1] -- pbuz1=pbuc1
2020-06-27 19:18:00 +00:00
lda #<HEAP_TOP
sta.z heap_head
lda #>HEAP_TOP
sta.z heap_head+1
jsr malloc
jmp __b2
// __start::@2
2020-06-27 19:18:00 +00:00
__b2:
// [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_DIST
lda.z malloc.mem+1
sta.z SCREEN_DIST+1
// [4] call malloc
// [9] phi from __start::@2 to malloc [phi:__start::@2->malloc]
2020-06-27 19:18:00 +00:00
malloc_from___b2:
// [9] phi (word) malloc::size#3 = (word) $3e8 [phi:__start::@2->malloc#0] -- vwuz1=vwuc1
2020-06-27 19:18:00 +00:00
lda #<$3e8
sta.z malloc.size
lda #>$3e8
sta.z malloc.size+1
// [9] phi (byte*) heap_head#13 = (byte*) heap_head#0 [phi:__start::@2->malloc#1] -- register_copy
2020-06-27 19:18:00 +00:00
jsr malloc
jmp __b3
// __start::@3
2020-06-27 19:18:00 +00:00
__b3:
// [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_ANGLE
lda.z malloc.mem+1
sta.z SCREEN_ANGLE+1
// [6] phi from __start::@3 to __start::@1 [phi:__start::@3->__start::@1]
2020-06-27 19:18:00 +00:00
__b1_from___b3:
jmp __b1
// __start::@1
2020-06-27 19:18:00 +00:00
__b1:
// [7] call main
jsr main
jmp __breturn
// __start::@return
2020-06-27 19:18:00 +00:00
__breturn:
// [8] return
rts
}
// malloc
// Allocates a block of size chars of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
// malloc(word zp(4) size)
malloc: {
.label mem = $3d
.label size = 4
// [10] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz3
lda.z heap_head
sec
sbc.z size
sta.z mem
lda.z heap_head+1
sbc.z size+1
sta.z mem+1
// [11] (byte*) heap_head#0 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2
lda.z mem
sta.z heap_head
lda.z mem+1
sta.z heap_head+1
jmp __breturn
// malloc::@return
__breturn:
// [12] return
rts
2020-06-27 19:18:00 +00:00
}
// main
main: {
.label dist = 8
.label angle = $a
.label fill = 6
.label dist_angle = $10
.label min_dist_angle = $c
.label min_dist_angle_1 = $10
.label min_fill = $e
// [13] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2
lda.z SCREEN_DIST
sta.z init_dist_screen.screen
lda.z SCREEN_DIST+1
sta.z init_dist_screen.screen+1
// [14] call init_dist_screen
// [35] phi from main to init_dist_screen [phi:main->init_dist_screen]
init_dist_screen_from_main:
jsr init_dist_screen
jmp __b8
// main::@8
__b8:
// [15] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2
lda.z SCREEN_ANGLE
sta.z init_angle_screen.screen
lda.z SCREEN_ANGLE+1
sta.z init_angle_screen.screen+1
// [16] call init_angle_screen
jsr init_angle_screen
jmp __b1
// main::@1
__b1:
// [17] (byte*) main::dist#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2
// Find the minimum dist/angle that is not already filled
lda.z SCREEN_DIST
sta.z dist
lda.z SCREEN_DIST+1
sta.z dist+1
// [18] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2
lda.z SCREEN_ANGLE
sta.z angle
lda.z SCREEN_ANGLE+1
sta.z angle+1
// [19] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
__b2_from___b1:
// [19] phi (byte*) main::min_fill#5 = (const nomodify byte*) SCREEN_FILL [phi:main::@1->main::@2#0] -- pbuz1=pbuc1
lda #<SCREEN_FILL
sta.z min_fill
lda #>SCREEN_FILL
sta.z min_fill+1
// [19] phi (word) main::min_dist_angle#2 = (word) $ffff [phi:main::@1->main::@2#1] -- vwuz1=vwuc1
lda #<$ffff
sta.z min_dist_angle
lda #>$ffff
sta.z min_dist_angle+1
// [19] phi (byte*) main::angle#2 = (byte*) main::angle#0 [phi:main::@1->main::@2#2] -- register_copy
// [19] phi (byte*) main::dist#2 = (byte*) main::dist#0 [phi:main::@1->main::@2#3] -- register_copy
// [19] phi (byte*) main::fill#2 = (const nomodify byte*) SCREEN_FILL [phi:main::@1->main::@2#4] -- pbuz1=pbuc1
lda #<SCREEN_FILL
sta.z fill
lda #>SCREEN_FILL
sta.z fill+1
jmp __b2
// main::@2
__b2:
// [20] if(*((byte*) main::fill#2)==(const nomodify byte) FILL_CHAR) goto main::@10 -- _deref_pbuz1_eq_vbuc1_then_la1
lda #FILL_CHAR
ldy #0
cmp (fill),y
beq __b10
jmp __b4
// main::@4
__b4:
// [21] (word) main::dist_angle#0 ← *((byte*) main::dist#2) w= *((byte*) main::angle#2) -- vwuz1=_deref_pbuz2_word__deref_pbuz3
ldy #0
lda (angle),y
sta.z dist_angle
lda (dist),y
sta.z dist_angle+1
// [22] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@11 -- vwuz1_ge_vwuz2_then_la1
lda.z min_dist_angle+1
cmp.z dist_angle+1
bne !+
lda.z min_dist_angle
cmp.z dist_angle
beq __b11
!:
bcc __b11
jmp __b5
// main::@5
__b5:
// [23] (byte*) main::min_fill#10 ← (byte*) main::fill#2 -- pbuz1=pbuz2
lda.z fill
sta.z min_fill
lda.z fill+1
sta.z min_fill+1
// [24] phi from main::@10 main::@11 main::@5 to main::@3 [phi:main::@10/main::@11/main::@5->main::@3]
__b3_from___b10:
__b3_from___b11:
__b3_from___b5:
// [24] phi (byte*) main::min_fill#2 = (byte*) main::min_fill#5 [phi:main::@10/main::@11/main::@5->main::@3#0] -- register_copy
// [24] phi (word) main::min_dist_angle#3 = (word) main::min_dist_angle#7 [phi:main::@10/main::@11/main::@5->main::@3#1] -- register_copy
jmp __b3
// main::@3
__b3:
// [25] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 -- pbuz1=_inc_pbuz1
inc.z dist
bne !+
inc.z dist+1
!:
// [26] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 -- pbuz1=_inc_pbuz1
inc.z angle
bne !+
inc.z angle+1
!:
// [27] (byte*) main::fill#1 ← ++ (byte*) main::fill#2 -- pbuz1=_inc_pbuz1
inc.z fill
bne !+
inc.z fill+1
!:
// [28] if((byte*) main::fill#1<(const nomodify byte*) SCREEN_FILL+(word) $3e8) goto main::@9 -- pbuz1_lt_pbuc1_then_la1
lda.z fill+1
cmp #>SCREEN_FILL+$3e8
bcc __b9
bne !+
lda.z fill
cmp #<SCREEN_FILL+$3e8
bcc __b9
!:
jmp __b6
// main::@6
__b6:
// [29] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@7 -- vwuz1_neq_vwuc1_then_la1
lda.z min_dist_angle_1+1
cmp #>$ffff
bne __b7
lda.z min_dist_angle_1
cmp #<$ffff
bne __b7
jmp __breturn
// main::@return
__breturn:
// [30] return
rts
// main::@7
__b7:
// [31] *((byte*) main::min_fill#2) ← (const nomodify byte) FILL_CHAR -- _deref_pbuz1=vbuc1
// Fill the found location
lda #FILL_CHAR
ldy #0
sta (min_fill),y
jmp __b1
// main::@9
__b9:
// [32] (word) main::min_dist_angle#6 ← (word) main::min_dist_angle#3 -- vwuz1=vwuz2
lda.z min_dist_angle_1
sta.z min_dist_angle
lda.z min_dist_angle_1+1
sta.z min_dist_angle+1
// [19] phi from main::@9 to main::@2 [phi:main::@9->main::@2]
__b2_from___b9:
// [19] phi (byte*) main::min_fill#5 = (byte*) main::min_fill#2 [phi:main::@9->main::@2#0] -- register_copy
// [19] phi (word) main::min_dist_angle#2 = (word) main::min_dist_angle#6 [phi:main::@9->main::@2#1] -- register_copy
// [19] phi (byte*) main::angle#2 = (byte*) main::angle#1 [phi:main::@9->main::@2#2] -- register_copy
// [19] phi (byte*) main::dist#2 = (byte*) main::dist#1 [phi:main::@9->main::@2#3] -- register_copy
// [19] phi (byte*) main::fill#2 = (byte*) main::fill#1 [phi:main::@9->main::@2#4] -- register_copy
jmp __b2
// main::@11
__b11:
// [33] (word) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 -- vwuz1=vwuz2
lda.z min_dist_angle
sta.z min_dist_angle_1
lda.z min_dist_angle+1
sta.z min_dist_angle_1+1
jmp __b3_from___b11
// main::@10
__b10:
// [34] (word) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 -- vwuz1=vwuz2
lda.z min_dist_angle
sta.z min_dist_angle_1
lda.z min_dist_angle+1
sta.z min_dist_angle_1+1
jmp __b3_from___b10
}
// init_dist_screen
// Populates 1000 bytes (a screen) with values representing the distance to the center.
// The actual value stored is distance*2 to increase precision
// init_dist_screen(byte* zp($13) screen)
init_dist_screen: {
.label __5 = $17
.label __7 = $17
.label __14 = $1a
.label __16 = $1a
.label screen = $13
.label screen_bottomline = $15
.label y2 = $41
.label yd = $17
.label yds = $44
.label x2 = $46
.label screen_topline = $13
.label y = $12
.label xd = $1a
.label xds = $49
.label ds = $4b
.label d = $50
.label x = $18
.label xb = $19
// [36] call init_squares
// [106] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
init_squares_from_init_dist_screen:
jsr init_squares
jmp __b11
// init_dist_screen::@11
__b11:
// [37] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1
lda.z screen
clc
adc #<$28*$18
sta.z screen_bottomline
lda.z screen+1
adc #>$28*$18
sta.z screen_bottomline+1
// [38] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
__b1_from___b11:
// [38] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy
// [38] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy
// [38] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
jmp __b1
// [38] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
__b1_from___b7:
// [38] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy
// [38] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy
// [38] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy
jmp __b1
// init_dist_screen::@1
__b1:
// [39] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z y
asl
sta.z y2
// [40] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuz1_ge_vbuc1_then_la1
lda.z y2
cmp #$18
bcs __b2
jmp __b3
// init_dist_screen::@3
__b3:
// [41] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuz1=vbuc1_minus_vbuz2
lda #$18
sec
sbc.z y2
sta.z __5
// [42] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
__b4_from___b2:
__b4_from___b3:
// [42] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy
jmp __b4
// init_dist_screen::@4
__b4:
// [43] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2
lda.z yd
sta.z sqr.val
// [44] call sqr
// [119] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
sqr_from___b4:
// [119] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy
jsr sqr
// [45] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2
lda.z sqr.return
sta.z sqr.return_1
lda.z sqr.return+1
sta.z sqr.return_1+1
jmp __b12
// init_dist_screen::@12
__b12:
// [46] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2
lda.z sqr.return_1
sta.z yds
lda.z sqr.return_1+1
sta.z yds+1
// [47] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
__b5_from___b12:
// [47] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [47] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1
lda #0
sta.z x
jmp __b5
// init_dist_screen::@5
__b5:
// [48] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b6
jmp __b7
// init_dist_screen::@7
__b7:
// [49] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_topline
sta.z screen_topline
bcc !+
inc.z screen_topline+1
!:
// [50] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_bottomline
sbc #$28
sta.z screen_bottomline
lda.z screen_bottomline+1
sbc #0
sta.z screen_bottomline+1
// [51] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1
inc.z y
// [52] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1_from___b7
jmp __breturn
// init_dist_screen::@return
__breturn:
// [53] return
rts
// init_dist_screen::@6
__b6:
// [54] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z x
asl
sta.z x2
// [55] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuz1_ge_vbuc1_then_la1
lda.z x2
cmp #$27
bcs __b8
jmp __b9
// init_dist_screen::@9
__b9:
// [56] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuz1=vbuc1_minus_vbuz2
lda #$27
sec
sbc.z x2
sta.z __14
// [57] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10]
__b10_from___b8:
__b10_from___b9:
// [57] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy
jmp __b10
// init_dist_screen::@10
__b10:
// [58] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2
lda.z xd
sta.z sqr.val
// [59] call sqr
// [119] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
sqr_from___b10:
// [119] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy
jsr sqr
// [60] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2
lda.z sqr.return
sta.z sqr.return_2
lda.z sqr.return+1
sta.z sqr.return_2+1
jmp __b13
// init_dist_screen::@13
__b13:
// [61] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2
lda.z sqr.return_2
sta.z xds
lda.z sqr.return_2+1
sta.z xds+1
// [62] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz2_plus_vwuz3
lda.z xds
clc
adc.z yds
sta.z ds
lda.z xds+1
adc.z yds+1
sta.z ds+1
// [63] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 -- vwuz1=vwuz2
lda.z ds
sta.z sqrt.val
lda.z ds+1
sta.z sqrt.val+1
// [64] call sqrt
jsr sqrt
// [65] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2
lda.z sqrt.return
sta.z sqrt.return_1
jmp __b14
// init_dist_screen::@14
__b14:
// [66] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2
lda.z sqrt.return_1
sta.z d
// [67] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z d
ldy.z x
sta (screen_topline),y
// [68] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z d
ldy.z x
sta (screen_bottomline),y
// [69] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z d
ldy.z xb
sta (screen_topline),y
// [70] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z d
ldy.z xb
sta (screen_bottomline),y
// [71] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [72] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [47] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5]
__b5_from___b14:
// [47] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy
// [47] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy
jmp __b5
// init_dist_screen::@8
__b8:
// [73] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuz1=vbuz2_minus_vbuc1
lax.z x2
axs #$27
stx.z __16
jmp __b10_from___b8
// init_dist_screen::@2
__b2:
// [74] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuz1=vbuz2_minus_vbuc1
lax.z y2
axs #$18
stx.z __7
jmp __b4_from___b2
}
// init_angle_screen
// Populates 1000 bytes (a screen) with values representing the angle to the center.
// Utilizes symmetry around the center
// init_angle_screen(byte* zp($3f) screen)
init_angle_screen: {
.label __3 = $51
.label __4 = $52
.label __5 = $55
.label __7 = $60
.label __9 = $63
.label __10 = $64
.label __11 = $65
.label screen = $3f
.label screen_bottomline = $1e
.label xw = $53
.label yw = $56
.label angle_w = $5e
.label ang_w = $62
.label x = $20
.label xb = $21
.label screen_topline = $1c
.label y = $1b
// [75] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz2_plus_vwuc1
lda.z screen
clc
adc #<$28*$c
sta.z screen_bottomline
lda.z screen+1
adc #>$28*$c
sta.z screen_bottomline+1
// [76] (byte*) init_angle_screen::screen_topline#7 ← (byte*) init_angle_screen::screen_bottomline#0 -- pbuz1=pbuz2
lda.z screen_bottomline
sta.z screen_topline
lda.z screen_bottomline+1
sta.z screen_topline+1
// [77] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
__b1_from_init_angle_screen:
// [77] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy
// [77] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#7 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy
// [77] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
jmp __b1
// [77] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
__b1_from___b4:
// [77] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy
// [77] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy
// [77] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy
jmp __b1
// init_angle_screen::@1
__b1:
// [78] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
__b2_from___b1:
// [78] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [78] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1
lda #0
sta.z x
jmp __b2
// init_angle_screen::@2
__b2:
// [79] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b3
jmp __b4
// init_angle_screen::@4
__b4:
// [80] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_topline
sbc #$28
sta.z screen_topline
lda.z screen_topline+1
sbc #0
sta.z screen_topline+1
// [81] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_bottomline
sta.z screen_bottomline
bcc !+
inc.z screen_bottomline+1
!:
// [82] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1
inc.z y
// [83] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1_from___b4
jmp __breturn
// init_angle_screen::@return
__breturn:
// [84] return
rts
// init_angle_screen::@3
__b3:
// [85] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z x
asl
sta.z __3
// [86] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuz1=vbuc1_minus_vbuz2
lda #$27
sec
sbc.z __3
sta.z __4
// [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1
lda.z __4
ldy #0
sta.z xw+1
sty.z xw
// [88] (byte~) init_angle_screen::$5 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z y
asl
sta.z __5
// [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$5 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1
lda.z __5
ldy #0
sta.z yw+1
sty.z yw
// [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 -- vwsz1=vwsz2
lda.z xw
sta.z atan2_16.x
lda.z xw+1
sta.z atan2_16.x+1
// [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 -- vwsz1=vwsz2
lda.z yw
sta.z atan2_16.y
lda.z yw+1
sta.z atan2_16.y+1
// [92] call atan2_16
jsr atan2_16
// [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2
lda.z atan2_16.return
sta.z atan2_16.return_1
lda.z atan2_16.return+1
sta.z atan2_16.return_1+1
jmp __b5
// init_angle_screen::@5
__b5:
// [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2
lda.z atan2_16.return_1
sta.z angle_w
lda.z atan2_16.return_1+1
sta.z angle_w+1
// [95] (word~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1
lda #$80
clc
adc.z angle_w
sta.z __7
lda #0
adc.z angle_w+1
sta.z __7+1
// [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$7 -- vbuz1=_hi_vwuz2
lda.z __7+1
sta.z ang_w
// [97] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z ang_w
ldy.z xb
sta (screen_bottomline),y
// [98] (byte~) init_angle_screen::$9 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2
lda.z ang_w
eor #$ff
clc
adc #1
sta.z __9
// [99] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$9 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z __9
ldy.z xb
sta (screen_topline),y
// [100] (byte~) init_angle_screen::$10 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2
lax.z ang_w
axs #-[$80]
stx.z __10
// [101] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$10 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z __10
ldy.z x
sta (screen_topline),y
// [102] (byte~) init_angle_screen::$11 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2
lda #$80
sec
sbc.z ang_w
sta.z __11
// [103] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$11 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z __11
ldy.z x
sta (screen_bottomline),y
// [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [78] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
__b2_from___b5:
// [78] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy
// [78] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy
jmp __b2
}
// init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
.label __3 = $68
.label __4 = $69
.label squares = $25
.label sqr = $23
.label i = $22
// [107] call malloc
// [9] phi from init_squares to malloc [phi:init_squares->malloc]
malloc_from_init_squares:
// [9] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#2*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1
lda #<NUM_SQUARES*SIZEOF_WORD
sta.z malloc.size
lda #>NUM_SQUARES*SIZEOF_WORD
sta.z malloc.size+1
// [9] phi (byte*) heap_head#13 = (byte*) heap_head#0 [phi:init_squares->malloc#1] -- register_copy
jsr malloc
jmp __b3
// init_squares::@3
__b3:
// [108] (void*) SQUARES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SQUARES
lda.z malloc.mem+1
sta.z SQUARES+1
// [109] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#0 -- pwuz1=pwuz2
lda.z SQUARES
sta.z squares
lda.z SQUARES+1
sta.z squares+1
// [110] phi from init_squares::@3 to init_squares::@1 [phi:init_squares::@3->init_squares::@1]
__b1_from___b3:
// [110] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@3->init_squares::@1#0] -- register_copy
// [110] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@3->init_squares::@1#1] -- vwuz1=vwuc1
lda #<0
sta.z sqr
lda #>0
sta.z sqr+1
// [110] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@3->init_squares::@1#2] -- vbuz1=vbuc1
lda #0
sta.z i
jmp __b1
// init_squares::@1
__b1:
// [111] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#2) goto init_squares::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z i
cmp #NUM_SQUARES
bcc __b2
jmp __breturn
// init_squares::@return
__breturn:
// [112] return
rts
// init_squares::@2
__b2:
// [113] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2
ldy #0
lda.z sqr
sta (squares),y
iny
lda.z sqr+1
sta (squares),y
// [114] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1
lda #SIZEOF_WORD
clc
adc.z squares
sta.z squares
bcc !+
inc.z squares+1
!:
// [115] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z i
asl
sta.z __3
// [116] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1
ldy.z __3
iny
sty.z __4
// [117] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuz2
lda.z __4
clc
adc.z sqr
sta.z sqr
bcc !+
inc.z sqr+1
!:
// [118] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1
inc.z i
// [110] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
__b1_from___b2:
// [110] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@2->init_squares::@1#0] -- register_copy
// [110] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@2->init_squares::@1#1] -- register_copy
// [110] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@2->init_squares::@1#2] -- register_copy
jmp __b1
}
// sqr
// Find the square of a char value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte zp($27) val)
sqr: {
.label __0 = $6a
.label return = $6b
.label val = $27
.label return_1 = $42
.label return_2 = $47
// [120] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z val
asl
sta.z __0
// [121] (word) sqr::return#0 ← *((word*)(void*) SQUARES#0 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuz3
ldy.z __0
lda (SQUARES),y
sta.z return
iny
lda (SQUARES),y
sta.z return+1
jmp __breturn
// sqr::@return
__breturn:
// [122] return
rts
}
// sqrt
// Find the (integer) square root of a unsigned int value
// If the square is not an integer then it returns the largest integer N where N*N <= val
// Uses a table of squares that must be initialized by calling init_squares()
// sqrt(word zp($4d) val)
sqrt: {
.label __1 = $75
.label __2 = $73
.label found = $71
.label return = $77
.label val = $4d
.label return_1 = $4f
// [123] (word) bsearch16u::key#0 ← (word) sqrt::val#0 -- vwuz1=vwuz2
lda.z val
sta.z bsearch16u.key
lda.z val+1
sta.z bsearch16u.key+1
// [124] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#0 -- pwuz1=pwuz2
lda.z SQUARES
sta.z bsearch16u.items
lda.z SQUARES+1
sta.z bsearch16u.items+1
// [125] call bsearch16u
// [175] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
bsearch16u_from_sqrt:
jsr bsearch16u
// [126] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2
lda.z bsearch16u.return
sta.z bsearch16u.return_1
lda.z bsearch16u.return+1
sta.z bsearch16u.return_1+1
jmp __b1
// sqrt::@1
__b1:
// [127] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2
lda.z bsearch16u.return_1
sta.z found
lda.z bsearch16u.return_1+1
sta.z found+1
// [128] (word~) sqrt::$2 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#0 -- vwuz1=pwuz2_minus_pwuz3
lda.z found
sec
sbc.z SQUARES
sta.z __2
lda.z found+1
sbc.z SQUARES+1
sta.z __2+1
// [129] (word~) sqrt::$1 ← (word~) sqrt::$2 >> (byte) 1 -- vwuz1=vwuz2_ror_1
lda.z __2+1
lsr
sta.z __1+1
lda.z __2
ror
sta.z __1
// [130] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2
lda.z __1
sta.z return
jmp __breturn
// sqrt::@return
__breturn:
// [131] return
rts
}
// atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($58) x, signed word zp($5a) y)
atan2_16: {
.label __2 = $28
.label __7 = $2a
.label __22 = $79
.label __23 = $78
.label yi = $28
.label xi = $2a
.label angle = $2f
.label xd = $34
.label yd = $32
.label shift = $31
.label angle_1 = $2d
.label i = $2c
.label return = $2f
.label x = $58
.label y = $5a
.label return_1 = $5c
// [132] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b1
jmp __b2
// atan2_16::@2
__b2:
// [133] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z y
sta.z __2
lda #0
sbc.z y+1
sta.z __2+1
// [134] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
__b3_from___b1:
__b3_from___b2:
// [134] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy
jmp __b3
// atan2_16::@3
__b3:
// [135] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b4
jmp __b5
// atan2_16::@5
__b5:
// [136] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z x
sta.z __7
lda #0
sbc.z x+1
sta.z __7+1
// [137] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
__b6_from___b4:
__b6_from___b5:
// [137] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
jmp __b6
// atan2_16::@6
__b6:
// [138] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
__b10_from___b6:
// [138] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
lda #<0
sta.z angle_1
lda #>0
sta.z angle_1+1
// [138] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1
lda #0
sta.z i
// [138] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
// [138] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@10
__b10:
// [139] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
lda.z yi+1
bne __b11
lda.z yi
bne __b11
// [140] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
__b12_from___b10:
__b12_from___b19:
// [140] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
jmp __b12
// atan2_16::@12
__b12:
// [141] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1
lda.z angle_1+1
lsr
sta.z angle+1
lda.z angle_1
ror
sta.z angle
// [142] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b7_from___b12
jmp __b21
// atan2_16::@21
__b21:
// [143] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
sec
lda #<$8000
sbc.z angle
sta.z angle
lda #>$8000
sbc.z angle+1
sta.z angle+1
// [144] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
__b7_from___b12:
__b7_from___b21:
// [144] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
jmp __b7
// atan2_16::@7
__b7:
// [145] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b8_from___b7
jmp __b9
// atan2_16::@9
__b9:
// [146] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1
sec
lda #0
sbc.z angle
sta.z angle
lda #0
sbc.z angle+1
sta.z angle+1
// [147] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
__b8_from___b7:
__b8_from___b9:
// [147] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy
jmp __b8
// atan2_16::@8
__b8:
jmp __breturn
// atan2_16::@return
__breturn:
// [148] return
rts
// atan2_16::@11
__b11:
// [149] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2
lda.z i
sta.z shift
// [150] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2
lda.z xi
sta.z xd
lda.z xi+1
sta.z xd+1
// [151] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2
lda.z yi
sta.z yd
lda.z yi+1
sta.z yd+1
// [152] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
__b13_from___b11:
__b13_from___b14:
// [152] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
// [152] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
// [152] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
jmp __b13
// atan2_16::@13
__b13:
// [153] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuz1_ge_vbuc1_then_la1
lda.z shift
cmp #2
bcs __b14
jmp __b15
// atan2_16::@15
__b15:
// [154] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuz1_then_la1
lda #0
cmp.z shift
beq __b17_from___b15
jmp __b16
// atan2_16::@16
__b16:
// [155] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// [156] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [157] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
__b17_from___b15:
__b17_from___b16:
// [157] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
// [157] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
jmp __b17
// atan2_16::@17
__b17:
// [158] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
lda.z yi+1
bpl __b18
jmp __b20
// atan2_16::@20
__b20:
// [159] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z xi
sec
sbc.z yd
sta.z xi
lda.z xi+1
sbc.z yd+1
sta.z xi+1
// [160] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z yi
clc
adc.z xd
sta.z yi
lda.z yi+1
adc.z xd+1
sta.z yi+1
// [161] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z i
asl
sta.z __23
// [162] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2
ldy.z __23
sec
lda.z angle_1
sbc CORDIC_ATAN2_ANGLES_16,y
sta.z angle_1
lda.z angle_1+1
sbc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle_1+1
// [163] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
__b19_from___b18:
__b19_from___b20:
// [163] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
// [163] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
// [163] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy
jmp __b19
// atan2_16::@19
__b19:
// [164] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1
inc.z i
// [165] if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1
lda #CORDIC_ITERATIONS_16-1+1
cmp.z i
beq __b12_from___b19
// [138] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
__b10_from___b19:
// [138] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
// [138] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
// [138] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
// [138] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@18
__b18:
// [166] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z xi
clc
adc.z yd
sta.z xi
lda.z xi+1
adc.z yd+1
sta.z xi+1
// [167] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z yi
sec
sbc.z xd
sta.z yi
lda.z yi+1
sbc.z xd+1
sta.z yi+1
// [168] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z i
asl
sta.z __22
// [169] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2
ldy.z __22
clc
lda.z angle_1
adc CORDIC_ATAN2_ANGLES_16,y
sta.z angle_1
lda.z angle_1+1
adc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle_1+1
jmp __b19_from___b18
// atan2_16::@14
__b14:
// [170] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// [171] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [172] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuz1=vbuz1_minus_2
dec.z shift
dec.z shift
jmp __b13_from___b14
// atan2_16::@4
__b4:
// [173] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2
lda.z x
sta.z xi
lda.z x+1
sta.z xi+1
jmp __b6_from___b4
// atan2_16::@1
__b1:
// [174] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2
lda.z y
sta.z yi
lda.z y+1
sta.z yi+1
jmp __b3_from___b1
}
// bsearch16u
// Searches an array of nitems unsigned ints, the initial member of which is pointed to by base, for a member that matches the value key.
// - key - The value to look for
// - items - Pointer to the start of the array to search in
// - num - The number of items in the array
// Returns pointer to an entry in the array that matches the search key
// bsearch16u(word zp($6d) key, word* zp($36) items, byte zp($38) num)
bsearch16u: {
.label __2 = $36
.label __6 = $7a
.label __14 = $7b
.label pivot = $7c
.label result = $7e
.label return = $36
.label num = $38
.label items = $36
.label key = $6d
.label return_1 = $6f
// [176] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
__b3_from_bsearch16u:
// [176] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy
// [176] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#2 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1
lda #NUM_SQUARES
sta.z num
jmp __b3
// bsearch16u::@3
__b3:
// [177] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1
lda.z num
bne __b4
jmp __b5
// bsearch16u::@5
__b5:
// [178] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1
ldy #1
lda (items),y
cmp.z key+1
bne !+
dey
lda (items),y
cmp.z key
beq __b2_from___b5
!:
bcc __b2_from___b5
jmp __b1
// bsearch16u::@1
__b1:
// [179] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vbuc1
sec
lda.z __2
sbc #1*SIZEOF_WORD
sta.z __2
lda.z __2+1
sbc #0
sta.z __2+1
// [180] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
__b2_from___b1:
__b2_from___b5:
// [180] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy
jmp __b2
// bsearch16u::@2
__b2:
// [181] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
__breturn_from___b2:
__breturn_from___b8:
// [181] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy
jmp __breturn
// bsearch16u::@return
__breturn:
// [182] return
rts
// bsearch16u::@4
__b4:
// [183] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1
lda.z num
lsr
sta.z __6
// [184] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda.z __6
asl
sta.z __14
// [185] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$14 -- pwuz1=pwuz2_plus_vbuz3
lda.z __14
clc
adc.z items
sta.z pivot
lda #0
adc.z items+1
sta.z pivot+1
// [186] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3
sec
lda.z key
ldy #0
sbc (pivot),y
sta.z result
lda.z key+1
iny
sbc (pivot),y
sta.z result+1
// [187] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1
lda.z result+1
bne __b6
lda.z result
bne __b6
jmp __b8
// bsearch16u::@8
__b8:
// [188] (word*) bsearch16u::return#7 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2
lda.z pivot
sta.z return
lda.z pivot+1
sta.z return+1
jmp __breturn_from___b8
// bsearch16u::@6
__b6:
// [189] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1
lda.z result+1
bmi __b7_from___b6
bne !+
lda.z result
beq __b7_from___b6
!:
jmp __b9
// bsearch16u::@9
__b9:
// [190] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1
lda #1*SIZEOF_WORD
clc
adc.z pivot
sta.z items
lda #0
adc.z pivot+1
sta.z items+1
// [191] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1
dec.z num
// [192] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
__b7_from___b6:
__b7_from___b9:
// [192] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy
// [192] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy
jmp __b7
// bsearch16u::@7
__b7:
// [193] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1
lsr.z num
// [176] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
__b3_from___b7:
// [176] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy
// [176] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy
jmp __b3
}
// File Data
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
CORDIC_ATAN2_ANGLES_16:
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
REGISTER UPLIFT POTENTIAL REGISTERS
2020-06-27 19:18:00 +00:00
Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#0 ] ( [ SCREEN_DIST#0 heap_head#0 ] { { heap_head#0 = heap_head#13 } } ) always clobbers reg byte a
Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 ] { } ) always clobbers reg byte a
Statement [10] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] { } malloc:4 [ SCREEN_DIST#0 malloc::mem#0 ] { { heap_head#0 = heap_head#13 } } main:7::init_dist_screen:14::init_squares:36::malloc:107 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] { { heap_head#0 = heap_head#13 } } ) always clobbers reg byte a
Statement [11] (byte*) heap_head#0 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#0 ] ( malloc:2 [ malloc::mem#0 heap_head#0 ] { } malloc:4 [ SCREEN_DIST#0 malloc::mem#0 heap_head#0 ] { { heap_head#0 = heap_head#13 } } main:7::init_dist_screen:14::init_squares:36::malloc:107 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#0 ] { { heap_head#0 = heap_head#13 } } ) always clobbers reg byte a
Statement [13] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 init_dist_screen::screen#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 init_dist_screen::screen#0 ] { } ) always clobbers reg byte a
Statement [15] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] { } ) always clobbers reg byte a
Statement [17] (byte*) main::dist#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 ] { } ) always clobbers reg byte a
Statement [18] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 main::angle#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 main::angle#0 ] { } ) always clobbers reg byte a
Statement [20] if(*((byte*) main::fill#2)==(const nomodify byte) FILL_CHAR) goto main::@10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 ] { } ) always clobbers reg byte a reg byte y
Statement [21] (word) main::dist_angle#0 ← *((byte*) main::dist#2) w= *((byte*) main::angle#2) [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] { } ) always clobbers reg byte a reg byte y
Statement [22] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@11 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] { } ) always clobbers reg byte a
Statement [23] (byte*) main::min_fill#10 ← (byte*) main::fill#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::dist_angle#0 main::min_fill#10 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::dist_angle#0 main::min_fill#10 ] { } ) always clobbers reg byte a
Statement [28] if((byte*) main::fill#1<(const nomodify byte*) SCREEN_FILL+(word) $3e8) goto main::@9 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_fill#2 main::min_dist_angle#3 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_fill#2 main::min_dist_angle#3 ] { } ) always clobbers reg byte a
Statement [29] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::min_fill#2 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::min_fill#2 ] { } ) always clobbers reg byte a
Statement [31] *((byte*) main::min_fill#2) ← (const nomodify byte) FILL_CHAR [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a reg byte y
Statement [32] (word) main::min_dist_angle#6 ← (word) main::min_dist_angle#3 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_dist_angle#6 main::min_fill#2 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_dist_angle#6 main::min_fill#2 ] { } ) always clobbers reg byte a
Statement [33] (word) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#8 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#8 ] { } ) always clobbers reg byte a
Statement [34] (word) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] { } ) always clobbers reg byte a
Statement [37] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [39] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:18 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Statement [41] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [45] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#0 ] { { sqr::val#0 = sqr::val#2 init_dist_screen::yd#0 } { sqr::return#0 = sqr::return#2 } } ) always clobbers reg byte a
Statement [46] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [49] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [50] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [54] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:24 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:25 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Statement [56] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [60] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#0 ] { { sqr::val#1 = sqr::val#2 init_dist_screen::xd#0 } { sqr::return#0 = sqr::return#3 } } ) always clobbers reg byte a
Statement [61] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [62] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [63] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [75] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_bottomline#0 ] { } ) always clobbers reg byte a
Statement [76] (byte*) init_angle_screen::screen_topline#7 ← (byte*) init_angle_screen::screen_bottomline#0 [ init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] { } ) always clobbers reg byte a
Statement [80] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Statement [81] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] { } ) always clobbers reg byte a
Statement [85] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [86] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [88] (byte~) init_angle_screen::$5 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$5 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Statement [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] { } ) always clobbers reg byte a
Statement [95] (word~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] { } ) always clobbers reg byte a
Statement [97] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:98 [ init_angle_screen::ang_w#0 ]
Statement [98] (byte~) init_angle_screen::$9 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:98 [ init_angle_screen::ang_w#0 ]
Statement [99] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$9 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [100] (byte~) init_angle_screen::$10 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] { } ) always clobbers reg byte a
Statement [101] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [102] (byte~) init_angle_screen::$11 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] { } ) always clobbers reg byte a
Statement [103] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] { } ) always clobbers reg byte y
Statement [108] (void*) SQUARES#0 ← (void*)(byte*) malloc::mem#0 [ SQUARES#0 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [109] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#0 [ SQUARES#0 init_squares::squares#0 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::squares#0 ] { } ) always clobbers reg byte a
Statement [113] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp[1]:34 [ init_squares::i#2 init_squares::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:34 [ init_squares::i#2 init_squares::i#1 ]
Statement [114] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] { } ) always clobbers reg byte a
Statement [115] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] { } ) always clobbers reg byte a
Statement [117] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#0 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] { } ) always clobbers reg byte a
Statement [120] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#0 sqr::$0 ] ( main:7::init_dist_screen:14::sqr:44 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#0 sqr::$0 ] { { sqr::val#0 = sqr::val#2 init_dist_screen::yd#0 } { sqr::return#0 = sqr::return#2 } } main:7::init_dist_screen:14::sqr:59 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqr::$0 ] { { sqr::val#1 = sqr::val#2 init_dist_screen::xd#0 } { sqr::return#0 = sqr::return#3 } } ) always clobbers reg byte a
Statement [121] (word) sqr::return#0 ← *((word*)(void*) SQUARES#0 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#0 ] ( main:7::init_dist_screen:14::sqr:44 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#0 ] { { sqr::val#0 = sqr::val#2 init_dist_screen::yd#0 } { sqr::return#0 = sqr::return#2 } } main:7::init_dist_screen:14::sqr:59 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#0 ] { { sqr::val#1 = sqr::val#2 init_dist_screen::xd#0 } { sqr::return#0 = sqr::return#3 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:18 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:24 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:25 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Statement [123] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ SQUARES#0 bsearch16u::key#0 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [124] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#0 [ SQUARES#0 bsearch16u::key#0 bsearch16u::items#1 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::items#1 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [126] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#0 bsearch16u::return#3 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::return#3 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [127] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#0 sqrt::found#0 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqrt::found#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [128] (word~) sqrt::$2 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#0 [ SQUARES#0 sqrt::$2 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqrt::$2 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [129] (word~) sqrt::$1 ← (word~) sqrt::$2 >> (byte) 1 [ SQUARES#0 sqrt::$1 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqrt::$1 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [130] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#0 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [132] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [133] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [135] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [136] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [139] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:44 [ atan2_16::i#2 atan2_16::i#1 ]
Statement [141] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [142] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [143] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [145] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [146] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [150] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:49 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Statement [151] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [155] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [156] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [158] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [159] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [160] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [161] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [162] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [166] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [167] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [168] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [169] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [170] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [171] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [173] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [174] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [178] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::items#2 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a reg byte y
Statement [179] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::$2 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [183] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Statement [184] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$14 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$14 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [185] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$14 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [186] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Statement [187] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [188] (word*) bsearch16u::return#7 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#7 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::return#7 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [189] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [190] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
2020-06-27 19:18:00 +00:00
Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#0 ] ( [ SCREEN_DIST#0 heap_head#0 ] { { heap_head#0 = heap_head#13 } } ) always clobbers reg byte a
Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 ] { } ) always clobbers reg byte a
Statement [10] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] { } malloc:4 [ SCREEN_DIST#0 malloc::mem#0 ] { { heap_head#0 = heap_head#13 } } main:7::init_dist_screen:14::init_squares:36::malloc:107 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] { { heap_head#0 = heap_head#13 } } ) always clobbers reg byte a
Statement [11] (byte*) heap_head#0 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#0 ] ( malloc:2 [ malloc::mem#0 heap_head#0 ] { } malloc:4 [ SCREEN_DIST#0 malloc::mem#0 heap_head#0 ] { { heap_head#0 = heap_head#13 } } main:7::init_dist_screen:14::init_squares:36::malloc:107 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#0 ] { { heap_head#0 = heap_head#13 } } ) always clobbers reg byte a
Statement [13] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 init_dist_screen::screen#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 init_dist_screen::screen#0 ] { } ) always clobbers reg byte a
Statement [15] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] { } ) always clobbers reg byte a
Statement [17] (byte*) main::dist#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 ] { } ) always clobbers reg byte a
Statement [18] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 main::angle#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 main::angle#0 ] { } ) always clobbers reg byte a
Statement [20] if(*((byte*) main::fill#2)==(const nomodify byte) FILL_CHAR) goto main::@10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 ] { } ) always clobbers reg byte a reg byte y
Statement [21] (word) main::dist_angle#0 ← *((byte*) main::dist#2) w= *((byte*) main::angle#2) [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] { } ) always clobbers reg byte a reg byte y
Statement [22] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@11 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] { } ) always clobbers reg byte a
Statement [23] (byte*) main::min_fill#10 ← (byte*) main::fill#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::dist_angle#0 main::min_fill#10 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::dist_angle#0 main::min_fill#10 ] { } ) always clobbers reg byte a
Statement [28] if((byte*) main::fill#1<(const nomodify byte*) SCREEN_FILL+(word) $3e8) goto main::@9 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_fill#2 main::min_dist_angle#3 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_fill#2 main::min_dist_angle#3 ] { } ) always clobbers reg byte a
Statement [29] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::min_fill#2 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::min_fill#2 ] { } ) always clobbers reg byte a
Statement [31] *((byte*) main::min_fill#2) ← (const nomodify byte) FILL_CHAR [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a reg byte y
Statement [32] (word) main::min_dist_angle#6 ← (word) main::min_dist_angle#3 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_dist_angle#6 main::min_fill#2 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_dist_angle#6 main::min_fill#2 ] { } ) always clobbers reg byte a
Statement [33] (word) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#8 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#8 ] { } ) always clobbers reg byte a
Statement [34] (word) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] { } ) always clobbers reg byte a
Statement [37] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [39] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [41] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [45] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#0 ] { { sqr::val#0 = sqr::val#2 init_dist_screen::yd#0 } { sqr::return#0 = sqr::return#2 } } ) always clobbers reg byte a
Statement [46] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [49] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [50] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [54] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [56] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [60] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#0 ] { { sqr::val#1 = sqr::val#2 init_dist_screen::xd#0 } { sqr::return#0 = sqr::return#3 } } ) always clobbers reg byte a
Statement [61] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [62] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [63] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [67] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:80 [ init_dist_screen::d#0 ]
Statement [68] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] { } ) always clobbers reg byte y
Statement [69] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] { } ) always clobbers reg byte y
Statement [70] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 ] { } ) always clobbers reg byte y
Statement [75] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_bottomline#0 ] { } ) always clobbers reg byte a
Statement [76] (byte*) init_angle_screen::screen_topline#7 ← (byte*) init_angle_screen::screen_bottomline#0 [ init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] { } ) always clobbers reg byte a
Statement [80] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a
Statement [81] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] { } ) always clobbers reg byte a
Statement [85] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [86] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Statement [88] (byte~) init_angle_screen::$5 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$5 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Statement [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] { } ) always clobbers reg byte a
Statement [95] (word~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] { } ) always clobbers reg byte a
Statement [97] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte a reg byte y
Statement [98] (byte~) init_angle_screen::$9 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] { } ) always clobbers reg byte a
Statement [99] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$9 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [100] (byte~) init_angle_screen::$10 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] { } ) always clobbers reg byte a
Statement [101] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [102] (byte~) init_angle_screen::$11 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] { } ) always clobbers reg byte a
Statement [103] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] { } ) always clobbers reg byte y
Statement [108] (void*) SQUARES#0 ← (void*)(byte*) malloc::mem#0 [ SQUARES#0 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [109] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#0 [ SQUARES#0 init_squares::squares#0 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::squares#0 ] { } ) always clobbers reg byte a
Statement [113] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] { } ) always clobbers reg byte a reg byte y
Statement [114] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] { } ) always clobbers reg byte a
Statement [115] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] { } ) always clobbers reg byte a
Statement [117] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#0 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] { } ) always clobbers reg byte a
Statement [120] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#0 sqr::$0 ] ( main:7::init_dist_screen:14::sqr:44 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#0 sqr::$0 ] { { sqr::val#0 = sqr::val#2 init_dist_screen::yd#0 } { sqr::return#0 = sqr::return#2 } } main:7::init_dist_screen:14::sqr:59 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqr::$0 ] { { sqr::val#1 = sqr::val#2 init_dist_screen::xd#0 } { sqr::return#0 = sqr::return#3 } } ) always clobbers reg byte a
Statement [121] (word) sqr::return#0 ← *((word*)(void*) SQUARES#0 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#0 ] ( main:7::init_dist_screen:14::sqr:44 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#0 ] { { sqr::val#0 = sqr::val#2 init_dist_screen::yd#0 } { sqr::return#0 = sqr::return#2 } } main:7::init_dist_screen:14::sqr:59 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#0 ] { { sqr::val#1 = sqr::val#2 init_dist_screen::xd#0 } { sqr::return#0 = sqr::return#3 } } ) always clobbers reg byte a reg byte y
Statement [123] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ SQUARES#0 bsearch16u::key#0 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [124] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#0 [ SQUARES#0 bsearch16u::key#0 bsearch16u::items#1 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::items#1 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [126] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#0 bsearch16u::return#3 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::return#3 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [127] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#0 sqrt::found#0 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqrt::found#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [128] (word~) sqrt::$2 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#0 [ SQUARES#0 sqrt::$2 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqrt::$2 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [129] (word~) sqrt::$1 ← (word~) sqrt::$2 >> (byte) 1 [ SQUARES#0 sqrt::$1 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqrt::$1 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [130] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#0 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [132] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [133] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [135] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [136] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [139] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [141] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [142] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [143] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [145] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [146] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [150] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [151] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [155] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [156] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [158] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [159] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [160] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [161] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [162] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [166] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [167] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [168] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [169] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [170] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [171] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [173] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [174] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [178] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::items#2 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a reg byte y
Statement [179] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::$2 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [183] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [184] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$14 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$14 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [185] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$14 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [186] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a reg byte y
Statement [187] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [188] (word*) bsearch16u::return#7 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#7 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::return#7 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [189] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [190] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
2020-06-27 19:18:00 +00:00
Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#0 ] ( [ SCREEN_DIST#0 heap_head#0 ] { { heap_head#0 = heap_head#13 } } ) always clobbers reg byte a
Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 ] { } ) always clobbers reg byte a
Statement [10] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] { } malloc:4 [ SCREEN_DIST#0 malloc::mem#0 ] { { heap_head#0 = heap_head#13 } } main:7::init_dist_screen:14::init_squares:36::malloc:107 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] { { heap_head#0 = heap_head#13 } } ) always clobbers reg byte a
Statement [11] (byte*) heap_head#0 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#0 ] ( malloc:2 [ malloc::mem#0 heap_head#0 ] { } malloc:4 [ SCREEN_DIST#0 malloc::mem#0 heap_head#0 ] { { heap_head#0 = heap_head#13 } } main:7::init_dist_screen:14::init_squares:36::malloc:107 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#0 ] { { heap_head#0 = heap_head#13 } } ) always clobbers reg byte a
Statement [13] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 init_dist_screen::screen#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#0 init_dist_screen::screen#0 ] { } ) always clobbers reg byte a
Statement [15] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 ] { } ) always clobbers reg byte a
Statement [17] (byte*) main::dist#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 ] { } ) always clobbers reg byte a
Statement [18] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 main::angle#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::dist#0 main::angle#0 ] { } ) always clobbers reg byte a
Statement [20] if(*((byte*) main::fill#2)==(const nomodify byte) FILL_CHAR) goto main::@10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 ] { } ) always clobbers reg byte a reg byte y
Statement [21] (word) main::dist_angle#0 ← *((byte*) main::dist#2) w= *((byte*) main::angle#2) [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] { } ) always clobbers reg byte a reg byte y
Statement [22] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@11 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_dist_angle#2 main::min_fill#5 main::dist_angle#0 ] { } ) always clobbers reg byte a
Statement [23] (byte*) main::min_fill#10 ← (byte*) main::fill#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::dist_angle#0 main::min_fill#10 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::dist_angle#0 main::min_fill#10 ] { } ) always clobbers reg byte a
Statement [28] if((byte*) main::fill#1<(const nomodify byte*) SCREEN_FILL+(word) $3e8) goto main::@9 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_fill#2 main::min_dist_angle#3 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_fill#2 main::min_dist_angle#3 ] { } ) always clobbers reg byte a
Statement [29] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::min_fill#2 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::min_fill#2 ] { } ) always clobbers reg byte a
Statement [31] *((byte*) main::min_fill#2) ← (const nomodify byte) FILL_CHAR [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a reg byte y
Statement [32] (word) main::min_dist_angle#6 ← (word) main::min_dist_angle#3 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_dist_angle#6 main::min_fill#2 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#1 main::dist#1 main::angle#1 main::min_dist_angle#6 main::min_fill#2 ] { } ) always clobbers reg byte a
Statement [33] (word) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#8 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#8 ] { } ) always clobbers reg byte a
Statement [34] (word) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 main::fill#2 main::dist#2 main::angle#2 main::min_fill#5 main::min_dist_angle#7 ] { } ) always clobbers reg byte a
Statement [37] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [39] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::y2#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [41] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [45] (word) sqr::return#2 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#0 ] { { sqr::val#0 = sqr::val#2 init_dist_screen::yd#0 } { sqr::return#0 = sqr::return#2 } } ) always clobbers reg byte a
Statement [46] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [49] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [50] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [54] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [56] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [60] (word) sqr::return#3 ← (word) sqr::return#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#0 ] { { sqr::val#1 = sqr::val#2 init_dist_screen::xd#0 } { sqr::return#0 = sqr::return#3 } } ) always clobbers reg byte a
Statement [61] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [62] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [63] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [67] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] { } ) always clobbers reg byte y
Statement [68] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] { } ) always clobbers reg byte y
Statement [69] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#0 ] { } ) always clobbers reg byte y
Statement [70] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [ init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 ] ( main:7::init_dist_screen:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 ] { } ) always clobbers reg byte y
Statement [75] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_bottomline#0 ] { } ) always clobbers reg byte a
Statement [76] (byte*) init_angle_screen::screen_topline#7 ← (byte*) init_angle_screen::screen_bottomline#0 [ init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] { } ) always clobbers reg byte a
Statement [80] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a
Statement [81] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] { } ) always clobbers reg byte a
Statement [85] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [86] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Statement [88] (byte~) init_angle_screen::$5 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$5 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Statement [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] { } ) always clobbers reg byte a
Statement [95] (word~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] { } ) always clobbers reg byte a
Statement [97] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte a reg byte y
Statement [98] (byte~) init_angle_screen::$9 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] { } ) always clobbers reg byte a
Statement [99] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$9 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [100] (byte~) init_angle_screen::$10 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] { } ) always clobbers reg byte a
Statement [101] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [102] (byte~) init_angle_screen::$11 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] { } ) always clobbers reg byte a
Statement [103] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:16 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] { } ) always clobbers reg byte y
Statement [108] (void*) SQUARES#0 ← (void*)(byte*) malloc::mem#0 [ SQUARES#0 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 ] { } ) always clobbers reg byte a
Statement [109] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#0 [ SQUARES#0 init_squares::squares#0 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::squares#0 ] { } ) always clobbers reg byte a
Statement [113] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#2 ] { } ) always clobbers reg byte a reg byte y
Statement [114] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 ] { } ) always clobbers reg byte a
Statement [115] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] { } ) always clobbers reg byte a
Statement [117] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#0 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:14::init_squares:36 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#0 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] { } ) always clobbers reg byte a
Statement [120] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#0 sqr::$0 ] ( main:7::init_dist_screen:14::sqr:44 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#0 sqr::$0 ] { { sqr::val#0 = sqr::val#2 init_dist_screen::yd#0 } { sqr::return#0 = sqr::return#2 } } main:7::init_dist_screen:14::sqr:59 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqr::$0 ] { { sqr::val#1 = sqr::val#2 init_dist_screen::xd#0 } { sqr::return#0 = sqr::return#3 } } ) always clobbers reg byte a
Statement [121] (word) sqr::return#0 ← *((word*)(void*) SQUARES#0 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#0 ] ( main:7::init_dist_screen:14::sqr:44 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#0 ] { { sqr::val#0 = sqr::val#2 init_dist_screen::yd#0 } { sqr::return#0 = sqr::return#2 } } main:7::init_dist_screen:14::sqr:59 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#0 ] { { sqr::val#1 = sqr::val#2 init_dist_screen::xd#0 } { sqr::return#0 = sqr::return#3 } } ) always clobbers reg byte a reg byte y
Statement [123] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ SQUARES#0 bsearch16u::key#0 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [124] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#0 [ SQUARES#0 bsearch16u::key#0 bsearch16u::items#1 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::items#1 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [126] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#0 bsearch16u::return#3 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::return#3 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [127] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#0 sqrt::found#0 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqrt::found#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [128] (word~) sqrt::$2 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#0 [ SQUARES#0 sqrt::$2 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqrt::$2 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [129] (word~) sqrt::$1 ← (word~) sqrt::$2 >> (byte) 1 [ SQUARES#0 sqrt::$1 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 sqrt::$1 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [130] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#0 ] ( main:7::init_dist_screen:14::sqrt:64 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 } { sqrt::return#0 = sqrt::return#2 } } ) always clobbers reg byte a
Statement [132] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [133] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [135] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [136] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [139] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [141] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [142] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [143] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [145] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [146] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [150] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [151] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [155] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [156] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [158] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [159] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [160] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [161] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [162] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [166] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [167] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [168] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [169] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [170] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [171] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [173] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [174] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:16::atan2_16:92 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [178] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::items#2 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a reg byte y
Statement [179] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::$2 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [183] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [184] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$14 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$14 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [185] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$14 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [186] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a reg byte y
Statement [187] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [188] (word*) bsearch16u::return#7 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#7 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::return#7 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [189] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Statement [190] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:7::init_dist_screen:14::sqrt:64::bsearch16u:125 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::yds#0 init_dist_screen::x#2 init_dist_screen::xb#2 SQUARES#0 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] { { sqrt::val#0 = init_dist_screen::ds#0 bsearch16u::key#0 } { sqrt::return#0 = sqrt::return#2 } { bsearch16u::return#1 = bsearch16u::return#3 } } ) always clobbers reg byte a
Potential registers zp[2]:2 [ heap_head#13 heap_head#0 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ malloc::size#3 ] : zp[2]:4 ,
Potential registers zp[2]:6 [ main::fill#2 main::fill#1 ] : zp[2]:6 ,
Potential registers zp[2]:8 [ main::dist#2 main::dist#0 main::dist#1 ] : zp[2]:8 ,
Potential registers zp[2]:10 [ main::angle#2 main::angle#0 main::angle#1 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ main::min_dist_angle#2 main::min_dist_angle#6 ] : zp[2]:12 ,
Potential registers zp[2]:14 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] : zp[2]:14 ,
Potential registers zp[2]:16 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] : zp[2]:16 ,
Potential registers zp[1]:18 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp[1]:18 , reg byte x ,
Potential registers zp[2]:19 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] : zp[2]:19 ,
Potential registers zp[2]:21 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] : zp[2]:21 ,
Potential registers zp[1]:23 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp[1]:23 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:24 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp[1]:24 , reg byte x ,
Potential registers zp[1]:25 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp[1]:25 , reg byte x ,
Potential registers zp[1]:26 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] : zp[1]:26 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp[1]:27 , reg byte x ,
Potential registers zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] : zp[2]:28 ,
Potential registers zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp[2]:30 ,
Potential registers zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp[1]:32 , reg byte x ,
Potential registers zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp[1]:33 , reg byte x ,
Potential registers zp[1]:34 [ init_squares::i#2 init_squares::i#1 ] : zp[1]:34 , reg byte x ,
Potential registers zp[2]:35 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp[2]:35 ,
Potential registers zp[2]:37 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp[2]:37 ,
Potential registers zp[1]:39 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp[1]:39 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:40 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp[2]:40 ,
Potential registers zp[2]:42 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp[2]:42 ,
Potential registers zp[1]:44 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:44 , reg byte x , reg byte y ,
Potential registers zp[2]:45 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:45 ,
Potential registers zp[2]:47 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] : zp[2]:47 ,
Potential registers zp[1]:49 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:49 , reg byte x , reg byte y ,
Potential registers zp[2]:50 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:50 ,
Potential registers zp[2]:52 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:52 ,
Potential registers zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ] : zp[2]:54 ,
Potential registers zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp[1]:56 , reg byte x ,
Potential registers zp[2]:57 [ SCREEN_DIST#0 ] : zp[2]:57 ,
Potential registers zp[2]:59 [ SCREEN_ANGLE#0 ] : zp[2]:59 ,
Potential registers zp[2]:61 [ malloc::mem#0 ] : zp[2]:61 ,
Potential registers zp[2]:63 [ init_angle_screen::screen#0 ] : zp[2]:63 ,
Potential registers zp[1]:65 [ init_dist_screen::y2#0 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:66 [ sqr::return#2 ] : zp[2]:66 ,
Potential registers zp[2]:68 [ init_dist_screen::yds#0 ] : zp[2]:68 ,
Potential registers zp[1]:70 [ init_dist_screen::x2#0 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:71 [ sqr::return#3 ] : zp[2]:71 ,
Potential registers zp[2]:73 [ init_dist_screen::xds#0 ] : zp[2]:73 ,
Potential registers zp[2]:75 [ init_dist_screen::ds#0 ] : zp[2]:75 ,
Potential registers zp[2]:77 [ sqrt::val#0 ] : zp[2]:77 ,
Potential registers zp[1]:79 [ sqrt::return#2 ] : zp[1]:79 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:80 [ init_dist_screen::d#0 ] : zp[1]:80 , reg byte a , reg byte x ,
Potential registers zp[1]:81 [ init_angle_screen::$3 ] : zp[1]:81 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:82 [ init_angle_screen::$4 ] : zp[1]:82 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:83 [ init_angle_screen::xw#0 ] : zp[2]:83 ,
Potential registers zp[1]:85 [ init_angle_screen::$5 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:86 [ init_angle_screen::yw#0 ] : zp[2]:86 ,
Potential registers zp[2]:88 [ atan2_16::x#0 ] : zp[2]:88 ,
Potential registers zp[2]:90 [ atan2_16::y#0 ] : zp[2]:90 ,
Potential registers zp[2]:92 [ atan2_16::return#2 ] : zp[2]:92 ,
Potential registers zp[2]:94 [ init_angle_screen::angle_w#0 ] : zp[2]:94 ,
Potential registers zp[2]:96 [ init_angle_screen::$7 ] : zp[2]:96 ,
Potential registers zp[1]:98 [ init_angle_screen::ang_w#0 ] : zp[1]:98 , reg byte x ,
Potential registers zp[1]:99 [ init_angle_screen::$9 ] : zp[1]:99 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:100 [ init_angle_screen::$10 ] : zp[1]:100 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:101 [ init_angle_screen::$11 ] : zp[1]:101 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:102 [ SQUARES#0 ] : zp[2]:102 ,
Potential registers zp[1]:104 [ init_squares::$3 ] : zp[1]:104 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:105 [ init_squares::$4 ] : zp[1]:105 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:106 [ sqr::$0 ] : zp[1]:106 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:107 [ sqr::return#0 ] : zp[2]:107 ,
Potential registers zp[2]:109 [ bsearch16u::key#0 ] : zp[2]:109 ,
Potential registers zp[2]:111 [ bsearch16u::return#3 ] : zp[2]:111 ,
Potential registers zp[2]:113 [ sqrt::found#0 ] : zp[2]:113 ,
Potential registers zp[2]:115 [ sqrt::$2 ] : zp[2]:115 ,
Potential registers zp[2]:117 [ sqrt::$1 ] : zp[2]:117 ,
Potential registers zp[1]:119 [ sqrt::return#0 ] : zp[1]:119 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:120 [ atan2_16::$23 ] : zp[1]:120 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:121 [ atan2_16::$22 ] : zp[1]:121 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:122 [ bsearch16u::$6 ] : zp[1]:122 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:123 [ bsearch16u::$14 ] : zp[1]:123 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:124 [ bsearch16u::pivot#0 ] : zp[2]:124 ,
Potential registers zp[2]:126 [ bsearch16u::result#0 ] : zp[2]:126 ,
REGISTER UPLIFT SCOPES
Uplift Scope [bsearch16u] 7,555,555,563.11: zp[1]:56 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,842,027,790.06: zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ] 2,000,000,002: zp[1]:122 [ bsearch16u::$6 ] 2,000,000,002: zp[1]:123 [ bsearch16u::$14 ] 1,500,000,001.5: zp[2]:126 [ bsearch16u::result#0 ] 500,250,000.75: zp[2]:124 [ bsearch16u::pivot#0 ] 200,002: zp[2]:111 [ bsearch16u::return#3 ] 73,333.47: zp[2]:109 [ bsearch16u::key#0 ]
Uplift Scope [atan2_16] 2,866,666,670.58: zp[1]:49 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 2,060,000,008: zp[2]:50 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 1,733,333,338.67: zp[2]:52 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 752,480,960.9: zp[2]:45 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 269,093,340.68: zp[2]:40 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 227,373,342.67: zp[2]:42 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 200,000,002: zp[1]:120 [ atan2_16::$23 ] 200,000,002: zp[1]:121 [ atan2_16::$22 ] 170,833,335.04: zp[1]:44 [ atan2_16::i#2 atan2_16::i#1 ] 820,008.5: zp[2]:47 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] 20,002: zp[2]:92 [ atan2_16::return#2 ] 10,789.61: zp[2]:88 [ atan2_16::x#0 ] 10,250.12: zp[2]:90 [ atan2_16::y#0 ]
Uplift Scope [sqrt] 200,002: zp[2]:113 [ sqrt::found#0 ] 200,002: zp[2]:115 [ sqrt::$2 ] 110,002: zp[2]:77 [ sqrt::val#0 ] 100,001: zp[2]:117 [ sqrt::$1 ] 36,667.33: zp[1]:119 [ sqrt::return#0 ] 20,002: zp[1]:79 [ sqrt::return#2 ]
Uplift Scope [sqr] 200,002: zp[1]:106 [ sqr::$0 ] 133,007: zp[1]:39 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 27,750.75: zp[2]:107 [ sqr::return#0 ] 20,002: zp[2]:71 [ sqr::return#3 ] 2,002: zp[2]:66 [ sqr::return#2 ]
Uplift Scope [init_angle_screen] 21,820.36: zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 20,002: zp[1]:81 [ init_angle_screen::$3 ] 20,002: zp[1]:82 [ init_angle_screen::$4 ] 20,002: zp[1]:85 [ init_angle_screen::$5 ] 20,002: zp[2]:94 [ init_angle_screen::angle_w#0 ] 20,002: zp[2]:96 [ init_angle_screen::$7 ] 20,002: zp[1]:99 [ init_angle_screen::$9 ] 20,002: zp[1]:100 [ init_angle_screen::$10 ] 20,002: zp[1]:101 [ init_angle_screen::$11 ] 12,858.43: zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 8,334.17: zp[1]:98 [ init_angle_screen::ang_w#0 ] 5,000.5: zp[2]:86 [ init_angle_screen::yw#0 ] 3,333.67: zp[2]:83 [ init_angle_screen::xw#0 ] 1,963.15: zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 1,703.03: zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 1,623.54: zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] 112: zp[2]:63 [ init_angle_screen::screen#0 ]
Uplift Scope [init_dist_screen] 70,007: zp[1]:26 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 21,906.95: zp[1]:25 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 20,002: zp[1]:70 [ init_dist_screen::x2#0 ] 20,002: zp[2]:73 [ init_dist_screen::xds#0 ] 20,002: zp[2]:75 [ init_dist_screen::ds#0 ] 13,001.3: zp[1]:24 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 12,501.25: zp[1]:80 [ init_dist_screen::d#0 ] 7,007: zp[1]:23 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 2,002: zp[1]:65 [ init_dist_screen::y2#0 ] 1,589.82: zp[1]:18 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 1,539.18: zp[2]:21 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 1,244.53: zp[2]:19 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 478.35: zp[2]:68 [ init_dist_screen::yds#0 ]
Uplift Scope [init_squares] 25,716.86: zp[1]:34 [ init_squares::i#2 init_squares::i#1 ] 20,002: zp[1]:104 [ init_squares::$3 ] 20,002: zp[1]:105 [ init_squares::$4 ] 16,337.07: zp[2]:37 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 15,001.5: zp[2]:35 [ init_squares::sqr#2 init_squares::sqr#1 ]
Uplift Scope [main] 5,826: zp[2]:16 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] 3,088.93: zp[2]:14 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] 3,003: zp[2]:12 [ main::min_dist_angle#2 main::min_dist_angle#6 ] 1,401.4: zp[2]:6 [ main::fill#2 main::fill#1 ] 1,047.39: zp[2]:10 [ main::angle#2 main::angle#0 main::angle#1 ] 889.4: zp[2]:8 [ main::dist#2 main::dist#0 main::dist#1 ]
Uplift Scope [malloc] 10,001: zp[2]:4 [ malloc::size#3 ] 3,333.67: zp[2]:61 [ malloc::mem#0 ]
Uplift Scope [] 12,104.4: zp[2]:2 [ heap_head#13 heap_head#0 ] 16.15: zp[2]:102 [ SQUARES#0 ] 0.09: zp[2]:59 [ SCREEN_ANGLE#0 ] 0.08: zp[2]:57 [ SCREEN_DIST#0 ]
Uplift Scope [RADIX]
Uplift Scope [__start]
Uplifting [bsearch16u] best 1342286 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$14 ] zp[2]:126 [ bsearch16u::result#0 ] zp[2]:124 [ bsearch16u::pivot#0 ] zp[2]:111 [ bsearch16u::return#3 ] zp[2]:109 [ bsearch16u::key#0 ]
Uplifting [atan2_16] best 1228286 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:50 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:52 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:45 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:40 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:42 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:47 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:92 [ atan2_16::return#2 ] zp[2]:88 [ atan2_16::x#0 ] zp[2]:90 [ atan2_16::y#0 ]
Limited combination testing to 100 combinations of 144 possible.
Uplifting [sqrt] best 1227383 combination zp[2]:113 [ sqrt::found#0 ] zp[2]:115 [ sqrt::$2 ] zp[2]:77 [ sqrt::val#0 ] zp[2]:117 [ sqrt::$1 ] reg byte a [ sqrt::return#0 ] reg byte a [ sqrt::return#2 ]
Uplifting [sqr] best 1227046 combination reg byte a [ sqr::$0 ] reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp[2]:107 [ sqr::return#0 ] zp[2]:71 [ sqr::return#3 ] zp[2]:66 [ sqr::return#2 ]
Uplifting [init_angle_screen] best 1225446 combination zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$5 ] zp[2]:94 [ init_angle_screen::angle_w#0 ] zp[2]:96 [ init_angle_screen::$7 ] zp[1]:99 [ init_angle_screen::$9 ] zp[1]:100 [ init_angle_screen::$10 ] zp[1]:101 [ init_angle_screen::$11 ] zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:98 [ init_angle_screen::ang_w#0 ] zp[2]:86 [ init_angle_screen::yw#0 ] zp[2]:83 [ init_angle_screen::xw#0 ] zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] zp[2]:63 [ init_angle_screen::screen#0 ]
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [init_dist_screen] best 1222246 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp[1]:25 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp[2]:73 [ init_dist_screen::xds#0 ] zp[2]:75 [ init_dist_screen::ds#0 ] zp[1]:24 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp[1]:23 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp[1]:65 [ init_dist_screen::y2#0 ] zp[1]:18 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp[2]:21 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp[2]:19 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp[2]:68 [ init_dist_screen::yds#0 ]
Limited combination testing to 100 combinations of 6144 possible.
Uplifting [init_squares] best 1222046 combination reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp[2]:37 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] zp[2]:35 [ init_squares::sqr#2 init_squares::sqr#1 ]
Uplifting [main] best 1222046 combination zp[2]:16 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] zp[2]:14 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] zp[2]:12 [ main::min_dist_angle#2 main::min_dist_angle#6 ] zp[2]:6 [ main::fill#2 main::fill#1 ] zp[2]:10 [ main::angle#2 main::angle#0 main::angle#1 ] zp[2]:8 [ main::dist#2 main::dist#0 main::dist#1 ]
Uplifting [malloc] best 1222046 combination zp[2]:4 [ malloc::size#3 ] zp[2]:61 [ malloc::mem#0 ]
Uplifting [] best 1222046 combination zp[2]:2 [ heap_head#13 heap_head#0 ] zp[2]:102 [ SQUARES#0 ] zp[2]:59 [ SCREEN_ANGLE#0 ] zp[2]:57 [ SCREEN_DIST#0 ]
Uplifting [RADIX] best 1222046 combination
Uplifting [__start] best 1222046 combination
Attempting to uplift remaining variables inzp[1]:25 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Uplifting [init_dist_screen] best 1222046 combination zp[1]:25 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Attempting to uplift remaining variables inzp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Uplifting [init_angle_screen] best 1222046 combination zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Attempting to uplift remaining variables inzp[1]:99 [ init_angle_screen::$9 ]
Uplifting [init_angle_screen] best 1221446 combination reg byte a [ init_angle_screen::$9 ]
Attempting to uplift remaining variables inzp[1]:100 [ init_angle_screen::$10 ]
Uplifting [init_angle_screen] best 1221046 combination reg byte a [ init_angle_screen::$10 ]
Attempting to uplift remaining variables inzp[1]:101 [ init_angle_screen::$11 ]
Uplifting [init_angle_screen] best 1220446 combination reg byte a [ init_angle_screen::$11 ]
Attempting to uplift remaining variables inzp[1]:24 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Uplifting [init_dist_screen] best 1220446 combination zp[1]:24 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Attempting to uplift remaining variables inzp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Uplifting [init_angle_screen] best 1220446 combination zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Attempting to uplift remaining variables inzp[1]:98 [ init_angle_screen::ang_w#0 ]
Uplifting [init_angle_screen] best 1220446 combination zp[1]:98 [ init_angle_screen::ang_w#0 ]
Attempting to uplift remaining variables inzp[1]:23 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Uplifting [init_dist_screen] best 1220376 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Attempting to uplift remaining variables inzp[1]:65 [ init_dist_screen::y2#0 ]
Uplifting [init_dist_screen] best 1220276 combination reg byte a [ init_dist_screen::y2#0 ]
Attempting to uplift remaining variables inzp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Uplifting [init_angle_screen] best 1220276 combination zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Attempting to uplift remaining variables inzp[1]:18 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Uplifting [init_dist_screen] best 1220276 combination zp[1]:18 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Coalescing zero page register [ zp[2]:4 [ malloc::size#3 ] ] with [ zp[2]:61 [ malloc::mem#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:63 [ init_angle_screen::screen#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:47 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] - score: 1
Coalescing zero page register [ zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ] ] with [ zp[2]:111 [ bsearch16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:66 [ sqr::return#2 ] ] with [ zp[2]:68 [ init_dist_screen::yds#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:71 [ sqr::return#3 ] ] with [ zp[2]:73 [ init_dist_screen::xds#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:71 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp[2]:107 [ sqr::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:75 [ init_dist_screen::ds#0 ] ] with [ zp[2]:77 [ sqrt::val#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:83 [ init_angle_screen::xw#0 ] ] with [ zp[2]:88 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:86 [ init_angle_screen::yw#0 ] ] with [ zp[2]:90 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:92 [ atan2_16::return#2 ] ] with [ zp[2]:94 [ init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:113 [ sqrt::found#0 ] ] with [ zp[2]:115 [ sqrt::$2 ] ] - score: 1
Coalescing zero page register [ zp[2]:4 [ malloc::size#3 malloc::mem#0 ] ] with [ zp[2]:102 [ SQUARES#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] with [ zp[2]:92 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp[2]:113 [ sqrt::found#0 sqrt::$2 ] ] - score: 1
Coalescing zero page register [ zp[2]:71 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp[2]:75 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:45 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp[2]:96 [ init_angle_screen::$7 ] ] - score: 1
Coalescing zero page register [ zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$2 ] ] with [ zp[2]:117 [ sqrt::$1 ] ] - score: 1
Coalescing zero page register [ zp[2]:71 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp[2]:109 [ bsearch16u::key#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:6 [ main::fill#2 main::fill#1 ] ] with [ zp[2]:2 [ heap_head#13 heap_head#0 ] ]
Coalescing zero page register [ zp[2]:8 [ main::dist#2 main::dist#0 main::dist#1 ] ] with [ zp[2]:4 [ malloc::size#3 malloc::mem#0 SQUARES#0 ] ]
Coalescing zero page register [ zp[1]:27 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp[1]:18 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ]
Coalescing zero page register [ zp[2]:28 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] ] with [ zp[2]:19 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] ]
Coalescing zero page register [ zp[2]:30 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ] with [ zp[2]:21 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ]
Coalescing zero page register [ zp[1]:32 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp[1]:24 [ init_dist_screen::x#2 init_dist_screen::x#1 ] ]
Coalescing zero page register [ zp[1]:33 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] with [ zp[1]:25 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] ]
Coalescing zero page register [ zp[2]:40 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] with [ zp[2]:35 [ init_squares::sqr#2 init_squares::sqr#1 ] ]
Coalescing zero page register [ zp[2]:42 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ] with [ zp[2]:37 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ]
Coalescing zero page register [ zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$2 sqrt::$1 ] ] with [ zp[2]:45 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ] ]
Coalescing zero page register [ zp[2]:66 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp[2]:50 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ]
Coalescing zero page register [ zp[2]:71 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp[2]:52 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ]
Coalescing zero page register [ zp[2]:124 [ bsearch16u::pivot#0 ] ] with [ zp[2]:83 [ init_angle_screen::xw#0 atan2_16::x#0 ] ]
Coalescing zero page register [ zp[2]:126 [ bsearch16u::result#0 ] ] with [ zp[2]:86 [ init_angle_screen::yw#0 atan2_16::y#0 ] ]
Allocated (was zp[2]:6) zp[2]:2 [ main::fill#2 main::fill#1 heap_head#13 heap_head#0 ]
Allocated (was zp[2]:8) zp[2]:4 [ main::dist#2 main::dist#0 main::dist#1 malloc::size#3 malloc::mem#0 SQUARES#0 ]
Allocated (was zp[2]:10) zp[2]:6 [ main::angle#2 main::angle#0 main::angle#1 ]
Allocated (was zp[2]:12) zp[2]:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ]
Allocated (was zp[2]:14) zp[2]:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ]
Allocated (was zp[2]:16) zp[2]:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ]
Allocated (was zp[1]:27) zp[1]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 init_dist_screen::y#10 init_dist_screen::y#1 ]
Allocated (was zp[2]:28) zp[2]:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
Allocated (was zp[2]:30) zp[2]:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
Allocated (was zp[1]:32) zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 init_dist_screen::x#2 init_dist_screen::x#1 ]
Allocated (was zp[1]:33) zp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Allocated (was zp[2]:40) zp[2]:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 init_squares::sqr#2 init_squares::sqr#1 ]
Allocated (was zp[2]:42) zp[2]:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
Allocated (was zp[2]:54) zp[2]:25 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$2 sqrt::$1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ]
Allocated (was zp[2]:57) zp[2]:27 [ SCREEN_DIST#0 ]
Allocated (was zp[2]:59) zp[2]:29 [ SCREEN_ANGLE#0 ]
Allocated (was zp[2]:66) zp[2]:31 [ sqr::return#2 init_dist_screen::yds#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated (was zp[2]:71) zp[2]:33 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated (was zp[1]:98) zp[1]:35 [ init_angle_screen::ang_w#0 ]
Allocated (was zp[2]:124) zp[2]:36 [ bsearch16u::pivot#0 init_angle_screen::xw#0 atan2_16::x#0 ]
Allocated (was zp[2]:126) zp[2]:38 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
// Fill screen using a spiral based on distance-to-center / angle-to-center
// Upstart
.pc = $801 "Basic"
:BasicUpstart(__start)
.pc = $80d "Program"
// Global Constants & labels
.const SIZEOF_WORD = 2
// The number of iterations performed during 16-bit CORDIC atan2 calculation
.const CORDIC_ITERATIONS_16 = $f
// Char to fill with
.const FILL_CHAR = '@'
// The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt()
.const NUM_SQUARES = $30
// Screen containing angle to center
.label SCREEN_FILL = $400
// Top of the heap used by malloc()
.label HEAP_TOP = $a000
// Head of the heap. Moved backward each malloc()
.label heap_head = 2
// Squares for each char value SQUARES[i] = i*i
// Initialized by init_squares()
.label SQUARES = 4
2020-06-27 19:18:00 +00:00
// Screen containing distance to center
.label SCREEN_DIST = $1b
2020-06-27 19:18:00 +00:00
// Screen containing angle to center
.label SCREEN_ANGLE = $1d
// __start
__start: {
// [1] phi from __start to __start::__init1 [phi:__start->__start::__init1]
__init1_from___start:
jmp __init1
// __start::__init1
__init1:
2020-06-27 19:18:00 +00:00
// [2] call malloc
// [9] phi from __start::__init1 to malloc [phi:__start::__init1->malloc]
malloc_from___init1:
// [9] phi (word) malloc::size#3 = (word) $3e8 [phi:__start::__init1->malloc#0] -- vwuz1=vwuc1
2020-06-27 19:18:00 +00:00
lda #<$3e8
sta.z malloc.size
lda #>$3e8
sta.z malloc.size+1
// [9] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP [phi:__start::__init1->malloc#1] -- pbuz1=pbuc1
2020-06-27 19:18:00 +00:00
lda #<HEAP_TOP
sta.z heap_head
lda #>HEAP_TOP
sta.z heap_head+1
jsr malloc
jmp __b2
// __start::@2
2020-06-27 19:18:00 +00:00
__b2:
// [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_DIST
lda.z malloc.mem+1
sta.z SCREEN_DIST+1
// [4] call malloc
// [9] phi from __start::@2 to malloc [phi:__start::@2->malloc]
2020-06-27 19:18:00 +00:00
malloc_from___b2:
// [9] phi (word) malloc::size#3 = (word) $3e8 [phi:__start::@2->malloc#0] -- vwuz1=vwuc1
2020-06-27 19:18:00 +00:00
lda #<$3e8
sta.z malloc.size
lda #>$3e8
sta.z malloc.size+1
// [9] phi (byte*) heap_head#13 = (byte*) heap_head#0 [phi:__start::@2->malloc#1] -- register_copy
2020-06-27 19:18:00 +00:00
jsr malloc
jmp __b3
// __start::@3
2020-06-27 19:18:00 +00:00
__b3:
// [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_ANGLE
lda.z malloc.mem+1
sta.z SCREEN_ANGLE+1
// [6] phi from __start::@3 to __start::@1 [phi:__start::@3->__start::@1]
2020-06-27 19:18:00 +00:00
__b1_from___b3:
jmp __b1
// __start::@1
2020-06-27 19:18:00 +00:00
__b1:
// [7] call main
jsr main
jmp __breturn
// __start::@return
2020-06-27 19:18:00 +00:00
__breturn:
// [8] return
rts
}
// malloc
// Allocates a block of size chars of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
// malloc(word zp(4) size)
malloc: {
.label mem = 4
.label size = 4
// [10] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1
lda.z heap_head
sec
sbc.z mem
sta.z mem
lda.z heap_head+1
sbc.z mem+1
sta.z mem+1
// [11] (byte*) heap_head#0 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2
lda.z mem
sta.z heap_head
lda.z mem+1
sta.z heap_head+1
jmp __breturn
// malloc::@return
__breturn:
// [12] return
rts
2020-06-27 19:18:00 +00:00
}
// main
main: {
.label dist = 4
.label angle = 6
.label fill = 2
.label dist_angle = $c
.label min_dist_angle = 8
.label min_dist_angle_1 = $c
.label min_fill = $a
// [13] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2
lda.z SCREEN_DIST
sta.z init_dist_screen.screen
lda.z SCREEN_DIST+1
sta.z init_dist_screen.screen+1
// [14] call init_dist_screen
// [35] phi from main to init_dist_screen [phi:main->init_dist_screen]
init_dist_screen_from_main:
jsr init_dist_screen
jmp __b8
// main::@8
__b8:
// [15] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2
lda.z SCREEN_ANGLE
sta.z init_angle_screen.screen
lda.z SCREEN_ANGLE+1
sta.z init_angle_screen.screen+1
// [16] call init_angle_screen
jsr init_angle_screen
jmp __b1
// main::@1
__b1:
// [17] (byte*) main::dist#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2
// Find the minimum dist/angle that is not already filled
lda.z SCREEN_DIST
sta.z dist
lda.z SCREEN_DIST+1
sta.z dist+1
// [18] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2
lda.z SCREEN_ANGLE
sta.z angle
lda.z SCREEN_ANGLE+1
sta.z angle+1
// [19] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
__b2_from___b1:
// [19] phi (byte*) main::min_fill#5 = (const nomodify byte*) SCREEN_FILL [phi:main::@1->main::@2#0] -- pbuz1=pbuc1
lda #<SCREEN_FILL
sta.z min_fill
lda #>SCREEN_FILL
sta.z min_fill+1
// [19] phi (word) main::min_dist_angle#2 = (word) $ffff [phi:main::@1->main::@2#1] -- vwuz1=vwuc1
lda #<$ffff
sta.z min_dist_angle
lda #>$ffff
sta.z min_dist_angle+1
// [19] phi (byte*) main::angle#2 = (byte*) main::angle#0 [phi:main::@1->main::@2#2] -- register_copy
// [19] phi (byte*) main::dist#2 = (byte*) main::dist#0 [phi:main::@1->main::@2#3] -- register_copy
// [19] phi (byte*) main::fill#2 = (const nomodify byte*) SCREEN_FILL [phi:main::@1->main::@2#4] -- pbuz1=pbuc1
lda #<SCREEN_FILL
sta.z fill
lda #>SCREEN_FILL
sta.z fill+1
jmp __b2
// main::@2
__b2:
// [20] if(*((byte*) main::fill#2)==(const nomodify byte) FILL_CHAR) goto main::@10 -- _deref_pbuz1_eq_vbuc1_then_la1
lda #FILL_CHAR
ldy #0
cmp (fill),y
beq __b10
jmp __b4
// main::@4
__b4:
// [21] (word) main::dist_angle#0 ← *((byte*) main::dist#2) w= *((byte*) main::angle#2) -- vwuz1=_deref_pbuz2_word__deref_pbuz3
ldy #0
lda (angle),y
sta.z dist_angle
lda (dist),y
sta.z dist_angle+1
// [22] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@11 -- vwuz1_ge_vwuz2_then_la1
lda.z min_dist_angle+1
cmp.z dist_angle+1
bne !+
lda.z min_dist_angle
cmp.z dist_angle
beq __b11
!:
bcc __b11
jmp __b5
// main::@5
__b5:
// [23] (byte*) main::min_fill#10 ← (byte*) main::fill#2 -- pbuz1=pbuz2
lda.z fill
sta.z min_fill
lda.z fill+1
sta.z min_fill+1
// [24] phi from main::@10 main::@11 main::@5 to main::@3 [phi:main::@10/main::@11/main::@5->main::@3]
__b3_from___b10:
__b3_from___b11:
__b3_from___b5:
// [24] phi (byte*) main::min_fill#2 = (byte*) main::min_fill#5 [phi:main::@10/main::@11/main::@5->main::@3#0] -- register_copy
// [24] phi (word) main::min_dist_angle#3 = (word) main::min_dist_angle#7 [phi:main::@10/main::@11/main::@5->main::@3#1] -- register_copy
jmp __b3
// main::@3
__b3:
// [25] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 -- pbuz1=_inc_pbuz1
inc.z dist
bne !+
inc.z dist+1
!:
// [26] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 -- pbuz1=_inc_pbuz1
inc.z angle
bne !+
inc.z angle+1
!:
// [27] (byte*) main::fill#1 ← ++ (byte*) main::fill#2 -- pbuz1=_inc_pbuz1
inc.z fill
bne !+
inc.z fill+1
!:
// [28] if((byte*) main::fill#1<(const nomodify byte*) SCREEN_FILL+(word) $3e8) goto main::@9 -- pbuz1_lt_pbuc1_then_la1
lda.z fill+1
cmp #>SCREEN_FILL+$3e8
bcc __b9
bne !+
lda.z fill
cmp #<SCREEN_FILL+$3e8
bcc __b9
!:
jmp __b6
// main::@6
__b6:
// [29] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@7 -- vwuz1_neq_vwuc1_then_la1
lda.z min_dist_angle_1+1
cmp #>$ffff
bne __b7
lda.z min_dist_angle_1
cmp #<$ffff
bne __b7
jmp __breturn
// main::@return
__breturn:
// [30] return
rts
// main::@7
__b7:
// [31] *((byte*) main::min_fill#2) ← (const nomodify byte) FILL_CHAR -- _deref_pbuz1=vbuc1
// Fill the found location
lda #FILL_CHAR
ldy #0
sta (min_fill),y
jmp __b1
// main::@9
__b9:
// [32] (word) main::min_dist_angle#6 ← (word) main::min_dist_angle#3 -- vwuz1=vwuz2
lda.z min_dist_angle_1
sta.z min_dist_angle
lda.z min_dist_angle_1+1
sta.z min_dist_angle+1
// [19] phi from main::@9 to main::@2 [phi:main::@9->main::@2]
__b2_from___b9:
// [19] phi (byte*) main::min_fill#5 = (byte*) main::min_fill#2 [phi:main::@9->main::@2#0] -- register_copy
// [19] phi (word) main::min_dist_angle#2 = (word) main::min_dist_angle#6 [phi:main::@9->main::@2#1] -- register_copy
// [19] phi (byte*) main::angle#2 = (byte*) main::angle#1 [phi:main::@9->main::@2#2] -- register_copy
// [19] phi (byte*) main::dist#2 = (byte*) main::dist#1 [phi:main::@9->main::@2#3] -- register_copy
// [19] phi (byte*) main::fill#2 = (byte*) main::fill#1 [phi:main::@9->main::@2#4] -- register_copy
jmp __b2
// main::@11
__b11:
// [33] (word) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 -- vwuz1=vwuz2
lda.z min_dist_angle
sta.z min_dist_angle_1
lda.z min_dist_angle+1
sta.z min_dist_angle_1+1
jmp __b3_from___b11
// main::@10
__b10:
// [34] (word) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 -- vwuz1=vwuz2
lda.z min_dist_angle
sta.z min_dist_angle_1
lda.z min_dist_angle+1
sta.z min_dist_angle_1+1
jmp __b3_from___b10
}
// init_dist_screen
// Populates 1000 bytes (a screen) with values representing the distance to the center.
// The actual value stored is distance*2 to increase precision
// init_dist_screen(byte* zp($f) screen)
init_dist_screen: {
.label screen = $f
.label screen_bottomline = $11
.label yds = $1f
.label screen_topline = $f
.label y = $e
.label xds = $21
.label ds = $21
.label x = $13
.label xb = $14
// [36] call init_squares
// [106] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
init_squares_from_init_dist_screen:
jsr init_squares
jmp __b11
// init_dist_screen::@11
__b11:
// [37] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1
lda.z screen
clc
adc #<$28*$18
sta.z screen_bottomline
lda.z screen+1
adc #>$28*$18
sta.z screen_bottomline+1
// [38] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
__b1_from___b11:
// [38] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy
// [38] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy
// [38] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
jmp __b1
// [38] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
__b1_from___b7:
// [38] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy
// [38] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy
// [38] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy
jmp __b1
// init_dist_screen::@1
__b1:
// [39] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z y
asl
// [40] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1
cmp #$18
bcs __b2
jmp __b3
// init_dist_screen::@3
__b3:
// [41] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$18
// [42] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
__b4_from___b2:
__b4_from___b3:
// [42] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy
jmp __b4
// init_dist_screen::@4
__b4:
// [43] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
// [44] call sqr
// [119] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
sqr_from___b4:
// [119] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy
jsr sqr
// [45] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2
lda.z sqr.return
sta.z sqr.return_1
lda.z sqr.return+1
sta.z sqr.return_1+1
jmp __b12
// init_dist_screen::@12
__b12:
// [46] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
// [47] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
__b5_from___b12:
// [47] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [47] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1
lda #0
sta.z x
jmp __b5
// init_dist_screen::@5
__b5:
// [48] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b6
jmp __b7
// init_dist_screen::@7
__b7:
// [49] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_topline
sta.z screen_topline
bcc !+
inc.z screen_topline+1
!:
// [50] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_bottomline
sbc #$28
sta.z screen_bottomline
lda.z screen_bottomline+1
sbc #0
sta.z screen_bottomline+1
// [51] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1
inc.z y
// [52] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1_from___b7
jmp __breturn
// init_dist_screen::@return
__breturn:
// [53] return
rts
// init_dist_screen::@6
__b6:
// [54] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z x
asl
// [55] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1
cmp #$27
bcs __b8
jmp __b9
// init_dist_screen::@9
__b9:
// [56] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$27
// [57] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10]
__b10_from___b8:
__b10_from___b9:
// [57] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy
jmp __b10
// init_dist_screen::@10
__b10:
// [58] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
// [59] call sqr
// [119] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
sqr_from___b10:
// [119] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy
jsr sqr
// [60] (word) sqr::return#3 ← (word) sqr::return#0
jmp __b13
// init_dist_screen::@13
__b13:
// [61] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
// [62] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2
lda.z ds
clc
adc.z yds
sta.z ds
lda.z ds+1
adc.z yds+1
sta.z ds+1
// [63] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
// [64] call sqrt
jsr sqrt
// [65] (byte) sqrt::return#2 ← (byte) sqrt::return#0
jmp __b14
// init_dist_screen::@14
__b14:
// [66] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
// [67] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_topline),y
// [68] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_bottomline),y
// [69] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z xb
sta (screen_topline),y
// [70] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z xb
sta (screen_bottomline),y
// [71] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [72] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [47] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5]
__b5_from___b14:
// [47] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy
// [47] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy
jmp __b5
// init_dist_screen::@8
__b8:
// [73] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #$27
jmp __b10_from___b8
// init_dist_screen::@2
__b2:
// [74] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #$18
jmp __b4_from___b2
}
// init_angle_screen
// Populates 1000 bytes (a screen) with values representing the angle to the center.
// Utilizes symmetry around the center
// init_angle_screen(byte* zp($11) screen)
init_angle_screen: {
.label __7 = $19
.label screen = $11
.label screen_bottomline = $11
.label xw = $24
.label yw = $26
.label angle_w = $19
.label ang_w = $23
.label x = $13
.label xb = $14
.label screen_topline = $f
.label y = $e
// [75] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1
clc
lda.z screen_bottomline
adc #<$28*$c
sta.z screen_bottomline
lda.z screen_bottomline+1
adc #>$28*$c
sta.z screen_bottomline+1
// [76] (byte*) init_angle_screen::screen_topline#7 ← (byte*) init_angle_screen::screen_bottomline#0 -- pbuz1=pbuz2
lda.z screen_bottomline
sta.z screen_topline
lda.z screen_bottomline+1
sta.z screen_topline+1
// [77] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
__b1_from_init_angle_screen:
// [77] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy
// [77] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#7 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy
// [77] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
jmp __b1
// [77] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
__b1_from___b4:
// [77] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy
// [77] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy
// [77] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy
jmp __b1
// init_angle_screen::@1
__b1:
// [78] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
__b2_from___b1:
// [78] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [78] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1
lda #0
sta.z x
jmp __b2
// init_angle_screen::@2
__b2:
// [79] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b3
jmp __b4
// init_angle_screen::@4
__b4:
// [80] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_topline
sbc #$28
sta.z screen_topline
lda.z screen_topline+1
sbc #0
sta.z screen_topline+1
// [81] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_bottomline
sta.z screen_bottomline
bcc !+
inc.z screen_bottomline+1
!:
// [82] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1
inc.z y
// [83] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1_from___b4
jmp __breturn
// init_angle_screen::@return
__breturn:
// [84] return
rts
// init_angle_screen::@3
__b3:
// [85] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z x
asl
// [86] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$27
// [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1
ldy #0
sta.z xw+1
sty.z xw
// [88] (byte~) init_angle_screen::$5 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z y
asl
// [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$5 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1
ldy #0
sta.z yw+1
sty.z yw
// [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
// [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
// [92] call atan2_16
jsr atan2_16
// [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0
jmp __b5
// init_angle_screen::@5
__b5:
// [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
// [95] (word~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1
lda #$80
clc
adc.z __7
sta.z __7
bcc !+
inc.z __7+1
!:
// [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$7 -- vbuz1=_hi_vwuz2
lda.z __7+1
sta.z ang_w
// [97] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z ang_w
ldy.z xb
sta (screen_bottomline),y
// [98] (byte~) init_angle_screen::$9 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1
lda.z ang_w
eor #$ff
clc
adc #1
// [99] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$9 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z xb
sta (screen_topline),y
// [100] (byte~) init_angle_screen::$10 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1
lda #$80
clc
adc.z ang_w
// [101] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$10 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_topline),y
// [102] (byte~) init_angle_screen::$11 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1
lda #$80
sec
sbc.z ang_w
// [103] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$11 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_bottomline),y
// [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [78] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
__b2_from___b5:
// [78] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy
// [78] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy
jmp __b2
}
// init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
.label squares = $17
.label sqr = $15
// [107] call malloc
// [9] phi from init_squares to malloc [phi:init_squares->malloc]
malloc_from_init_squares:
// [9] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#2*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1
lda #<NUM_SQUARES*SIZEOF_WORD
sta.z malloc.size
lda #>NUM_SQUARES*SIZEOF_WORD
sta.z malloc.size+1
// [9] phi (byte*) heap_head#13 = (byte*) heap_head#0 [phi:init_squares->malloc#1] -- register_copy
jsr malloc
jmp __b3
// init_squares::@3
__b3:
// [108] (void*) SQUARES#0 ← (void*)(byte*) malloc::mem#0
// [109] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#0 -- pwuz1=pwuz2
lda.z SQUARES
sta.z squares
lda.z SQUARES+1
sta.z squares+1
// [110] phi from init_squares::@3 to init_squares::@1 [phi:init_squares::@3->init_squares::@1]
__b1_from___b3:
// [110] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@3->init_squares::@1#0] -- register_copy
// [110] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@3->init_squares::@1#1] -- vwuz1=vwuc1
lda #<0
sta.z sqr
lda #>0
sta.z sqr+1
// [110] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@3->init_squares::@1#2] -- vbuxx=vbuc1
ldx #0
jmp __b1
// init_squares::@1
__b1:
// [111] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#2) goto init_squares::@2 -- vbuxx_lt_vbuc1_then_la1
cpx #NUM_SQUARES
bcc __b2
jmp __breturn
// init_squares::@return
__breturn:
// [112] return
rts
// init_squares::@2
__b2:
// [113] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2
ldy #0
lda.z sqr
sta (squares),y
iny
lda.z sqr+1
sta (squares),y
// [114] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1
lda #SIZEOF_WORD
clc
adc.z squares
sta.z squares
bcc !+
inc.z squares+1
!:
// [115] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [116] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1
clc
adc #1
// [117] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa
clc
adc.z sqr
sta.z sqr
bcc !+
inc.z sqr+1
!:
// [118] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx
inx
// [110] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
__b1_from___b2:
// [110] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@2->init_squares::@1#0] -- register_copy
// [110] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@2->init_squares::@1#1] -- register_copy
// [110] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@2->init_squares::@1#2] -- register_copy
jmp __b1
}
// sqr
// Find the square of a char value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte register(A) val)
sqr: {
.label return = $21
.label return_1 = $1f
// [120] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
// [121] (word) sqr::return#0 ← *((word*)(void*) SQUARES#0 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa
tay
lda (SQUARES),y
sta.z return
iny
lda (SQUARES),y
sta.z return+1
jmp __breturn
// sqr::@return
__breturn:
// [122] return
rts
}
// sqrt
// Find the (integer) square root of a unsigned int value
// If the square is not an integer then it returns the largest integer N where N*N <= val
// Uses a table of squares that must be initialized by calling init_squares()
// sqrt(word zp($21) val)
sqrt: {
.label __1 = $19
.label __2 = $19
.label found = $19
.label val = $21
// [123] (word) bsearch16u::key#0 ← (word) sqrt::val#0
// [124] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#0 -- pwuz1=pwuz2
lda.z SQUARES
sta.z bsearch16u.items
lda.z SQUARES+1
sta.z bsearch16u.items+1
// [125] call bsearch16u
// [175] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
bsearch16u_from_sqrt:
jsr bsearch16u
// [126] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
jmp __b1
// sqrt::@1
__b1:
// [127] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
// [128] (word~) sqrt::$2 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#0 -- vwuz1=pwuz1_minus_pwuz2
lda.z __2
sec
sbc.z SQUARES
sta.z __2
lda.z __2+1
sbc.z SQUARES+1
sta.z __2+1
// [129] (word~) sqrt::$1 ← (word~) sqrt::$2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
lsr.z __1+1
ror.z __1
// [130] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1
lda.z __1
jmp __breturn
// sqrt::@return
__breturn:
// [131] return
rts
}
// atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($24) x, signed word zp($26) y)
atan2_16: {
.label __2 = $15
.label __7 = $17
.label yi = $15
.label xi = $17
.label angle = $19
.label xd = $21
.label yd = $1f
.label return = $19
.label x = $24
.label y = $26
// [132] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b1
jmp __b2
// atan2_16::@2
__b2:
// [133] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z y
sta.z __2
lda #0
sbc.z y+1
sta.z __2+1
// [134] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
__b3_from___b1:
__b3_from___b2:
// [134] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy
jmp __b3
// atan2_16::@3
__b3:
// [135] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b4
jmp __b5
// atan2_16::@5
__b5:
// [136] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z x
sta.z __7
lda #0
sbc.z x+1
sta.z __7+1
// [137] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
__b6_from___b4:
__b6_from___b5:
// [137] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
jmp __b6
// atan2_16::@6
__b6:
// [138] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
__b10_from___b6:
// [138] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
lda #<0
sta.z angle
lda #>0
sta.z angle+1
// [138] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
ldx #0
// [138] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
// [138] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@10
__b10:
// [139] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
lda.z yi+1
bne __b11
lda.z yi
bne __b11
// [140] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
__b12_from___b10:
__b12_from___b19:
// [140] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
jmp __b12
// atan2_16::@12
__b12:
// [141] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1
lsr.z angle+1
ror.z angle
// [142] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b7_from___b12
jmp __b21
// atan2_16::@21
__b21:
// [143] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
sec
lda #<$8000
sbc.z angle
sta.z angle
lda #>$8000
sbc.z angle+1
sta.z angle+1
// [144] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
__b7_from___b12:
__b7_from___b21:
// [144] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
jmp __b7
// atan2_16::@7
__b7:
// [145] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b8_from___b7
jmp __b9
// atan2_16::@9
__b9:
// [146] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1
sec
lda #0
sbc.z angle
sta.z angle
lda #0
sbc.z angle+1
sta.z angle+1
// [147] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
__b8_from___b7:
__b8_from___b9:
// [147] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy
jmp __b8
// atan2_16::@8
__b8:
jmp __breturn
// atan2_16::@return
__breturn:
// [148] return
rts
// atan2_16::@11
__b11:
// [149] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx
txa
tay
// [150] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2
lda.z xi
sta.z xd
lda.z xi+1
sta.z xd+1
// [151] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2
lda.z yi
sta.z yd
lda.z yi+1
sta.z yd+1
// [152] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
__b13_from___b11:
__b13_from___b14:
// [152] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
// [152] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
// [152] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
jmp __b13
// atan2_16::@13
__b13:
// [153] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1
cpy #2
bcs __b14
jmp __b15
// atan2_16::@15
__b15:
// [154] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1
cpy #0
beq __b17_from___b15
jmp __b16
// atan2_16::@16
__b16:
// [155] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// [156] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [157] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
__b17_from___b15:
__b17_from___b16:
// [157] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
// [157] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
jmp __b17
// atan2_16::@17
__b17:
// [158] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
lda.z yi+1
bpl __b18
jmp __b20
// atan2_16::@20
__b20:
// [159] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z xi
sec
sbc.z yd
sta.z xi
lda.z xi+1
sbc.z yd+1
sta.z xi+1
// [160] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z yi
clc
adc.z xd
sta.z yi
lda.z yi+1
adc.z xd+1
sta.z yi+1
// [161] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [162] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
tay
sec
lda.z angle
sbc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
sbc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
// [163] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
__b19_from___b18:
__b19_from___b20:
// [163] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
// [163] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
// [163] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy
jmp __b19
// atan2_16::@19
__b19:
// [164] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx
inx
// [165] if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1
cpx #CORDIC_ITERATIONS_16-1+1
beq __b12_from___b19
// [138] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
__b10_from___b19:
// [138] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
// [138] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
// [138] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
// [138] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@18
__b18:
// [166] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z xi
clc
adc.z yd
sta.z xi
lda.z xi+1
adc.z yd+1
sta.z xi+1
// [167] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z yi
sec
sbc.z xd
sta.z yi
lda.z yi+1
sbc.z xd+1
sta.z yi+1
// [168] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [169] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa
tay
clc
lda.z angle
adc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
adc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
jmp __b19_from___b18
// atan2_16::@14
__b14:
// [170] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// [171] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [172] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2
dey
dey
jmp __b13_from___b14
// atan2_16::@4
__b4:
// [173] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2
lda.z x
sta.z xi
lda.z x+1
sta.z xi+1
jmp __b6_from___b4
// atan2_16::@1
__b1:
// [174] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2
lda.z y
sta.z yi
lda.z y+1
sta.z yi+1
jmp __b3_from___b1
}
// bsearch16u
// Searches an array of nitems unsigned ints, the initial member of which is pointed to by base, for a member that matches the value key.
// - key - The value to look for
// - items - Pointer to the start of the array to search in
// - num - The number of items in the array
// Returns pointer to an entry in the array that matches the search key
// bsearch16u(word zp($21) key, word* zp($19) items, byte register(X) num)
bsearch16u: {
.label __2 = $19
.label pivot = $24
.label result = $26
.label return = $19
.label items = $19
.label key = $21
// [176] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
__b3_from_bsearch16u:
// [176] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy
// [176] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#2 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1
ldx #NUM_SQUARES
jmp __b3
// bsearch16u::@3
__b3:
// [177] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1
cpx #0
bne __b4
jmp __b5
// bsearch16u::@5
__b5:
// [178] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1
ldy #1
lda (items),y
cmp.z key+1
bne !+
dey
lda (items),y
cmp.z key
beq __b2_from___b5
!:
bcc __b2_from___b5
jmp __b1
// bsearch16u::@1
__b1:
// [179] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vbuc1
sec
lda.z __2
sbc #1*SIZEOF_WORD
sta.z __2
lda.z __2+1
sbc #0
sta.z __2+1
// [180] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
__b2_from___b1:
__b2_from___b5:
// [180] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy
jmp __b2
// bsearch16u::@2
__b2:
// [181] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
__breturn_from___b2:
__breturn_from___b8:
// [181] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy
jmp __breturn
// bsearch16u::@return
__breturn:
// [182] return
rts
// bsearch16u::@4
__b4:
// [183] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1
txa
lsr
// [184] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
// [185] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$14 -- pwuz1=pwuz2_plus_vbuaa
clc
adc.z items
sta.z pivot
lda #0
adc.z items+1
sta.z pivot+1
// [186] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3
sec
lda.z key
ldy #0
sbc (pivot),y
sta.z result
lda.z key+1
iny
sbc (pivot),y
sta.z result+1
// [187] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1
lda.z result+1
bne __b6
lda.z result
bne __b6
jmp __b8
// bsearch16u::@8
__b8:
// [188] (word*) bsearch16u::return#7 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2
lda.z pivot
sta.z return
lda.z pivot+1
sta.z return+1
jmp __breturn_from___b8
// bsearch16u::@6
__b6:
// [189] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1
lda.z result+1
bmi __b7_from___b6
bne !+
lda.z result
beq __b7_from___b6
!:
jmp __b9
// bsearch16u::@9
__b9:
// [190] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1
lda #1*SIZEOF_WORD
clc
adc.z pivot
sta.z items
lda #0
adc.z pivot+1
sta.z items+1
// [191] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx
dex
// [192] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
__b7_from___b6:
__b7_from___b9:
// [192] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy
// [192] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy
jmp __b7
// bsearch16u::@7
__b7:
// [193] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1
txa
lsr
tax
// [176] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
__b3_from___b7:
// [176] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy
// [176] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy
2020-02-15 08:30:27 +00:00
jmp __b3
}
// File Data
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
CORDIC_ATAN2_ANGLES_16:
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __init1
Removing instruction jmp __b2
2020-06-27 19:18:00 +00:00
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __b8
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b3
Removing instruction jmp __b6
Removing instruction jmp __breturn
Removing instruction jmp __b11
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b12
Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp __breturn
Removing instruction jmp __b9
Removing instruction jmp __b10
Removing instruction jmp __b13
Removing instruction jmp __b14
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b5
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __b10
Removing instruction jmp __b12
Removing instruction jmp __b21
Removing instruction jmp __b7
Removing instruction jmp __b9
Removing instruction jmp __b8
Removing instruction jmp __breturn
Removing instruction jmp __b13
Removing instruction jmp __b15
Removing instruction jmp __b16
Removing instruction jmp __b17
Removing instruction jmp __b20
Removing instruction jmp __b19
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b8
Removing instruction jmp __b9
Removing instruction jmp __b7
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy.z x
Removing instruction ldy.z xb
Removing instruction ldy #0
Removing instruction lda.z ang_w
Removing instruction lda.z ang_w
Removing instruction ldy.z xb
Removing instruction ldy.z x
Removing instruction lda #>0
Replacing instruction ldx #0 with TAX
Removing instruction lda #>0
2020-02-15 08:30:27 +00:00
Replacing instruction ldx #0 with TAX
Removing instruction lda.z result+1
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __b3_from___b11 with __b3
Replacing label __b3_from___b10 with __b3
Replacing label __b1_from___b7 with __b1
Replacing label __b10_from___b8 with __b10
Replacing label __b4_from___b2 with __b4
Replacing label __b1_from___b4 with __b1
Replacing label __b7_from___b12 with __b7
Replacing label __b8_from___b7 with __b8
Replacing label __b17_from___b15 with __b17
Replacing label __b12_from___b19 with __b12
Replacing label __b19_from___b18 with __b19
Replacing label __b13_from___b14 with __b13
Replacing label __b6_from___b4 with __b6
Replacing label __b3_from___b1 with __b3
Replacing label __b2_from___b5 with __b2
Replacing label __b2_from___b5 with __b2
Replacing label __breturn_from___b8 with __b2
Replacing label __b7_from___b6 with __b7
Replacing label __b7_from___b6 with __b7
Removing instruction __init1_from___start:
Removing instruction malloc_from___init1:
2020-06-27 19:18:00 +00:00
Removing instruction __b1_from___b3:
Removing instruction __b3_from___b10:
Removing instruction __b3_from___b11:
Removing instruction __b3_from___b5:
Removing instruction __b1_from___b7:
Removing instruction __b4_from___b2:
Removing instruction __b4_from___b3:
Removing instruction sqr_from___b4:
Removing instruction __b5_from___b12:
Removing instruction __b10_from___b8:
Removing instruction __b10_from___b9:
Removing instruction sqr_from___b10:
Removing instruction __b1_from___b4:
Removing instruction __b2_from___b1:
Removing instruction __b3_from___b1:
Removing instruction __b3_from___b2:
Removing instruction __b6_from___b4:
Removing instruction __b6_from___b5:
Removing instruction __b10_from___b6:
Removing instruction __b12_from___b10:
Removing instruction __b12_from___b19:
Removing instruction __b7_from___b12:
Removing instruction __b7_from___b21:
Removing instruction __b8_from___b7:
Removing instruction __b8_from___b9:
Removing instruction __breturn:
Removing instruction __b13_from___b11:
Removing instruction __b13_from___b14:
Removing instruction __b17_from___b15:
Removing instruction __b17_from___b16:
Removing instruction __b19_from___b18:
Removing instruction __b19_from___b20:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b5:
Removing instruction __breturn_from___b2:
Removing instruction __breturn_from___b8:
Removing instruction __breturn:
Removing instruction __b7_from___b6:
Removing instruction __b7_from___b9:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __init1:
Removing instruction __b2:
2020-06-27 19:18:00 +00:00
Removing instruction malloc_from___b2:
Removing instruction __b3:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction init_dist_screen_from_main:
Removing instruction __b8:
Removing instruction __b2_from___b1:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __b6:
Removing instruction __breturn:
Removing instruction __b2_from___b9:
Removing instruction init_squares_from_init_dist_screen:
Removing instruction __b11:
Removing instruction __b1_from___b11:
Removing instruction __b3:
Removing instruction __b12:
Removing instruction __b7:
Removing instruction __breturn:
Removing instruction __b9:
Removing instruction __b13:
Removing instruction __b14:
Removing instruction __b5_from___b14:
Removing instruction __b1_from_init_angle_screen:
Removing instruction __b4:
Removing instruction __breturn:
Removing instruction __b5:
Removing instruction __b2_from___b5:
Removing instruction malloc_from_init_squares:
Removing instruction __b3:
Removing instruction __b1_from___b3:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __breturn:
Removing instruction bsearch16u_from_sqrt:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __b2:
Removing instruction __b5:
Removing instruction __b21:
Removing instruction __b9:
Removing instruction __b15:
Removing instruction __b16:
Removing instruction __b20:
Removing instruction __b10_from___b19:
Removing instruction __b3_from_bsearch16u:
Removing instruction __b5:
Removing instruction __b1:
Removing instruction __b8:
Removing instruction __b9:
Removing instruction __b3_from___b7:
Succesful ASM optimization Pass5UnusedLabelElimination
Replacing jump to rts with rts in jmp __b2
Succesful ASM optimization Pass5DoubleJumpElimination
Removing instruction jmp __b1
Removing instruction jmp __b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Fixing long branch [593] beq __b12 to bne
Fixing long branch [487] bpl __b1 to bmi
Fixing long branch [499] bpl __b4 to bmi
FINAL SYMBOL TABLE
(const word*) CORDIC_ATAN2_ANGLES_16[(const nomodify byte) CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
}}
(const nomodify byte) CORDIC_ITERATIONS_16 = (byte) $f
(const nomodify byte) FILL_CHAR = (byte) '@'
(const byte*) HEAP_TOP = (byte*) 40960
(byte) NUM_SQUARES
2020-06-27 19:18:00 +00:00
(const byte) NUM_SQUARES#2 NUM_SQUARES = (byte) $30
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(byte*) SCREEN_ANGLE
(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp[2]:29 0.08695652173913043
(byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:27 0.08
(const nomodify byte*) SCREEN_FILL = (byte*) 1024
(const byte) SIZEOF_WORD = (byte) 2
(word*) SQUARES
(void*) SQUARES#0 SQUARES zp[2]:4 16.14516129032258
(void()) __start()
(label) __start::@1
(label) __start::@2
(label) __start::@3
(label) __start::@return
(label) __start::__init1
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 zp[2]:21 200002.0
(byte~) atan2_16::$22 reg byte a 2.00000002E8
(byte~) atan2_16::$23 reg byte a 2.00000002E8
(signed word~) atan2_16::$7 zp[2]:23 200002.0
(label) atan2_16::@1
(label) atan2_16::@10
(label) atan2_16::@11
(label) atan2_16::@12
(label) atan2_16::@13
(label) atan2_16::@14
(label) atan2_16::@15
(label) atan2_16::@16
(label) atan2_16::@17
(label) atan2_16::@18
(label) atan2_16::@19
(label) atan2_16::@2
(label) atan2_16::@20
(label) atan2_16::@21
(label) atan2_16::@3
(label) atan2_16::@4
(label) atan2_16::@5
(label) atan2_16::@6
(label) atan2_16::@7
(label) atan2_16::@8
(label) atan2_16::@9
(label) atan2_16::@return
(word) atan2_16::angle
(word) atan2_16::angle#1 angle zp[2]:25 150001.5
(word) atan2_16::angle#11 angle zp[2]:25 200002.0
(word) atan2_16::angle#12 angle zp[2]:25 1.904761923809524E7
(word) atan2_16::angle#13 angle zp[2]:25 1.3333333466666667E8
(word) atan2_16::angle#2 angle zp[2]:25 2.00000002E8
(word) atan2_16::angle#3 angle zp[2]:25 2.00000002E8
(word) atan2_16::angle#4 angle zp[2]:25 200002.0
(word) atan2_16::angle#5 angle zp[2]:25 200002.0
(word) atan2_16::angle#6 angle zp[2]:25 2.00100003E8
(byte) atan2_16::i
(byte) atan2_16::i#1 reg byte x 1.500000015E8
(byte) atan2_16::i#2 reg byte x 2.0833333541666668E7
(word) atan2_16::return
(word) atan2_16::return#0 return zp[2]:25 70001.0
(word) atan2_16::return#2 return zp[2]:25 20002.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 reg byte y 2.000000002E9
(byte) atan2_16::shift#2 reg byte y 8.0000000125E8
(byte) atan2_16::shift#5 reg byte y 6.6666667333333336E7
(signed word) atan2_16::x
(signed word) atan2_16::x#0 x zp[2]:36 10789.605263157895
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 xd zp[2]:33 6.666666673333334E8
(signed word) atan2_16::xd#10 xd zp[2]:33 1.00000001E8
(signed word) atan2_16::xd#2 xd zp[2]:33 1.00000001E8
(signed word) atan2_16::xd#3 xd zp[2]:33 7.666666683333335E8
(signed word) atan2_16::xd#5 xd zp[2]:33 1.00000001E8
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 xi zp[2]:23 300003.0
(signed word) atan2_16::xi#1 xi zp[2]:23 5.00000005E7
(signed word) atan2_16::xi#13 xi zp[2]:23 200002.0
(signed word) atan2_16::xi#2 xi zp[2]:23 5.00000005E7
(signed word) atan2_16::xi#3 xi zp[2]:23 2.6673333666666668E7
(signed word) atan2_16::xi#8 xi zp[2]:23 1.00000001E8
(signed word) atan2_16::y
(signed word) atan2_16::y#0 y zp[2]:38 10250.125
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 yd zp[2]:31 1.000000001E9
(signed word) atan2_16::yd#10 yd zp[2]:31 2.00000002E8
(signed word) atan2_16::yd#2 yd zp[2]:31 2.00000002E8
(signed word) atan2_16::yd#3 yd zp[2]:31 4.6000000099999994E8
(signed word) atan2_16::yd#5 yd zp[2]:31 2.00000002E8
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 yi zp[2]:21 60000.600000000006
(signed word) atan2_16::yi#1 yi zp[2]:21 6.6666667333333336E7
(signed word) atan2_16::yi#16 yi zp[2]:21 200002.0
(signed word) atan2_16::yi#2 yi zp[2]:21 6.6666667333333336E7
(signed word) atan2_16::yi#3 yi zp[2]:21 3.53000004117647E7
(signed word) atan2_16::yi#8 yi zp[2]:21 1.00000001E8
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(byte~) bsearch16u::$14 reg byte a 2.000000002E9
(word*~) bsearch16u::$2 zp[2]:25 2000002.0
(byte~) bsearch16u::$6 reg byte a 2.000000002E9
(label) bsearch16u::@1
(label) bsearch16u::@2
(label) bsearch16u::@3
(label) bsearch16u::@4
(label) bsearch16u::@5
(label) bsearch16u::@6
(label) bsearch16u::@7
(label) bsearch16u::@8
(label) bsearch16u::@9
(label) bsearch16u::@return
(word*) bsearch16u::items
(word*) bsearch16u::items#0 items zp[2]:25 1.000000001E9
(word*) bsearch16u::items#1 items zp[2]:25 550001.0
(word*) bsearch16u::items#2 items zp[2]:25 3.337777785555556E8
(word*) bsearch16u::items#8 items zp[2]:25 1.5000000015E9
(word) bsearch16u::key
(word) bsearch16u::key#0 key zp[2]:33 73333.46666666667
(byte) bsearch16u::num
(byte) bsearch16u::num#0 reg byte x 2.000000002E9
(byte) bsearch16u::num#1 reg byte x 2.000000002E9
(byte) bsearch16u::num#3 reg byte x 5.555555561111112E8
(byte) bsearch16u::num#5 reg byte x 3.000000003E9
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0 pivot zp[2]:36 5.0025000075E8
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0 result zp[2]:38 1.5000000015E9
(word*) bsearch16u::return
(word*) bsearch16u::return#1 return zp[2]:25 700001.0
(word*) bsearch16u::return#2 return zp[2]:25 3000003.0
(word*) bsearch16u::return#3 return zp[2]:25 200002.0
(word*) bsearch16u::return#7 return zp[2]:25 2000002.0
(byte*) heap_head
(byte*) heap_head#0 heap_head zp[2]:2 1100.4
(byte*) heap_head#13 heap_head zp[2]:2 11004.0
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(byte~) init_angle_screen::$10 reg byte a 20002.0
(byte~) init_angle_screen::$11 reg byte a 20002.0
(byte~) init_angle_screen::$3 reg byte a 20002.0
(byte~) init_angle_screen::$4 reg byte a 20002.0
(byte~) init_angle_screen::$5 reg byte a 20002.0
(word~) init_angle_screen::$7 zp[2]:25 20002.0
(byte~) init_angle_screen::$9 reg byte a 20002.0
(label) init_angle_screen::@1
(label) init_angle_screen::@2
(label) init_angle_screen::@3
(label) init_angle_screen::@4
(label) init_angle_screen::@5
(label) init_angle_screen::@return
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0 ang_w zp[1]:35 8334.166666666666
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0 angle_w zp[2]:25 20002.0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0 screen zp[2]:17 112.0
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp[2]:17 151.5
(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp[2]:17 667.3333333333334
(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp[2]:17 884.2
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#1 screen_topline zp[2]:15 500.5
(byte*) init_angle_screen::screen_topline#6 screen_topline zp[2]:15 921.0416666666666
(byte*) init_angle_screen::screen_topline#7 screen_topline zp[2]:15 202.0
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 x zp[1]:19 10001.0
(byte) init_angle_screen::x#2 x zp[1]:19 2857.4285714285716
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 xb zp[1]:20 20002.0
(byte) init_angle_screen::xb#2 xb zp[1]:20 1818.3636363636363
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 xw zp[2]:36 3333.6666666666665
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 y zp[1]:14 1501.5
(byte) init_angle_screen::y#5 y zp[1]:14 461.65384615384613
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 yw zp[2]:38 5000.5
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte~) init_dist_screen::$14 reg byte a 20002.0
(byte~) init_dist_screen::$16 reg byte a 20002.0
(byte~) init_dist_screen::$5 reg byte a 2002.0
(byte~) init_dist_screen::$7 reg byte a 2002.0
(label) init_dist_screen::@1
(label) init_dist_screen::@10
(label) init_dist_screen::@11
(label) init_dist_screen::@12
(label) init_dist_screen::@13
(label) init_dist_screen::@14
(label) init_dist_screen::@2
(label) init_dist_screen::@3
(label) init_dist_screen::@4
(label) init_dist_screen::@5
(label) init_dist_screen::@6
(label) init_dist_screen::@7
(label) init_dist_screen::@8
(label) init_dist_screen::@9
(label) init_dist_screen::@return
(byte) init_dist_screen::d
(byte) init_dist_screen::d#0 reg byte a 12501.25
(word) init_dist_screen::ds
(word) init_dist_screen::ds#0 ds zp[2]:33 20002.0
(byte*) init_dist_screen::screen
(byte*) init_dist_screen::screen#0 screen zp[2]:15 53.25
(byte*) init_dist_screen::screen_bottomline
(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp[2]:17 202.0
(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp[2]:17 667.3333333333334
(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp[2]:17 669.8484848484848
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#1 screen_topline zp[2]:15 500.5
(byte*) init_dist_screen::screen_topline#11 screen_topline zp[2]:15 690.78125
(byte) init_dist_screen::x
(byte) init_dist_screen::x#1 x zp[1]:19 10001.0
(byte) init_dist_screen::x#2 x zp[1]:19 3000.3
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0 reg byte a 20002.0
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#1 xb zp[1]:20 20002.0
(byte) init_dist_screen::xb#2 xb zp[1]:20 1904.952380952381
(byte) init_dist_screen::xd
(byte) init_dist_screen::xd#0 reg byte a 30003.0
(word) init_dist_screen::xds
(word) init_dist_screen::xds#0 xds zp[2]:33 20002.0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#1 y zp[1]:14 1501.5
(byte) init_dist_screen::y#10 y zp[1]:14 88.32352941176471
(byte) init_dist_screen::y2
(byte) init_dist_screen::y2#0 reg byte a 2002.0
(byte) init_dist_screen::yd
(byte) init_dist_screen::yd#0 reg byte a 3003.0
(word) init_dist_screen::yds
(word) init_dist_screen::yds#0 yds zp[2]:31 478.3478260869565
(void()) init_squares()
(byte~) init_squares::$3 reg byte a 20002.0
(byte~) init_squares::$4 reg byte a 20002.0
(label) init_squares::@1
(label) init_squares::@2
2020-02-15 08:30:27 +00:00
(label) init_squares::@3
(label) init_squares::@return
(byte) init_squares::i
(byte) init_squares::i#1 reg byte x 20002.0
(byte) init_squares::i#2 reg byte x 5714.857142857143
(word) init_squares::sqr
(word) init_squares::sqr#1 sqr zp[2]:21 10001.0
(word) init_squares::sqr#2 sqr zp[2]:21 5000.5
(word*) init_squares::squares
(word*) init_squares::squares#0 squares zp[2]:23 2002.0
(word*) init_squares::squares#1 squares zp[2]:23 4000.4
(word*) init_squares::squares#2 squares zp[2]:23 10334.666666666666
(void()) main()
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(byte*) main::angle
(byte*) main::angle#0 angle zp[2]:6 202.0
(byte*) main::angle#1 angle zp[2]:6 500.5
(byte*) main::angle#2 angle zp[2]:6 344.8888888888889
(byte*) main::dist
(byte*) main::dist#0 dist zp[2]:4 101.0
(byte*) main::dist#1 dist zp[2]:4 400.4
(byte*) main::dist#2 dist zp[2]:4 388.0
(word) main::dist_angle
(word) main::dist_angle#0 dist_angle zp[2]:12 1001.0
(byte*) main::fill
(byte*) main::fill#1 fill zp[2]:2 1001.0
(byte*) main::fill#2 fill zp[2]:2 400.4
(word) main::min_dist_angle
(word) main::min_dist_angle#2 min_dist_angle zp[2]:8 1001.0
(word) main::min_dist_angle#3 min_dist_angle_1 zp[2]:12 821.0
(word) main::min_dist_angle#6 min_dist_angle zp[2]:8 2002.0
(word) main::min_dist_angle#7 min_dist_angle_1 zp[2]:12 2002.0
(word) main::min_dist_angle#8 min_dist_angle_1 zp[2]:12 2002.0
(byte*) main::min_fill
(byte*) main::min_fill#10 min_fill zp[2]:10 2002.0
(byte*) main::min_fill#2 min_fill zp[2]:10 586.4285714285714
(byte*) main::min_fill#5 min_fill zp[2]:10 500.5
(void*()) malloc((word) malloc::size)
(label) malloc::@return
(byte*) malloc::mem
(byte*) malloc::mem#0 mem zp[2]:4 3333.6666666666665
(void*) malloc::return
(word) malloc::size
(word) malloc::size#3 size zp[2]:4 10001.0
(word()) sqr((byte) sqr::val)
(byte~) sqr::$0 reg byte a 200002.0
(label) sqr::@return
(word) sqr::return
(word) sqr::return#0 return zp[2]:33 27750.75
(word) sqr::return#2 return_1 zp[2]:31 2002.0
(word) sqr::return#3 return zp[2]:33 20002.0
(byte) sqr::val
(byte) sqr::val#0 reg byte a 2002.0
(byte) sqr::val#1 reg byte a 20002.0
(byte) sqr::val#2 reg byte a 111003.0
(byte()) sqrt((word) sqrt::val)
(word~) sqrt::$1 zp[2]:25 100001.0
(word~) sqrt::$2 zp[2]:25 200002.0
(label) sqrt::@1
(label) sqrt::@return
(word*) sqrt::found
(word*) sqrt::found#0 found zp[2]:25 200002.0
(byte) sqrt::return
(byte) sqrt::return#0 reg byte a 36667.33333333333
(byte) sqrt::return#2 reg byte a 20002.0
(byte) sqrt::sq
(word) sqrt::val
(word) sqrt::val#0 val zp[2]:33 110002.0
zp[2]:2 [ main::fill#2 main::fill#1 heap_head#13 heap_head#0 ]
zp[2]:4 [ main::dist#2 main::dist#0 main::dist#1 malloc::size#3 malloc::mem#0 SQUARES#0 ]
zp[2]:6 [ main::angle#2 main::angle#0 main::angle#1 ]
zp[2]:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ]
zp[2]:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ]
zp[2]:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ]
reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
zp[1]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 init_dist_screen::y#10 init_dist_screen::y#1 ]
zp[2]:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
zp[2]:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 init_dist_screen::x#2 init_dist_screen::x#1 ]
zp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 init_dist_screen::xb#2 init_dist_screen::xb#1 ]
2020-02-15 08:30:27 +00:00
reg byte x [ init_squares::i#2 init_squares::i#1 ]
reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ]
zp[2]:21 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 init_squares::sqr#2 init_squares::sqr#1 ]
zp[2]:23 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp[2]:25 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$2 sqrt::$1 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ]
reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
zp[2]:27 [ SCREEN_DIST#0 ]
zp[2]:29 [ SCREEN_ANGLE#0 ]
reg byte a [ init_dist_screen::y2#0 ]
zp[2]:31 [ sqr::return#2 init_dist_screen::yds#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
reg byte a [ init_dist_screen::x2#0 ]
zp[2]:33 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
reg byte a [ sqrt::return#2 ]
reg byte a [ init_dist_screen::d#0 ]
reg byte a [ init_angle_screen::$3 ]
reg byte a [ init_angle_screen::$4 ]
reg byte a [ init_angle_screen::$5 ]
zp[1]:35 [ init_angle_screen::ang_w#0 ]
reg byte a [ init_angle_screen::$9 ]
reg byte a [ init_angle_screen::$10 ]
reg byte a [ init_angle_screen::$11 ]
reg byte a [ init_squares::$3 ]
reg byte a [ init_squares::$4 ]
reg byte a [ sqr::$0 ]
reg byte a [ sqrt::return#0 ]
reg byte a [ atan2_16::$23 ]
reg byte a [ atan2_16::$22 ]
reg byte a [ bsearch16u::$6 ]
reg byte a [ bsearch16u::$14 ]
zp[2]:36 [ bsearch16u::pivot#0 init_angle_screen::xw#0 atan2_16::x#0 ]
zp[2]:38 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 ]
FINAL ASSEMBLER
Score: 1112770
// File Comments
// Fill screen using a spiral based on distance-to-center / angle-to-center
// Upstart
.pc = $801 "Basic"
:BasicUpstart(__start)
.pc = $80d "Program"
// Global Constants & labels
.const SIZEOF_WORD = 2
// The number of iterations performed during 16-bit CORDIC atan2 calculation
.const CORDIC_ITERATIONS_16 = $f
// Char to fill with
.const FILL_CHAR = '@'
// The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt()
.const NUM_SQUARES = $30
// Screen containing angle to center
.label SCREEN_FILL = $400
// Top of the heap used by malloc()
.label HEAP_TOP = $a000
// Head of the heap. Moved backward each malloc()
.label heap_head = 2
// Squares for each char value SQUARES[i] = i*i
// Initialized by init_squares()
.label SQUARES = 4
2020-06-27 19:18:00 +00:00
// Screen containing distance to center
.label SCREEN_DIST = $1b
2020-06-27 19:18:00 +00:00
// Screen containing angle to center
.label SCREEN_ANGLE = $1d
// __start
__start: {
// [1] phi from __start to __start::__init1 [phi:__start->__start::__init1]
// __start::__init1
2020-06-27 19:18:00 +00:00
// malloc(1000)
// [2] call malloc
// [9] phi from __start::__init1 to malloc [phi:__start::__init1->malloc]
// [9] phi (word) malloc::size#3 = (word) $3e8 [phi:__start::__init1->malloc#0] -- vwuz1=vwuc1
2020-06-27 19:18:00 +00:00
lda #<$3e8
sta.z malloc.size
lda #>$3e8
sta.z malloc.size+1
// [9] phi (byte*) heap_head#13 = (const byte*) HEAP_TOP [phi:__start::__init1->malloc#1] -- pbuz1=pbuc1
2020-06-27 19:18:00 +00:00
lda #<HEAP_TOP
sta.z heap_head
lda #>HEAP_TOP
sta.z heap_head+1
jsr malloc
// __start::@2
2020-06-27 19:18:00 +00:00
// malloc(1000)
// [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_DIST
lda.z malloc.mem+1
sta.z SCREEN_DIST+1
// [4] call malloc
// [9] phi from __start::@2 to malloc [phi:__start::@2->malloc]
// [9] phi (word) malloc::size#3 = (word) $3e8 [phi:__start::@2->malloc#0] -- vwuz1=vwuc1
2020-06-27 19:18:00 +00:00
lda #<$3e8
sta.z malloc.size
lda #>$3e8
sta.z malloc.size+1
// [9] phi (byte*) heap_head#13 = (byte*) heap_head#0 [phi:__start::@2->malloc#1] -- register_copy
2020-06-27 19:18:00 +00:00
jsr malloc
// __start::@3
2020-06-27 19:18:00 +00:00
// malloc(1000)
// [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_ANGLE
lda.z malloc.mem+1
sta.z SCREEN_ANGLE+1
// [6] phi from __start::@3 to __start::@1 [phi:__start::@3->__start::@1]
// __start::@1
2020-06-27 19:18:00 +00:00
// [7] call main
jsr main
// __start::@return
2020-06-27 19:18:00 +00:00
// [8] return
rts
}
// malloc
// Allocates a block of size chars of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
// malloc(word zp(4) size)
malloc: {
.label mem = 4
.label size = 4
// mem = heap_head-size
// [10] (byte*) malloc::mem#0 ← (byte*) heap_head#13 - (word) malloc::size#3 -- pbuz1=pbuz2_minus_vwuz1
lda.z heap_head
sec
sbc.z mem
sta.z mem
lda.z heap_head+1
sbc.z mem+1
sta.z mem+1
// heap_head = mem
// [11] (byte*) heap_head#0 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2
lda.z mem
sta.z heap_head
lda.z mem+1
sta.z heap_head+1
// malloc::@return
// }
// [12] return
rts
2020-06-27 19:18:00 +00:00
}
// main
main: {
.label dist = 4
.label angle = 6
.label fill = 2
.label dist_angle = $c
.label min_dist_angle = 8
.label min_dist_angle_1 = $c
.label min_fill = $a
// init_dist_screen(SCREEN_DIST)
// [13] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2
lda.z SCREEN_DIST
sta.z init_dist_screen.screen
lda.z SCREEN_DIST+1
sta.z init_dist_screen.screen+1
// [14] call init_dist_screen
// [35] phi from main to init_dist_screen [phi:main->init_dist_screen]
jsr init_dist_screen
// main::@8
// init_angle_screen(SCREEN_ANGLE)
// [15] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2
lda.z SCREEN_ANGLE
sta.z init_angle_screen.screen
lda.z SCREEN_ANGLE+1
sta.z init_angle_screen.screen+1
// [16] call init_angle_screen
jsr init_angle_screen
// main::@1
__b1:
// dist = SCREEN_DIST
// [17] (byte*) main::dist#0 ← (byte*)(void*) SCREEN_DIST#0 -- pbuz1=pbuz2
// Find the minimum dist/angle that is not already filled
lda.z SCREEN_DIST
sta.z dist
lda.z SCREEN_DIST+1
sta.z dist+1
// angle = SCREEN_ANGLE
// [18] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 -- pbuz1=pbuz2
lda.z SCREEN_ANGLE
sta.z angle
lda.z SCREEN_ANGLE+1
sta.z angle+1
// [19] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
// [19] phi (byte*) main::min_fill#5 = (const nomodify byte*) SCREEN_FILL [phi:main::@1->main::@2#0] -- pbuz1=pbuc1
lda #<SCREEN_FILL
sta.z min_fill
lda #>SCREEN_FILL
sta.z min_fill+1
// [19] phi (word) main::min_dist_angle#2 = (word) $ffff [phi:main::@1->main::@2#1] -- vwuz1=vwuc1
lda #<$ffff
sta.z min_dist_angle
lda #>$ffff
sta.z min_dist_angle+1
// [19] phi (byte*) main::angle#2 = (byte*) main::angle#0 [phi:main::@1->main::@2#2] -- register_copy
// [19] phi (byte*) main::dist#2 = (byte*) main::dist#0 [phi:main::@1->main::@2#3] -- register_copy
// [19] phi (byte*) main::fill#2 = (const nomodify byte*) SCREEN_FILL [phi:main::@1->main::@2#4] -- pbuz1=pbuc1
lda #<SCREEN_FILL
sta.z fill
lda #>SCREEN_FILL
sta.z fill+1
// main::@2
__b2:
// if(*fill!=FILL_CHAR)
// [20] if(*((byte*) main::fill#2)==(const nomodify byte) FILL_CHAR) goto main::@10 -- _deref_pbuz1_eq_vbuc1_then_la1
lda #FILL_CHAR
ldy #0
cmp (fill),y
beq __b10
// main::@4
// dist_angle = { *dist, *angle }
// [21] (word) main::dist_angle#0 ← *((byte*) main::dist#2) w= *((byte*) main::angle#2) -- vwuz1=_deref_pbuz2_word__deref_pbuz3
lda (angle),y
sta.z dist_angle
lda (dist),y
sta.z dist_angle+1
// if(dist_angle<min_dist_angle)
// [22] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@11 -- vwuz1_ge_vwuz2_then_la1
lda.z min_dist_angle+1
cmp.z dist_angle+1
bne !+
lda.z min_dist_angle
cmp.z dist_angle
beq __b11
!:
bcc __b11
// main::@5
// [23] (byte*) main::min_fill#10 ← (byte*) main::fill#2 -- pbuz1=pbuz2
lda.z fill
sta.z min_fill
lda.z fill+1
sta.z min_fill+1
// [24] phi from main::@10 main::@11 main::@5 to main::@3 [phi:main::@10/main::@11/main::@5->main::@3]
// [24] phi (byte*) main::min_fill#2 = (byte*) main::min_fill#5 [phi:main::@10/main::@11/main::@5->main::@3#0] -- register_copy
// [24] phi (word) main::min_dist_angle#3 = (word) main::min_dist_angle#7 [phi:main::@10/main::@11/main::@5->main::@3#1] -- register_copy
// main::@3
__b3:
// dist++;
// [25] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 -- pbuz1=_inc_pbuz1
inc.z dist
bne !+
inc.z dist+1
!:
// angle++;
// [26] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 -- pbuz1=_inc_pbuz1
inc.z angle
bne !+
inc.z angle+1
!:
// fill++;
// [27] (byte*) main::fill#1 ← ++ (byte*) main::fill#2 -- pbuz1=_inc_pbuz1
inc.z fill
bne !+
inc.z fill+1
!:
// while (fill<SCREEN_FILL+1000)
// [28] if((byte*) main::fill#1<(const nomodify byte*) SCREEN_FILL+(word) $3e8) goto main::@9 -- pbuz1_lt_pbuc1_then_la1
lda.z fill+1
cmp #>SCREEN_FILL+$3e8
bcc __b9
bne !+
lda.z fill
cmp #<SCREEN_FILL+$3e8
bcc __b9
!:
// main::@6
// if(min_dist_angle==0xffff)
// [29] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@7 -- vwuz1_neq_vwuc1_then_la1
lda.z min_dist_angle_1+1
cmp #>$ffff
bne __b7
lda.z min_dist_angle_1
cmp #<$ffff
bne __b7
// main::@return
// }
// [30] return
rts
// main::@7
__b7:
// *min_fill = FILL_CHAR
// [31] *((byte*) main::min_fill#2) ← (const nomodify byte) FILL_CHAR -- _deref_pbuz1=vbuc1
// Fill the found location
lda #FILL_CHAR
ldy #0
sta (min_fill),y
jmp __b1
// main::@9
__b9:
// [32] (word) main::min_dist_angle#6 ← (word) main::min_dist_angle#3 -- vwuz1=vwuz2
lda.z min_dist_angle_1
sta.z min_dist_angle
lda.z min_dist_angle_1+1
sta.z min_dist_angle+1
// [19] phi from main::@9 to main::@2 [phi:main::@9->main::@2]
// [19] phi (byte*) main::min_fill#5 = (byte*) main::min_fill#2 [phi:main::@9->main::@2#0] -- register_copy
// [19] phi (word) main::min_dist_angle#2 = (word) main::min_dist_angle#6 [phi:main::@9->main::@2#1] -- register_copy
// [19] phi (byte*) main::angle#2 = (byte*) main::angle#1 [phi:main::@9->main::@2#2] -- register_copy
// [19] phi (byte*) main::dist#2 = (byte*) main::dist#1 [phi:main::@9->main::@2#3] -- register_copy
// [19] phi (byte*) main::fill#2 = (byte*) main::fill#1 [phi:main::@9->main::@2#4] -- register_copy
jmp __b2
// main::@11
__b11:
// [33] (word) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 -- vwuz1=vwuz2
lda.z min_dist_angle
sta.z min_dist_angle_1
lda.z min_dist_angle+1
sta.z min_dist_angle_1+1
jmp __b3
// main::@10
__b10:
// [34] (word) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 -- vwuz1=vwuz2
lda.z min_dist_angle
sta.z min_dist_angle_1
lda.z min_dist_angle+1
sta.z min_dist_angle_1+1
jmp __b3
}
// init_dist_screen
// Populates 1000 bytes (a screen) with values representing the distance to the center.
// The actual value stored is distance*2 to increase precision
// init_dist_screen(byte* zp($f) screen)
init_dist_screen: {
.label screen = $f
.label screen_bottomline = $11
.label yds = $1f
.label screen_topline = $f
.label y = $e
.label xds = $21
.label ds = $21
.label x = $13
.label xb = $14
// init_squares()
// [36] call init_squares
// [106] phi from init_dist_screen to init_squares [phi:init_dist_screen->init_squares]
jsr init_squares
// init_dist_screen::@11
// screen_bottomline = screen+40*24
// [37] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 -- pbuz1=pbuz2_plus_vwuc1
lda.z screen
clc
adc #<$28*$18
sta.z screen_bottomline
lda.z screen+1
adc #>$28*$18
sta.z screen_bottomline+1
// [38] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
// [38] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#0 [phi:init_dist_screen::@11->init_dist_screen::@1#0] -- register_copy
// [38] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen#0 [phi:init_dist_screen::@11->init_dist_screen::@1#1] -- register_copy
// [38] phi (byte) init_dist_screen::y#10 = (byte) 0 [phi:init_dist_screen::@11->init_dist_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
// [38] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
// [38] phi (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#0] -- register_copy
// [38] phi (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#1 [phi:init_dist_screen::@7->init_dist_screen::@1#1] -- register_copy
// [38] phi (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#1 [phi:init_dist_screen::@7->init_dist_screen::@1#2] -- register_copy
// init_dist_screen::@1
__b1:
// y2 = y*2
// [39] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z y
asl
// (y2>=24)?(y2-24):(24-y2)
// [40] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 -- vbuaa_ge_vbuc1_then_la1
cmp #$18
bcs __b2
// init_dist_screen::@3
// [41] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$18
// [42] phi from init_dist_screen::@2 init_dist_screen::@3 to init_dist_screen::@4 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4]
// [42] phi (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$7 [phi:init_dist_screen::@2/init_dist_screen::@3->init_dist_screen::@4#0] -- register_copy
// init_dist_screen::@4
__b4:
// sqr(yd)
// [43] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
// [44] call sqr
// [119] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
// [119] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy
jsr sqr
// sqr(yd)
// [45] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2
lda.z sqr.return
sta.z sqr.return_1
lda.z sqr.return+1
sta.z sqr.return_1+1
// init_dist_screen::@12
// yds = sqr(yd)
// [46] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
// [47] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
// [47] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [47] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1
lda #0
sta.z x
// init_dist_screen::@5
__b5:
// for( byte x=0,xb=39; x<=19; x++, xb--)
// [48] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b6
// init_dist_screen::@7
// screen_topline += 40
// [49] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_topline
sta.z screen_topline
bcc !+
inc.z screen_topline+1
!:
// screen_bottomline -= 40
// [50] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_bottomline
sbc #$28
sta.z screen_bottomline
lda.z screen_bottomline+1
sbc #0
sta.z screen_bottomline+1
// for(byte y: 0..12)
// [51] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1
inc.z y
// [52] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1
// init_dist_screen::@return
// }
// [53] return
rts
// init_dist_screen::@6
__b6:
// x2 = x*2
// [54] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z x
asl
// (x2>=39)?(x2-39):(39-x2)
// [55] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 -- vbuaa_ge_vbuc1_then_la1
cmp #$27
bcs __b8
// init_dist_screen::@9
// [56] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$27
// [57] phi from init_dist_screen::@8 init_dist_screen::@9 to init_dist_screen::@10 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10]
// [57] phi (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$16 [phi:init_dist_screen::@8/init_dist_screen::@9->init_dist_screen::@10#0] -- register_copy
// init_dist_screen::@10
__b10:
// sqr(xd)
// [58] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
// [59] call sqr
// [119] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
// [119] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy
jsr sqr
// sqr(xd)
// [60] (word) sqr::return#3 ← (word) sqr::return#0
// init_dist_screen::@13
// xds = sqr(xd)
// [61] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
// ds = xds+yds
// [62] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 -- vwuz1=vwuz1_plus_vwuz2
lda.z ds
clc
adc.z yds
sta.z ds
lda.z ds+1
adc.z yds+1
sta.z ds+1
// sqrt(ds)
// [63] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
// [64] call sqrt
jsr sqrt
// [65] (byte) sqrt::return#2 ← (byte) sqrt::return#0
// init_dist_screen::@14
// d = sqrt(ds)
// [66] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
// screen_topline[x] = d
// [67] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_topline),y
// screen_bottomline[x] = d
// [68] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa
sta (screen_bottomline),y
// screen_topline[xb] = d
// [69] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z xb
sta (screen_topline),y
// screen_bottomline[xb] = d
// [70] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa
sta (screen_bottomline),y
// for( byte x=0,xb=39; x<=19; x++, xb--)
// [71] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [72] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [47] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5]
// [47] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy
// [47] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy
jmp __b5
// init_dist_screen::@8
__b8:
// (x2>=39)?(x2-39):(39-x2)
// [73] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #$27
jmp __b10
// init_dist_screen::@2
__b2:
// (y2>=24)?(y2-24):(24-y2)
// [74] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #$18
jmp __b4
}
// init_angle_screen
// Populates 1000 bytes (a screen) with values representing the angle to the center.
// Utilizes symmetry around the center
// init_angle_screen(byte* zp($11) screen)
init_angle_screen: {
.label __7 = $19
.label screen = $11
.label screen_bottomline = $11
.label xw = $24
.label yw = $26
.label angle_w = $19
.label ang_w = $23
.label x = $13
.label xb = $14
.label screen_topline = $f
.label y = $e
// screen_topline = screen+40*12
// [75] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c -- pbuz1=pbuz1_plus_vwuc1
clc
lda.z screen_bottomline
adc #<$28*$c
sta.z screen_bottomline
lda.z screen_bottomline+1
adc #>$28*$c
sta.z screen_bottomline+1
// [76] (byte*) init_angle_screen::screen_topline#7 ← (byte*) init_angle_screen::screen_bottomline#0 -- pbuz1=pbuz2
lda.z screen_bottomline
sta.z screen_topline
lda.z screen_bottomline+1
sta.z screen_topline+1
// [77] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
// [77] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy
// [77] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#7 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy
// [77] phi (byte) init_angle_screen::y#5 = (byte) 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
// [77] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
// [77] phi (byte*) init_angle_screen::screen_bottomline#6 = (byte*) init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy
// [77] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy
// [77] phi (byte) init_angle_screen::y#5 = (byte) init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy
// init_angle_screen::@1
__b1:
// [78] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
// [78] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [78] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1
lda #0
sta.z x
// init_angle_screen::@2
__b2:
// for( byte x=0,xb=39; x<=19; x++, xb--)
// [79] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b3
// init_angle_screen::@4
// screen_topline -= 40
// [80] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_topline
sbc #$28
sta.z screen_topline
lda.z screen_topline+1
sbc #0
sta.z screen_topline+1
// screen_bottomline += 40
// [81] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_bottomline
sta.z screen_bottomline
bcc !+
inc.z screen_bottomline+1
!:
// for(byte y: 0..12)
// [82] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1
inc.z y
// [83] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1
// init_angle_screen::@return
// }
// [84] return
rts
// init_angle_screen::@3
__b3:
// x*2
// [85] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z x
asl
// 39-x*2
// [86] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$27
// xw = (signed word)(word){ 39-x*2, 0 }
// [87] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1
ldy #0
sta.z xw+1
sty.z xw
// y*2
// [88] (byte~) init_angle_screen::$5 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda.z y
asl
// yw = (signed word)(word){ y*2, 0 }
// [89] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$5 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1
sta.z yw+1
sty.z yw
// atan2_16(xw, yw)
// [90] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
// [91] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
// [92] call atan2_16
jsr atan2_16
// [93] (word) atan2_16::return#2 ← (word) atan2_16::return#0
// init_angle_screen::@5
// angle_w = atan2_16(xw, yw)
// [94] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
// angle_w+0x0080
// [95] (word~) init_angle_screen::$7 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1
lda #$80
clc
adc.z __7
sta.z __7
bcc !+
inc.z __7+1
!:
// ang_w = >(angle_w+0x0080)
// [96] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$7 -- vbuz1=_hi_vwuz2
lda.z __7+1
sta.z ang_w
// screen_bottomline[xb] = ang_w
// [97] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3
ldy.z xb
sta (screen_bottomline),y
// -ang_w
// [98] (byte~) init_angle_screen::$9 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1
eor #$ff
clc
adc #1
// screen_topline[xb] = -ang_w
// [99] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$9 -- pbuz1_derefidx_vbuz2=vbuaa
sta (screen_topline),y
// 0x80+ang_w
// [100] (byte~) init_angle_screen::$10 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1
lda #$80
clc
adc.z ang_w
// screen_topline[x] = 0x80+ang_w
// [101] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$10 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_topline),y
// 0x80-ang_w
// [102] (byte~) init_angle_screen::$11 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1
lda #$80
sec
sbc.z ang_w
// screen_bottomline[x] = 0x80-ang_w
// [103] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$11 -- pbuz1_derefidx_vbuz2=vbuaa
sta (screen_bottomline),y
// for( byte x=0,xb=39; x<=19; x++, xb--)
// [104] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [105] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [78] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
// [78] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy
// [78] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy
jmp __b2
}
// init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
.label squares = $17
.label sqr = $15
// malloc(NUM_SQUARES*sizeof(unsigned int))
// [107] call malloc
// [9] phi from init_squares to malloc [phi:init_squares->malloc]
// [9] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#2*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1
lda #<NUM_SQUARES*SIZEOF_WORD
sta.z malloc.size
lda #>NUM_SQUARES*SIZEOF_WORD
sta.z malloc.size+1
// [9] phi (byte*) heap_head#13 = (byte*) heap_head#0 [phi:init_squares->malloc#1] -- register_copy
jsr malloc
// init_squares::@3
// malloc(NUM_SQUARES*sizeof(unsigned int))
// [108] (void*) SQUARES#0 ← (void*)(byte*) malloc::mem#0
// squares = SQUARES
// [109] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#0 -- pwuz1=pwuz2
lda.z SQUARES
sta.z squares
lda.z SQUARES+1
sta.z squares+1
// [110] phi from init_squares::@3 to init_squares::@1 [phi:init_squares::@3->init_squares::@1]
// [110] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@3->init_squares::@1#0] -- register_copy
// [110] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@3->init_squares::@1#1] -- vwuz1=vwuc1
lda #<0
sta.z sqr
sta.z sqr+1
// [110] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@3->init_squares::@1#2] -- vbuxx=vbuc1
tax
// init_squares::@1
__b1:
// for(char i=0;i<NUM_SQUARES;i++)
// [111] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#2) goto init_squares::@2 -- vbuxx_lt_vbuc1_then_la1
cpx #NUM_SQUARES
bcc __b2
// init_squares::@return
// }
// [112] return
rts
// init_squares::@2
__b2:
// *squares++ = sqr
// [113] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2
ldy #0
lda.z sqr
sta (squares),y
iny
lda.z sqr+1
sta (squares),y
// *squares++ = sqr;
// [114] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1
lda #SIZEOF_WORD
clc
adc.z squares
sta.z squares
bcc !+
inc.z squares+1
!:
// i*2
// [115] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
txa
asl
// i*2+1
// [116] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1
clc
adc #1
// sqr += i*2+1
// [117] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa
clc
adc.z sqr
sta.z sqr
bcc !+
inc.z sqr+1
!:
// for(char i=0;i<NUM_SQUARES;i++)
// [118] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx
inx
// [110] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
// [110] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@2->init_squares::@1#0] -- register_copy
// [110] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@2->init_squares::@1#1] -- register_copy
// [110] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@2->init_squares::@1#2] -- register_copy
jmp __b1
}
// sqr
// Find the square of a char value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte register(A) val)
sqr: {
.label return = $21
.label return_1 = $1f
// return SQUARES[val];
// [120] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
// [121] (word) sqr::return#0 ← *((word*)(void*) SQUARES#0 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa
tay
lda (SQUARES),y
sta.z return
iny
lda (SQUARES),y
sta.z return+1
// sqr::@return
// }
// [122] return
rts
}
// sqrt
// Find the (integer) square root of a unsigned int value
// If the square is not an integer then it returns the largest integer N where N*N <= val
// Uses a table of squares that must be initialized by calling init_squares()
// sqrt(word zp($21) val)
sqrt: {
.label __1 = $19
.label __2 = $19
.label found = $19
.label val = $21
// bsearch16u(val, SQUARES, NUM_SQUARES)
// [123] (word) bsearch16u::key#0 ← (word) sqrt::val#0
// [124] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#0 -- pwuz1=pwuz2
lda.z SQUARES
sta.z bsearch16u.items
lda.z SQUARES+1
sta.z bsearch16u.items+1
// [125] call bsearch16u
// [175] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
jsr bsearch16u
// bsearch16u(val, SQUARES, NUM_SQUARES)
// [126] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
// sqrt::@1
// found = bsearch16u(val, SQUARES, NUM_SQUARES)
// [127] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
// found-SQUARES
// [128] (word~) sqrt::$2 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#0 -- vwuz1=pwuz1_minus_pwuz2
lda.z __2
sec
sbc.z SQUARES
sta.z __2
lda.z __2+1
sbc.z SQUARES+1
sta.z __2+1
// [129] (word~) sqrt::$1 ← (word~) sqrt::$2 >> (byte) 1 -- vwuz1=vwuz1_ror_1
lsr.z __1+1
ror.z __1
// sq = (char)(found-SQUARES)
// [130] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1
lda.z __1
// sqrt::@return
// }
// [131] return
rts
}
// atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($24) x, signed word zp($26) y)
atan2_16: {
.label __2 = $15
.label __7 = $17
.label yi = $15
.label xi = $17
.label angle = $19
.label xd = $21
.label yd = $1f
.label return = $19
.label x = $24
.label y = $26
// (y>=0)?y:-y
// [132] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
lda.z y+1
bmi !__b1+
jmp __b1
!__b1:
// atan2_16::@2
// [133] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z y
sta.z __2
lda #0
sbc.z y+1
sta.z __2+1
// [134] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
// [134] phi (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy
// atan2_16::@3
__b3:
// (x>=0)?x:-x
// [135] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
lda.z x+1
bmi !__b4+
jmp __b4
!__b4:
// atan2_16::@5
// [136] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z x
sta.z __7
lda #0
sbc.z x+1
sta.z __7+1
// [137] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
// [137] phi (signed word) atan2_16::xi#0 = (signed word) atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
// atan2_16::@6
__b6:
// [138] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
// [138] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
lda #<0
sta.z angle
sta.z angle+1
// [138] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
tax
// [138] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
// [138] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
// atan2_16::@10
__b10:
// if(yi==0)
// [139] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
lda.z yi+1
bne __b11
lda.z yi
bne __b11
// [140] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
// [140] phi (word) atan2_16::angle#6 = (word) atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
// atan2_16::@12
__b12:
// angle /=2
// [141] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1
lsr.z angle+1
ror.z angle
// if(x<0)
// [142] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b7
// atan2_16::@21
// angle = 0x8000-angle
// [143] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
sec
lda #<$8000
sbc.z angle
sta.z angle
lda #>$8000
sbc.z angle+1
sta.z angle+1
// [144] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
// [144] phi (word) atan2_16::angle#11 = (word) atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
// atan2_16::@7
__b7:
// if(y<0)
// [145] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b8
// atan2_16::@9
// angle = -angle
// [146] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 -- vwuz1=_neg_vwuz1
sec
lda #0
sbc.z angle
sta.z angle
lda #0
sbc.z angle+1
sta.z angle+1
// [147] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
// [147] phi (word) atan2_16::return#0 = (word) atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy
// atan2_16::@8
__b8:
// atan2_16::@return
// }
// [148] return
rts
// atan2_16::@11
__b11:
// [149] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx
txa
tay
// [150] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 -- vwsz1=vwsz2
lda.z xi
sta.z xd
lda.z xi+1
sta.z xd+1
// [151] (signed word) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 -- vwsz1=vwsz2
lda.z yi
sta.z yd
lda.z yi+1
sta.z yd+1
// [152] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
// [152] phi (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
// [152] phi (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
// [152] phi (byte) atan2_16::shift#2 = (byte) atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
// atan2_16::@13
__b13:
// while(shift>=2)
// [153] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1
cpy #2
bcs __b14
// atan2_16::@15
// if(shift)
// [154] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -- vbuc1_eq_vbuyy_then_la1
cpy #0
beq __b17
// atan2_16::@16
// xd >>= 1
// [155] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// yd >>= 1
// [156] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 -- vwsz1=vwsz1_ror_1
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [157] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
// [157] phi (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
// [157] phi (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
// atan2_16::@17
__b17:
// if(yi>=0)
// [158] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
lda.z yi+1
bpl __b18
// atan2_16::@20
// xi -= yd
// [159] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z xi
sec
sbc.z yd
sta.z xi
lda.z xi+1
sbc.z yd+1
sta.z xi+1
// yi += xd
// [160] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z yi
clc
adc.z xd
sta.z yi
lda.z yi+1
adc.z xd+1
sta.z yi+1
// angle -= CORDIC_ATAN2_ANGLES_16[i]
// [161] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [162] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
tay
sec
lda.z angle
sbc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
sbc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
// [163] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
// [163] phi (signed word) atan2_16::xi#8 = (signed word) atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
// [163] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
// [163] phi (signed word) atan2_16::yi#8 = (signed word) atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy
// atan2_16::@19
__b19:
// for( char i: 0..CORDIC_ITERATIONS_16-1)
// [164] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx
inx
// [165] if((byte) atan2_16::i#1==(const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1
cpx #CORDIC_ITERATIONS_16-1+1
bne !__b12+
jmp __b12
!__b12:
// [138] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
// [138] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
// [138] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
// [138] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
// [138] phi (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@18
__b18:
// xi += yd
// [166] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z xi
clc
adc.z yd
sta.z xi
lda.z xi+1
adc.z yd+1
sta.z xi+1
// yi -= xd
// [167] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z yi
sec
sbc.z xd
sta.z yi
lda.z yi+1
sbc.z xd+1
sta.z yi+1
// angle += CORDIC_ATAN2_ANGLES_16[i]
// [168] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [169] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa
tay
clc
lda.z angle
adc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
adc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
jmp __b19
// atan2_16::@14
__b14:
// xd >>= 2
// [170] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// yd >>= 2
// [171] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 -- vwsz1=vwsz1_ror_2
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// shift -=2
// [172] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2
dey
dey
jmp __b13
// atan2_16::@4
__b4:
// (x>=0)?x:-x
// [173] (signed word) atan2_16::xi#13 ← (signed word) atan2_16::x#0 -- vwsz1=vwsz2
lda.z x
sta.z xi
lda.z x+1
sta.z xi+1
jmp __b6
// atan2_16::@1
__b1:
// (y>=0)?y:-y
// [174] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 -- vwsz1=vwsz2
lda.z y
sta.z yi
lda.z y+1
sta.z yi+1
jmp __b3
}
// bsearch16u
// Searches an array of nitems unsigned ints, the initial member of which is pointed to by base, for a member that matches the value key.
// - key - The value to look for
// - items - Pointer to the start of the array to search in
// - num - The number of items in the array
// Returns pointer to an entry in the array that matches the search key
// bsearch16u(word zp($21) key, word* zp($19) items, byte register(X) num)
bsearch16u: {
.label __2 = $19
.label pivot = $24
.label result = $26
.label return = $19
.label items = $19
.label key = $21
// [176] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
// [176] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy
// [176] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#2 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1
ldx #NUM_SQUARES
// bsearch16u::@3
__b3:
// while (num > 0)
// [177] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1
cpx #0
bne __b4
// bsearch16u::@5
// *items<=key?items:items-1
// [178] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1
ldy #1
lda (items),y
cmp.z key+1
bne !+
dey
lda (items),y
cmp.z key
beq __b2
!:
bcc __b2
// bsearch16u::@1
// [179] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vbuc1
sec
lda.z __2
sbc #1*SIZEOF_WORD
sta.z __2
lda.z __2+1
sbc #0
sta.z __2+1
// [180] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
// [180] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy
// bsearch16u::@2
__b2:
// [181] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
// [181] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy
// bsearch16u::@return
// }
// [182] return
rts
// bsearch16u::@4
__b4:
// num >> 1
// [183] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1
txa
lsr
// items + (num >> 1)
// [184] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
// [185] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$14 -- pwuz1=pwuz2_plus_vbuaa
clc
adc.z items
sta.z pivot
lda #0
adc.z items+1
sta.z pivot+1
// result = (signed int)key-(signed int)*pivot
// [186] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) -- vwsz1=vwsz2_minus__deref_pwsz3
sec
lda.z key
ldy #0
sbc (pivot),y
sta.z result
lda.z key+1
iny
sbc (pivot),y
sta.z result+1
// if (result == 0)
// [187] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1
bne __b6
lda.z result
bne __b6
// bsearch16u::@8
// [188] (word*) bsearch16u::return#7 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2
lda.z pivot
sta.z return
lda.z pivot+1
sta.z return+1
rts
// bsearch16u::@6
__b6:
// if (result > 0)
// [189] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1
lda.z result+1
bmi __b7
bne !+
lda.z result
beq __b7
!:
// bsearch16u::@9
// items = pivot+1
// [190] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1
lda #1*SIZEOF_WORD
clc
adc.z pivot
sta.z items
lda #0
adc.z pivot+1
sta.z items+1
// num--;
// [191] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx
dex
// [192] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
// [192] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy
// [192] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy
// bsearch16u::@7
__b7:
// num >>= 1
// [193] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1
txa
lsr
tax
// [176] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
// [176] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy
// [176] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy
jmp __b3
}
// File Data
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
CORDIC_ATAN2_ANGLES_16:
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2