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 ) (byte*~) malloc::$0 ← (byte*) heap_head#13 - (word) malloc::size#3 (byte*) malloc::mem#0 ← (byte*~) malloc::$0 (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 (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 (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 (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 (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 (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 (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 ) (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 ) (bool~) init_squares::$2 ← (byte) init_squares::i#2 < (byte) NUM_SQUARES#8 if((bool~) init_squares::$2) goto init_squares::@2 to:init_squares::@return init_squares::@2: scope:[init_squares] from init_squares::@1 (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 ) (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 (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 (byte) init_squares::i#1 ← ++ (byte) init_squares::i#3 to:init_squares::@1 init_squares::@return: scope:[init_squares] from init_squares::@1 (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 (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 (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 (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 (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 (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 (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 (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 (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 ) (byte*) init_dist_screen::screen#0 ← (byte*) SCREEN_DIST#2 call init_dist_screen to:main::@9 main::@9: scope:[main] from main (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 (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 (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 (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 (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 ) (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 (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 ) (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 (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 ) (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 (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 ) (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 (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 (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 (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 ) (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 (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 ) (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 (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 ) (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 (byte*) heap_head#46 ← phi( init_dist_screen::@1/(byte*) heap_head#49 ) (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 ) (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 (byte*) heap_head#47 ← phi( init_dist_screen::@1/(byte*) heap_head#49 ) (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 ) (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 (byte*) heap_head#44 ← phi( init_dist_screen::@2/(byte*) heap_head#46 init_dist_screen::@3/(byte*) heap_head#47 ) (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 ) (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 (word*) SQUARES#43 ← phi( init_dist_screen::@4/(word*) SQUARES#21 ) (byte*) heap_head#41 ← phi( init_dist_screen::@4/(byte*) heap_head#44 ) (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 ) (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 ) (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 (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 ) (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 ) (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 (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 (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 ) (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 ) (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 (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 ) (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 ) (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 (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 ) (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 ) (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 (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 ) (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 ) (word*) SQUARES#44 ← phi( init_dist_screen::@13/(word*) SQUARES#22 ) (byte*) heap_head#42 ← phi( init_dist_screen::@13/(byte*) heap_head#45 ) (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 (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 (void()) __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start (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 (byte*) heap_head#9 ← (byte*) heap_head#21 (byte*) SCREEN_DIST#0 ← ((byte*)) (void*~) __start::__init1_$0 (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 (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 ) (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 ) (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 (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 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 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 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 ) (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 ) (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 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 ) (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 ) (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 ) 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 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 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 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 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 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 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 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 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 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 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 Alias NUM_SQUARES#29 = NUM_SQUARES#30 NUM_SQUARES#31 Alias heap_head#38 = heap_head#39 heap_head#40 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 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 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 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 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 Alias NUM_SQUARES#32 = NUM_SQUARES#38 Alias heap_head#41 = heap_head#44 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 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 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 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 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 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 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 Alias NUM_SQUARES#32 = NUM_SQUARES#40 Alias heap_head#41 = heap_head#46 Alias SQUARES#16 = SQUARES#20 Alias init_dist_screen::yds#1 = init_dist_screen::yds#3 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#2 Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [123] if(true) goto main::@2 Successful SSA optimization Pass2ConstantIfs 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 Constant right-side identified [24] (word) malloc::size#0 ← (const byte) NUM_SQUARES#2 * (const byte) SIZEOF_WORD Successful SSA optimization Pass2ConstantRValueConsolidation 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 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 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 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 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 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 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 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 (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 [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 (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 (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 ] 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 ] 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 ] 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 ] 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 ] 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 ] 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 ] 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 ] Added variable bsearch16u::$6 to live range equivalence class [ bsearch16u::$6 ] Added variable bsearch16u::$14 to live range equivalence class [ bsearch16u::$14 ] 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 // Screen containing distance to center .label SCREEN_DIST = $39 // 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: // [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 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 lda #HEAP_TOP sta.z heap_head+1 jsr malloc jmp __b2 // __start::@2 __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] malloc_from___b2: // [9] phi (word) malloc::size#3 = (word) $3e8 [phi:__start::@2->malloc#0] -- vwuz1=vwuc1 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 jsr malloc jmp __b3 // __start::@3 __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] __b1_from___b3: jmp __b1 // __start::@1 __b1: // [7] call main jsr main jmp __breturn // __start::@return __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 } // 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+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+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 #$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+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=(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 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 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 // Screen containing distance to center .label SCREEN_DIST = $1b // 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: // [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 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 lda #HEAP_TOP sta.z heap_head+1 jsr malloc jmp __b2 // __start::@2 __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] malloc_from___b2: // [9] phi (word) malloc::size#3 = (word) $3e8 [phi:__start::@2->malloc#0] -- vwuz1=vwuc1 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 jsr malloc jmp __b3 // __start::@3 __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] __b1_from___b3: jmp __b1 // __start::@1 __b1: // [7] call main jsr main jmp __breturn // __start::@return __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 } // 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+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+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 #$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+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 jmp __b3 } // File Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i0 Replacing instruction ldx #0 with TAX Removing instruction lda #>0 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: 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: 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__start::__init1] // __start::__init1 // 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 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 lda #HEAP_TOP sta.z heap_head+1 jsr malloc // __start::@2 // 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 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 jsr malloc // __start::@3 // 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 // [7] call main jsr main // __start::@return // [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 } // 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+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+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=(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 (fillSCREEN_FILL+$3e8 bcc __b9 bne !+ lda.z fill 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+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;iinit_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