Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6 Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1 Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1 Fixing pointer increment (word*) init_squares::squares ← ++ (word*) init_squares::squares Fixing pointer addition (word~) sqrt::$1 ← (word*) sqrt::found - (word*) SQUARES Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit) Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit) Fixing pointer array-indexing *((word*) SQUARES + (byte) sqr::val) Fixing pointer array-indexing *((word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) Fixing pointer array-indexing *((word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i) Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src) Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift Identified constant variable (byte*) HEAP_TOP Culled Empty Block (label) @1 Culled Empty Block (label) @2 Culled Empty Block (label) @3 Culled Empty Block (label) malloc::@1 Culled Empty Block (label) @5 Culled Empty Block (label) @6 Culled Empty Block (label) @7 Culled Empty Block (label) bsearch16u::@11 Culled Empty Block (label) bsearch16u::@12 Culled Empty Block (label) bsearch16u::@14 Culled Empty Block (label) bsearch16u::@16 Culled Empty Block (label) bsearch16u::@17 Culled Empty Block (label) bsearch16u::@4 Culled Empty Block (label) bsearch16u::@5 Culled Empty Block (label) @8 Culled Empty Block (label) @9 Culled Empty Block (label) @10 Culled Empty Block (label) @11 Culled Empty Block (label) init_squares::@2 Culled Empty Block (label) @13 Culled Empty Block (label) sqr::@1 Culled Empty Block (label) @14 Culled Empty Block (label) sqrt::@1 Culled Empty Block (label) atan2_16::@9 Culled Empty Block (label) atan2_16::@10 Culled Empty Block (label) atan2_16::@11 Culled Empty Block (label) atan2_16::@12 Culled Empty Block (label) atan2_16::@28 Culled Empty Block (label) atan2_16::@29 Culled Empty Block (label) atan2_16::@21 Culled Empty Block (label) atan2_16::@22 Culled Empty Block (label) atan2_16::@23 Culled Empty Block (label) atan2_16::@31 Culled Empty Block (label) atan2_16::@32 Culled Empty Block (label) atan2_16::@14 Culled Empty Block (label) @16 Culled Empty Block (label) main::@14 Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@15 Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@10 Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@11 Culled Empty Block (label) main::@16 Culled Empty Block (label) @18 Culled Empty Block (label) init_angle_screen::@5 Culled Empty Block (label) init_angle_screen::@6 Culled Empty Block (label) init_angle_screen::@7 Culled Empty Block (label) init_angle_screen::@8 Culled Empty Block (label) @19 Culled Empty Block (label) init_dist_screen::@17 Culled Empty Block (label) init_dist_screen::@18 Culled Empty Block (label) init_dist_screen::@11 Culled Empty Block (label) init_dist_screen::@12 Culled Empty Block (label) init_dist_screen::@13 Culled Empty Block (label) init_dist_screen::@14 Culled Empty Block (label) init_dist_screen::@15 Culled Empty Block (label) init_dist_screen::@16 CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@4 @4: scope:[] from @begin (byte*) heap_head#0 ← (const byte*) HEAP_TOP to:@12 (void*()) malloc((word) malloc::size) malloc: scope:[malloc] from @17 @21 init_squares (word) malloc::size#3 ← phi( @17/(word) malloc::size#1 @21/(word) malloc::size#2 init_squares/(word) malloc::size#0 ) (byte*) heap_head#12 ← phi( @17/(byte*) heap_head#23 @21/(byte*) heap_head#5 init_squares/(byte*) heap_head#24 ) (byte*~) malloc::$0 ← (byte*) heap_head#12 - (word) malloc::size#3 (byte*) malloc::mem#0 ← (byte*~) malloc::$0 (byte*) heap_head#1 ← (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#13 ← phi( malloc/(byte*) heap_head#1 ) (void*) malloc::return#5 ← phi( malloc/(void*) malloc::return#0 ) (void*) malloc::return#1 ← (void*) malloc::return#5 (byte*) heap_head#2 ← (byte*) heap_head#13 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::@6 bsearch16u::@6: scope:[bsearch16u] from bsearch16u bsearch16u::@10 (word) bsearch16u::key#3 ← phi( bsearch16u/(word) bsearch16u::key#4 bsearch16u::@10/(word) bsearch16u::key#5 ) (word*) bsearch16u::items#6 ← phi( bsearch16u/(word*) bsearch16u::items#7 bsearch16u::@10/(word*) bsearch16u::items#8 ) (byte) bsearch16u::num#3 ← phi( bsearch16u/(byte) bsearch16u::num#7 bsearch16u::@10/(byte) bsearch16u::num#0 ) (bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0 if((bool~) bsearch16u::$5) goto bsearch16u::@7 to:bsearch16u::@8 bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 (word) bsearch16u::key#1 ← phi( bsearch16u::@6/(word) bsearch16u::key#3 ) (word*) bsearch16u::items#2 ← phi( bsearch16u::@6/(word*) bsearch16u::items#6 ) (byte) bsearch16u::num#4 ← phi( bsearch16u::@6/(byte) bsearch16u::num#3 ) (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1 (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD (word*~) bsearch16u::$7 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 (word*) bsearch16u::pivot#0 ← (word*~) bsearch16u::$7 (signed word~) bsearch16u::$8 ← ((signed word)) (word) bsearch16u::key#1 (signed word~) bsearch16u::$9 ← ((signed word)) *((word*) bsearch16u::pivot#0) (signed word~) bsearch16u::$10 ← (signed word~) bsearch16u::$8 - (signed word~) bsearch16u::$9 (signed word) bsearch16u::result#0 ← (signed word~) bsearch16u::$10 (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (number) 0 (bool~) bsearch16u::$12 ← ! (bool~) bsearch16u::$11 if((bool~) bsearch16u::$12) goto bsearch16u::@9 to:bsearch16u::@13 bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@6 (word) bsearch16u::key#2 ← phi( bsearch16u::@6/(word) bsearch16u::key#3 ) (word*) bsearch16u::items#3 ← phi( bsearch16u::@6/(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::@9: scope:[bsearch16u] from bsearch16u::@7 (word) bsearch16u::key#7 ← phi( bsearch16u::@7/(word) bsearch16u::key#1 ) (word*) bsearch16u::items#9 ← phi( bsearch16u::@7/(word*) bsearch16u::items#2 ) (word*) bsearch16u::pivot#3 ← phi( bsearch16u::@7/(word*) bsearch16u::pivot#0 ) (byte) bsearch16u::num#8 ← phi( bsearch16u::@7/(byte) bsearch16u::num#4 ) (signed word) bsearch16u::result#1 ← phi( bsearch16u::@7/(signed word) bsearch16u::result#0 ) (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (number) 0 (bool~) bsearch16u::$14 ← ! (bool~) bsearch16u::$13 if((bool~) bsearch16u::$14) goto bsearch16u::@10 to:bsearch16u::@15 bsearch16u::@13: scope:[bsearch16u] from bsearch16u::@7 (word*) bsearch16u::pivot#1 ← phi( bsearch16u::@7/(word*) bsearch16u::pivot#0 ) (word*) bsearch16u::return#0 ← (word*) bsearch16u::pivot#1 to:bsearch16u::@return bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@13 bsearch16u::@3 (word*) bsearch16u::return#4 ← phi( bsearch16u::@13/(word*) bsearch16u::return#0 bsearch16u::@3/(word*) bsearch16u::return#2 ) (word*) bsearch16u::return#1 ← (word*) bsearch16u::return#4 return to:@return bsearch16u::@10: scope:[bsearch16u] from bsearch16u::@15 bsearch16u::@9 (word) bsearch16u::key#5 ← phi( bsearch16u::@15/(word) bsearch16u::key#6 bsearch16u::@9/(word) bsearch16u::key#7 ) (word*) bsearch16u::items#8 ← phi( bsearch16u::@15/(word*) bsearch16u::items#0 bsearch16u::@9/(word*) bsearch16u::items#9 ) (byte) bsearch16u::num#5 ← phi( bsearch16u::@15/(byte) bsearch16u::num#1 bsearch16u::@9/(byte) bsearch16u::num#8 ) (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (number) 1 to:bsearch16u::@6 bsearch16u::@15: scope:[bsearch16u] from bsearch16u::@9 (word) bsearch16u::key#6 ← phi( bsearch16u::@9/(word) bsearch16u::key#7 ) (byte) bsearch16u::num#6 ← phi( bsearch16u::@9/(byte) bsearch16u::num#8 ) (word*) bsearch16u::pivot#2 ← phi( bsearch16u::@9/(word*) bsearch16u::pivot#3 ) (number~) bsearch16u::$17 ← (number) 1 * (const byte) SIZEOF_WORD (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot#2 + (number~) bsearch16u::$17 (word*) bsearch16u::items#0 ← (word*~) bsearch16u::$15 (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#6 to:bsearch16u::@10 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@8 (word*) bsearch16u::items#4 ← phi( bsearch16u::@8/(word*) bsearch16u::items#3 ) (word*~) bsearch16u::$3 ← (word*) bsearch16u::items#4 to:bsearch16u::@3 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@8 (word*) bsearch16u::items#5 ← phi( bsearch16u::@8/(word*) bsearch16u::items#3 ) (number~) bsearch16u::$18 ← (number) 1 * (const byte) SIZEOF_WORD (word*~) bsearch16u::$1 ← (word*) bsearch16u::items#5 - (number~) bsearch16u::$18 (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 @12: scope:[] from @4 (byte*) heap_head#37 ← phi( @4/(byte*) heap_head#0 ) (byte) NUM_SQUARES#0 ← (number) $ff (word*) SQUARES#0 ← (word*) 0 to:@15 (void()) init_squares() init_squares: scope:[init_squares] from init_dist_screen (byte*) heap_head#24 ← phi( init_dist_screen/(byte*) heap_head#29 ) (byte) NUM_SQUARES#6 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 ) (byte~) init_squares::$0 ← (byte) NUM_SQUARES#6 * (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#7 ← phi( init_squares/(byte) NUM_SQUARES#6 ) (byte*) heap_head#14 ← phi( init_squares/(byte*) heap_head#2 ) (void*) malloc::return#6 ← phi( init_squares/(void*) malloc::return#2 ) (void*~) init_squares::$1 ← (void*) malloc::return#6 (byte*) heap_head#3 ← (byte*) heap_head#14 (word*) SQUARES#1 ← ((word*)) (void*~) init_squares::$1 (word*) init_squares::squares#0 ← (word*) SQUARES#1 (word) init_squares::sqr#0 ← (number) 0 (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (number) 1 (byte) init_squares::i#0 ← (byte) 0 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@3 (word*) SQUARES#17 ← phi( init_squares::@1/(word*) SQUARES#17 init_squares::@3/(word*) SQUARES#1 ) (byte*) heap_head#25 ← phi( init_squares::@1/(byte*) heap_head#25 init_squares::@3/(byte*) heap_head#3 ) (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@3/(byte) init_squares::i#0 ) (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@3/(word*) init_squares::squares#0 ) (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@3/(word) init_squares::sqr#0 ) *((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#2 * (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#2 + rangenext(0,init_squares::$2) (bool~) init_squares::$5 ← (byte) init_squares::i#1 != rangelast(0,init_squares::$2) if((bool~) init_squares::$5) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 (word*) SQUARES#8 ← phi( init_squares::@1/(word*) SQUARES#17 ) (byte*) heap_head#15 ← phi( init_squares::@1/(byte*) heap_head#25 ) (byte*) heap_head#4 ← (byte*) heap_head#15 (word*) SQUARES#2 ← (word*) SQUARES#8 return to:@return (word()) sqr((byte) sqr::val) sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 (word*) SQUARES#9 ← phi( init_dist_screen::@10/(word*) SQUARES#18 init_dist_screen::@4/(word*) SQUARES#19 ) (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#9 + (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::@21 (byte) NUM_SQUARES#8 ← phi( init_dist_screen::@21/(byte) NUM_SQUARES#13 ) (word*) SQUARES#10 ← phi( init_dist_screen::@21/(word*) SQUARES#20 ) (word) sqrt::val#1 ← phi( init_dist_screen::@21/(word) sqrt::val#0 ) (word) bsearch16u::key#0 ← (word) sqrt::val#1 (word*) bsearch16u::items#1 ← (word*) SQUARES#10 (byte) bsearch16u::num#2 ← (byte) NUM_SQUARES#8 call bsearch16u (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@2 sqrt::@2: scope:[sqrt] from sqrt (word*) SQUARES#11 ← phi( sqrt/(word*) SQUARES#10 ) (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::$3 ← (word*) sqrt::found#0 - (word*) SQUARES#11 (word~) sqrt::$1 ← (word~) sqrt::$3 / (const byte) SIZEOF_WORD (byte~) sqrt::$2 ← ((byte)) (word~) sqrt::$1 (byte) sqrt::sq#0 ← (byte~) sqrt::$2 (byte) sqrt::return#0 ← (byte) sqrt::sq#0 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@2 (byte) sqrt::return#3 ← phi( sqrt::@2/(byte) sqrt::return#0 ) (byte) sqrt::return#1 ← (byte) sqrt::return#3 return to:@return @15: scope:[] from @12 (word*) SQUARES#46 ← phi( @12/(word*) SQUARES#0 ) (byte) NUM_SQUARES#37 ← phi( @12/(byte) NUM_SQUARES#0 ) (byte*) heap_head#32 ← phi( @12/(byte*) heap_head#37 ) (word*) CORDIC_ATAN2_ANGLES_16 ← kickasm {{ .for (var i=0; i= (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 ← (number) 0 (byte) atan2_16::i#0 ← (byte) 0 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@27 atan2_16::@6 (signed word) atan2_16::y#7 ← phi( atan2_16::@27/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 ) (signed word) atan2_16::x#7 ← phi( atan2_16::@27/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 ) (word) atan2_16::angle#12 ← phi( atan2_16::@27/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 ) (byte) atan2_16::i#6 ← phi( atan2_16::@27/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 ) (signed word) atan2_16::xi#6 ← phi( atan2_16::@27/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) (signed word) atan2_16::yi#3 ← phi( atan2_16::@27/(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::@16 to:atan2_16::@17 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 (signed word) atan2_16::y#19 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 ) (signed word) atan2_16::x#17 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 ) (word) atan2_16::angle#19 ← phi( atan2_16::@15/(word) atan2_16::angle#12 ) (byte) atan2_16::i#2 ← phi( atan2_16::@15/(byte) atan2_16::i#6 ) (signed word) atan2_16::yi#4 ← phi( atan2_16::@15/(signed word) atan2_16::yi#3 ) (signed word) atan2_16::xi#3 ← phi( atan2_16::@15/(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::@18 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@27 (signed word) atan2_16::y#5 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 atan2_16::@27/(signed word) atan2_16::y#8 ) (signed word) atan2_16::x#4 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 atan2_16::@27/(signed word) atan2_16::x#8 ) (word) atan2_16::angle#6 ← phi( atan2_16::@15/(word) atan2_16::angle#12 atan2_16::@27/(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::@33 atan2_16::@18: scope:[atan2_16] from atan2_16::@16 atan2_16::@19 (signed word) atan2_16::y#18 ← phi( atan2_16::@16/(signed word) atan2_16::y#19 atan2_16::@19/(signed word) atan2_16::y#20 ) (signed word) atan2_16::x#16 ← phi( atan2_16::@16/(signed word) atan2_16::x#17 atan2_16::@19/(signed word) atan2_16::x#18 ) (word) atan2_16::angle#18 ← phi( atan2_16::@16/(word) atan2_16::angle#19 atan2_16::@19/(word) atan2_16::angle#20 ) (byte) atan2_16::i#10 ← phi( atan2_16::@16/(byte) atan2_16::i#2 atan2_16::@19/(byte) atan2_16::i#11 ) (signed word) atan2_16::xi#11 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 atan2_16::@19/(signed word) atan2_16::xi#12 ) (signed word) atan2_16::yi#14 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 atan2_16::@19/(signed word) atan2_16::yi#15 ) (signed word) atan2_16::yd#7 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 atan2_16::@19/(signed word) atan2_16::yd#1 ) (signed word) atan2_16::xd#7 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 atan2_16::@19/(signed word) atan2_16::xd#1 ) (byte) atan2_16::shift#2 ← phi( atan2_16::@16/(byte) atan2_16::shift#0 atan2_16::@19/(byte) atan2_16::shift#1 ) (bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2 if((bool~) atan2_16::$18) goto atan2_16::@19 to:atan2_16::@20 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 (signed word) atan2_16::y#20 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 ) (signed word) atan2_16::x#18 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 ) (word) atan2_16::angle#20 ← phi( atan2_16::@18/(word) atan2_16::angle#18 ) (byte) atan2_16::i#11 ← phi( atan2_16::@18/(byte) atan2_16::i#10 ) (signed word) atan2_16::xi#12 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 ) (signed word) atan2_16::yi#15 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 ) (byte) atan2_16::shift#3 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 ) (signed word) atan2_16::yd#3 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 ) (signed word) atan2_16::xd#3 ← phi( atan2_16::@18/(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::@18 atan2_16::@20: scope:[atan2_16] from atan2_16::@18 (signed word) atan2_16::y#16 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 ) (signed word) atan2_16::x#14 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 ) (word) atan2_16::angle#16 ← phi( atan2_16::@18/(word) atan2_16::angle#18 ) (byte) atan2_16::i#8 ← phi( atan2_16::@18/(byte) atan2_16::i#10 ) (signed word) atan2_16::xi#9 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 ) (signed word) atan2_16::yd#8 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 ) (signed word) atan2_16::xd#8 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 ) (signed word) atan2_16::yi#10 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 ) (byte) atan2_16::shift#4 ← phi( atan2_16::@18/(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::@25 to:atan2_16::@24 atan2_16::@25: scope:[atan2_16] from atan2_16::@20 atan2_16::@24 (signed word) atan2_16::y#14 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 atan2_16::@24/(signed word) atan2_16::y#17 ) (signed word) atan2_16::x#13 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 atan2_16::@24/(signed word) atan2_16::x#15 ) (word) atan2_16::angle#14 ← phi( atan2_16::@20/(word) atan2_16::angle#16 atan2_16::@24/(word) atan2_16::angle#17 ) (byte) atan2_16::i#7 ← phi( atan2_16::@20/(byte) atan2_16::i#8 atan2_16::@24/(byte) atan2_16::i#9 ) (signed word) atan2_16::xd#9 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 atan2_16::@24/(signed word) atan2_16::xd#2 ) (signed word) atan2_16::yd#9 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 atan2_16::@24/(signed word) atan2_16::yd#2 ) (signed word) atan2_16::xi#7 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 atan2_16::@24/(signed word) atan2_16::xi#10 ) (signed word) atan2_16::yi#5 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 atan2_16::@24/(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::@26 to:atan2_16::@30 atan2_16::@24: scope:[atan2_16] from atan2_16::@20 (signed word) atan2_16::y#17 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 ) (signed word) atan2_16::x#15 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 ) (word) atan2_16::angle#17 ← phi( atan2_16::@20/(word) atan2_16::angle#16 ) (byte) atan2_16::i#9 ← phi( atan2_16::@20/(byte) atan2_16::i#8 ) (signed word) atan2_16::xi#10 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 ) (signed word) atan2_16::yi#11 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 ) (signed word) atan2_16::yd#4 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 ) (signed word) atan2_16::xd#4 ← phi( atan2_16::@20/(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::@25 atan2_16::@26: scope:[atan2_16] from atan2_16::@25 (signed word) atan2_16::y#10 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 ) (signed word) atan2_16::x#11 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 ) (word) atan2_16::angle#7 ← phi( atan2_16::@25/(word) atan2_16::angle#14 ) (byte) atan2_16::i#3 ← phi( atan2_16::@25/(byte) atan2_16::i#7 ) (signed word) atan2_16::xd#5 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 ) (signed word) atan2_16::yi#6 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 ) (signed word) atan2_16::yd#5 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 ) (signed word) atan2_16::xi#4 ← phi( atan2_16::@25/(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 + *((word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) to:atan2_16::@27 atan2_16::@30: scope:[atan2_16] from atan2_16::@25 (signed word) atan2_16::y#11 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 ) (signed word) atan2_16::x#12 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 ) (word) atan2_16::angle#8 ← phi( atan2_16::@25/(word) atan2_16::angle#14 ) (byte) atan2_16::i#4 ← phi( atan2_16::@25/(byte) atan2_16::i#7 ) (signed word) atan2_16::xd#6 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 ) (signed word) atan2_16::yi#7 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 ) (signed word) atan2_16::yd#6 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 ) (signed word) atan2_16::xi#5 ← phi( atan2_16::@25/(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 - *((word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) to:atan2_16::@27 atan2_16::@27: scope:[atan2_16] from atan2_16::@26 atan2_16::@30 (signed word) atan2_16::y#8 ← phi( atan2_16::@26/(signed word) atan2_16::y#10 atan2_16::@30/(signed word) atan2_16::y#11 ) (signed word) atan2_16::xi#8 ← phi( atan2_16::@26/(signed word) atan2_16::xi#1 atan2_16::@30/(signed word) atan2_16::xi#2 ) (signed word) atan2_16::x#8 ← phi( atan2_16::@26/(signed word) atan2_16::x#11 atan2_16::@30/(signed word) atan2_16::x#12 ) (word) atan2_16::angle#13 ← phi( atan2_16::@26/(word) atan2_16::angle#2 atan2_16::@30/(word) atan2_16::angle#3 ) (signed word) atan2_16::yi#8 ← phi( atan2_16::@26/(signed word) atan2_16::yi#1 atan2_16::@30/(signed word) atan2_16::yi#2 ) (byte) atan2_16::i#5 ← phi( atan2_16::@26/(byte) atan2_16::i#3 atan2_16::@30/(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::@15 to:atan2_16::@17 atan2_16::@7: scope:[atan2_16] from atan2_16::@17 atan2_16::@33 (word) atan2_16::angle#15 ← phi( atan2_16::@17/(word) atan2_16::angle#1 atan2_16::@33/(word) atan2_16::angle#4 ) (signed word) atan2_16::y#4 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 atan2_16::@33/(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::@13 atan2_16::@33: scope:[atan2_16] from atan2_16::@17 (signed word) atan2_16::y#6 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 ) (word) atan2_16::angle#9 ← phi( atan2_16::@17/(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::@13 atan2_16::@7 (word) atan2_16::angle#10 ← phi( atan2_16::@13/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#15 ) (word) atan2_16::return#0 ← (word) atan2_16::angle#10 to:atan2_16::@return atan2_16::@13: 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 @17: scope:[] from @15 (word*) SQUARES#44 ← phi( @15/(word*) SQUARES#46 ) (byte) NUM_SQUARES#33 ← phi( @15/(byte) NUM_SQUARES#37 ) (byte*) heap_head#23 ← phi( @15/(byte*) heap_head#32 ) (word) malloc::size#1 ← (number) $3e8 call malloc (void*) malloc::return#3 ← (void*) malloc::return#1 to:@21 @21: scope:[] from @17 (word*) SQUARES#36 ← phi( @17/(word*) SQUARES#44 ) (byte) NUM_SQUARES#25 ← phi( @17/(byte) NUM_SQUARES#33 ) (byte*) heap_head#16 ← phi( @17/(byte*) heap_head#2 ) (void*) malloc::return#7 ← phi( @17/(void*) malloc::return#3 ) (void*~) $0 ← (void*) malloc::return#7 (byte*) heap_head#5 ← (byte*) heap_head#16 (byte*) SCREEN_DIST#0 ← ((byte*)) (void*~) $0 (word) malloc::size#2 ← (number) $3e8 call malloc (void*) malloc::return#4 ← (void*) malloc::return#1 to:@22 @22: scope:[] from @21 (word*) SQUARES#35 ← phi( @21/(word*) SQUARES#36 ) (byte) NUM_SQUARES#24 ← phi( @21/(byte) NUM_SQUARES#25 ) (byte*) SCREEN_DIST#7 ← phi( @21/(byte*) SCREEN_DIST#0 ) (byte*) heap_head#17 ← phi( @21/(byte*) heap_head#2 ) (void*) malloc::return#8 ← phi( @21/(void*) malloc::return#4 ) (void*~) $1 ← (void*) malloc::return#8 (byte*) heap_head#6 ← (byte*) heap_head#17 (byte*) SCREEN_ANGLE#0 ← ((byte*)) (void*~) $1 to:@20 (void()) main() main: scope:[main] from @20 (byte*) SCREEN_ANGLE#3 ← phi( @20/(byte*) SCREEN_ANGLE#5 ) (word*) SQUARES#21 ← phi( @20/(word*) SQUARES#26 ) (byte*) heap_head#26 ← phi( @20/(byte*) heap_head#31 ) (byte) NUM_SQUARES#14 ← phi( @20/(byte) NUM_SQUARES#18 ) (byte*) SCREEN_DIST#1 ← phi( @20/(byte*) SCREEN_DIST#3 ) (byte*) init_dist_screen::screen#0 ← (byte*) SCREEN_DIST#1 call init_dist_screen to:main::@17 main::@17: scope:[main] from main (byte*) SCREEN_DIST#8 ← phi( main/(byte*) SCREEN_DIST#1 ) (byte*) SCREEN_ANGLE#1 ← phi( main/(byte*) SCREEN_ANGLE#3 ) (word*) SQUARES#12 ← phi( main/(word*) SQUARES#6 ) (byte*) heap_head#18 ← phi( main/(byte*) heap_head#10 ) (byte) NUM_SQUARES#9 ← phi( main/(byte) NUM_SQUARES#4 ) (byte) NUM_SQUARES#1 ← (byte) NUM_SQUARES#9 (byte*) heap_head#7 ← (byte*) heap_head#18 (word*) SQUARES#3 ← (word*) SQUARES#12 (byte*) init_angle_screen::screen#0 ← (byte*) SCREEN_ANGLE#1 call init_angle_screen to:main::@18 main::@18: scope:[main] from main::@17 (word*) SQUARES#28 ← phi( main::@17/(word*) SQUARES#3 ) (byte*) heap_head#34 ← phi( main::@17/(byte*) heap_head#7 ) (byte) NUM_SQUARES#20 ← phi( main::@17/(byte) NUM_SQUARES#1 ) (byte*) SCREEN_ANGLE#7 ← phi( main::@17/(byte*) SCREEN_ANGLE#1 ) (byte*) SCREEN_DIST#6 ← phi( main::@17/(byte*) SCREEN_DIST#8 ) to:main::@1 main::@1: scope:[main] from main::@12 main::@18 (word*) SQUARES#22 ← phi( main::@12/(word*) SQUARES#27 main::@18/(word*) SQUARES#28 ) (byte*) heap_head#27 ← phi( main::@12/(byte*) heap_head#33 main::@18/(byte*) heap_head#34 ) (byte) NUM_SQUARES#15 ← phi( main::@12/(byte) NUM_SQUARES#19 main::@18/(byte) NUM_SQUARES#20 ) (byte*) SCREEN_ANGLE#4 ← phi( main::@12/(byte*) SCREEN_ANGLE#6 main::@18/(byte*) SCREEN_ANGLE#7 ) (byte*) SCREEN_DIST#4 ← phi( main::@12/(byte*) SCREEN_DIST#5 main::@18/(byte*) SCREEN_DIST#6 ) if(true) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 (word*) SQUARES#45 ← phi( main::@1/(word*) SQUARES#22 ) (byte*) heap_head#43 ← phi( main::@1/(byte*) heap_head#27 ) (byte) NUM_SQUARES#34 ← phi( main::@1/(byte) NUM_SQUARES#15 ) (byte*) SCREEN_ANGLE#2 ← phi( main::@1/(byte*) SCREEN_ANGLE#4 ) (byte*) SCREEN_DIST#2 ← phi( main::@1/(byte*) SCREEN_DIST#4 ) (byte*) main::dist#0 ← (byte*) SCREEN_DIST#2 (byte*) main::angle#0 ← (byte*) SCREEN_ANGLE#2 (byte*) main::fill#0 ← (const byte*) SCREEN_FILL (word) main::min_dist_angle#0 ← (number) $ffff (byte*) main::min_fill#0 ← (const byte*) SCREEN_FILL to:main::@4 main::@4: scope:[main] from main::@2 main::@5 (byte*) SCREEN_ANGLE#10 ← phi( main::@2/(byte*) SCREEN_ANGLE#2 main::@5/(byte*) SCREEN_ANGLE#9 ) (byte*) SCREEN_DIST#11 ← phi( main::@2/(byte*) SCREEN_DIST#2 main::@5/(byte*) SCREEN_DIST#10 ) (word*) SQUARES#37 ← phi( main::@2/(word*) SQUARES#45 main::@5/(word*) SQUARES#29 ) (byte*) heap_head#38 ← phi( main::@2/(byte*) heap_head#43 main::@5/(byte*) heap_head#35 ) (byte) NUM_SQUARES#26 ← phi( main::@2/(byte) NUM_SQUARES#34 main::@5/(byte) NUM_SQUARES#21 ) (byte*) main::min_fill#5 ← phi( main::@2/(byte*) main::min_fill#0 main::@5/(byte*) main::min_fill#4 ) (word) main::min_dist_angle#4 ← phi( main::@2/(word) main::min_dist_angle#0 main::@5/(word) main::min_dist_angle#5 ) (byte*) main::angle#4 ← phi( main::@2/(byte*) main::angle#0 main::@5/(byte*) main::angle#1 ) (byte*) main::dist#4 ← phi( main::@2/(byte*) main::dist#0 main::@5/(byte*) main::dist#1 ) (byte*) main::fill#2 ← phi( main::@2/(byte*) main::fill#0 main::@5/(byte*) main::fill#1 ) (bool~) main::$2 ← *((byte*) main::fill#2) != (const byte) FILL_CHAR (bool~) main::$3 ← ! (bool~) main::$2 if((bool~) main::$3) goto main::@5 to:main::@7 main::@5: scope:[main] from main::@4 main::@7 main::@8 (byte*) SCREEN_ANGLE#9 ← phi( main::@4/(byte*) SCREEN_ANGLE#10 main::@7/(byte*) SCREEN_ANGLE#11 main::@8/(byte*) SCREEN_ANGLE#12 ) (byte*) SCREEN_DIST#10 ← phi( main::@4/(byte*) SCREEN_DIST#11 main::@7/(byte*) SCREEN_DIST#12 main::@8/(byte*) SCREEN_DIST#13 ) (word*) SQUARES#29 ← phi( main::@4/(word*) SQUARES#37 main::@7/(word*) SQUARES#38 main::@8/(word*) SQUARES#39 ) (byte*) heap_head#35 ← phi( main::@4/(byte*) heap_head#38 main::@7/(byte*) heap_head#39 main::@8/(byte*) heap_head#40 ) (byte) NUM_SQUARES#21 ← phi( main::@4/(byte) NUM_SQUARES#26 main::@7/(byte) NUM_SQUARES#27 main::@8/(byte) NUM_SQUARES#28 ) (byte*) main::min_fill#4 ← phi( main::@4/(byte*) main::min_fill#5 main::@7/(byte*) main::min_fill#6 main::@8/(byte*) main::min_fill#1 ) (word) main::min_dist_angle#5 ← phi( main::@4/(word) main::min_dist_angle#4 main::@7/(word) main::min_dist_angle#2 main::@8/(word) main::min_dist_angle#1 ) (byte*) main::fill#3 ← phi( main::@4/(byte*) main::fill#2 main::@7/(byte*) main::fill#5 main::@8/(byte*) main::fill#4 ) (byte*) main::angle#2 ← phi( main::@4/(byte*) main::angle#4 main::@7/(byte*) main::angle#3 main::@8/(byte*) main::angle#5 ) (byte*) main::dist#2 ← phi( main::@4/(byte*) main::dist#4 main::@7/(byte*) main::dist#3 main::@8/(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 byte*) SCREEN_FILL+(number) $3e8 if((bool~) main::$6) goto main::@4 to:main::@9 main::@7: scope:[main] from main::@4 (byte*) SCREEN_ANGLE#11 ← phi( main::@4/(byte*) SCREEN_ANGLE#10 ) (byte*) SCREEN_DIST#12 ← phi( main::@4/(byte*) SCREEN_DIST#11 ) (word*) SQUARES#38 ← phi( main::@4/(word*) SQUARES#37 ) (byte*) heap_head#39 ← phi( main::@4/(byte*) heap_head#38 ) (byte) NUM_SQUARES#27 ← phi( main::@4/(byte) NUM_SQUARES#26 ) (byte*) main::min_fill#6 ← phi( main::@4/(byte*) main::min_fill#5 ) (byte*) main::fill#5 ← phi( main::@4/(byte*) main::fill#2 ) (word) main::min_dist_angle#2 ← phi( main::@4/(word) main::min_dist_angle#4 ) (byte*) main::angle#3 ← phi( main::@4/(byte*) main::angle#4 ) (byte*) main::dist#3 ← phi( main::@4/(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::@5 to:main::@8 main::@8: scope:[main] from main::@7 (byte*) SCREEN_ANGLE#12 ← phi( main::@7/(byte*) SCREEN_ANGLE#11 ) (byte*) SCREEN_DIST#13 ← phi( main::@7/(byte*) SCREEN_DIST#12 ) (word*) SQUARES#39 ← phi( main::@7/(word*) SQUARES#38 ) (byte*) heap_head#40 ← phi( main::@7/(byte*) heap_head#39 ) (byte) NUM_SQUARES#28 ← phi( main::@7/(byte) NUM_SQUARES#27 ) (byte*) main::angle#5 ← phi( main::@7/(byte*) main::angle#3 ) (byte*) main::dist#5 ← phi( main::@7/(byte*) main::dist#3 ) (word) main::dist_angle#1 ← phi( main::@7/(word) main::dist_angle#0 ) (byte*) main::fill#4 ← phi( main::@7/(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::@5 main::@9: scope:[main] from main::@5 (byte*) SCREEN_ANGLE#8 ← phi( main::@5/(byte*) SCREEN_ANGLE#9 ) (byte*) SCREEN_DIST#9 ← phi( main::@5/(byte*) SCREEN_DIST#10 ) (word*) SQUARES#23 ← phi( main::@5/(word*) SQUARES#29 ) (byte*) heap_head#28 ← phi( main::@5/(byte*) heap_head#35 ) (byte) NUM_SQUARES#16 ← phi( main::@5/(byte) NUM_SQUARES#21 ) (byte*) main::min_fill#3 ← phi( main::@5/(byte*) main::min_fill#4 ) (word) main::min_dist_angle#3 ← phi( main::@5/(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::@12 to:main::@return main::@12: scope:[main] from main::@9 (word*) SQUARES#27 ← phi( main::@9/(word*) SQUARES#23 ) (byte*) heap_head#33 ← phi( main::@9/(byte*) heap_head#28 ) (byte) NUM_SQUARES#19 ← phi( main::@9/(byte) NUM_SQUARES#16 ) (byte*) SCREEN_ANGLE#6 ← phi( main::@9/(byte*) SCREEN_ANGLE#8 ) (byte*) SCREEN_DIST#5 ← phi( main::@9/(byte*) SCREEN_DIST#9 ) (byte*) main::min_fill#2 ← phi( main::@9/(byte*) main::min_fill#3 ) *((byte*) main::min_fill#2) ← (const byte) FILL_CHAR to:main::@1 main::@return: scope:[main] from main::@1 main::@9 (word*) SQUARES#13 ← phi( main::@1/(word*) SQUARES#22 main::@9/(word*) SQUARES#23 ) (byte*) heap_head#19 ← phi( main::@1/(byte*) heap_head#27 main::@9/(byte*) heap_head#28 ) (byte) NUM_SQUARES#10 ← phi( main::@1/(byte) NUM_SQUARES#15 main::@9/(byte) NUM_SQUARES#16 ) (byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10 (byte*) heap_head#8 ← (byte*) heap_head#19 (word*) SQUARES#4 ← (word*) SQUARES#13 return to:@return (void()) init_angle_screen((byte*) init_angle_screen::screen) init_angle_screen: scope:[init_angle_screen] from main::@17 (byte*) init_angle_screen::screen#1 ← phi( main::@17/(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 ← (number) 0 (byte) init_angle_screen::xb#0 ← (number) $27 to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@9 (byte) init_angle_screen::xb#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@9/(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::@9/(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::@9/(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::@9/(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::@9/(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 (word~) init_angle_screen::$5 ← ((word)) { (number~) init_angle_screen::$4, (number) 0 } (signed word~) init_angle_screen::$6 ← ((signed word)) (word~) init_angle_screen::$5 (signed word) init_angle_screen::xw#0 ← (signed word~) init_angle_screen::$6 (number~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (number) 2 (word~) init_angle_screen::$8 ← ((word)) { (number~) init_angle_screen::$7, (number) 0 } (signed word~) init_angle_screen::$9 ← ((signed word)) (word~) init_angle_screen::$8 (signed word) init_angle_screen::yw#0 ← (signed word~) init_angle_screen::$9 (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::@9 init_angle_screen::@9: 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::$10 ← (word) atan2_16::return#4 (word) init_angle_screen::angle_w#0 ← (word~) init_angle_screen::$10 (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (number) $80 (number~) init_angle_screen::$12 ← > (number~) init_angle_screen::$11 (byte) init_angle_screen::ang_w#0 ← (number~) init_angle_screen::$12 *((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 *((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 (number~) init_angle_screen::$14 ← (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::$14 (number~) init_angle_screen::$15 ← (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::$15 (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::$16 ← (byte) init_angle_screen::y#1 != rangelast(0,$c) if((bool~) init_angle_screen::$16) 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#24 ← phi( main/(word*) SQUARES#21 ) (byte*) heap_head#29 ← phi( main/(byte*) heap_head#26 ) (byte) NUM_SQUARES#3 ← (number) $30 call init_squares to:init_dist_screen::@19 init_dist_screen::@19: scope:[init_dist_screen] from init_dist_screen (byte) NUM_SQUARES#41 ← phi( init_dist_screen/(byte) NUM_SQUARES#3 ) (byte*) init_dist_screen::screen#1 ← phi( init_dist_screen/(byte*) init_dist_screen::screen#2 ) (word*) SQUARES#14 ← phi( init_dist_screen/(word*) SQUARES#2 ) (byte*) heap_head#20 ← phi( init_dist_screen/(byte*) heap_head#4 ) (byte*) heap_head#9 ← (byte*) heap_head#20 (word*) SQUARES#5 ← (word*) SQUARES#14 (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::@19 init_dist_screen::@7 (byte*) heap_head#49 ← phi( init_dist_screen::@19/(byte*) heap_head#9 init_dist_screen::@7/(byte*) heap_head#30 ) (byte) NUM_SQUARES#40 ← phi( init_dist_screen::@19/(byte) NUM_SQUARES#41 init_dist_screen::@7/(byte) NUM_SQUARES#17 ) (byte*) init_dist_screen::screen_bottomline#14 ← phi( init_dist_screen::@19/(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::@19/(byte*) init_dist_screen::screen_topline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) (word*) SQUARES#40 ← phi( init_dist_screen::@19/(word*) SQUARES#5 init_dist_screen::@7/(word*) SQUARES#25 ) (byte) init_dist_screen::y#2 ← phi( init_dist_screen::@19/(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#38 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#40 ) (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#30 ← phi( init_dist_screen::@1/(word*) SQUARES#40 ) (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#39 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#40 ) (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#31 ← phi( init_dist_screen::@1/(word*) SQUARES#40 ) (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#35 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#38 init_dist_screen::@3/(byte) NUM_SQUARES#39 ) (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#19 ← phi( init_dist_screen::@2/(word*) SQUARES#30 init_dist_screen::@3/(word*) SQUARES#31 ) (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::@20 init_dist_screen::@20: scope:[init_dist_screen] from init_dist_screen::@4 (word*) SQUARES#41 ← phi( init_dist_screen::@4/(word*) SQUARES#19 ) (byte*) heap_head#41 ← phi( init_dist_screen::@4/(byte*) heap_head#44 ) (byte) NUM_SQUARES#29 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#35 ) (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 ← (number) 0 (byte) init_dist_screen::xb#0 ← (number) $27 to:init_dist_screen::@5 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@20 init_dist_screen::@22 (byte) init_dist_screen::xb#8 ← phi( init_dist_screen::@20/(byte) init_dist_screen::xb#0 init_dist_screen::@22/(byte) init_dist_screen::xb#1 ) (word) init_dist_screen::yds#6 ← phi( init_dist_screen::@20/(word) init_dist_screen::yds#0 init_dist_screen::@22/(word) init_dist_screen::yds#7 ) (word*) SQUARES#32 ← phi( init_dist_screen::@20/(word*) SQUARES#41 init_dist_screen::@22/(word*) SQUARES#42 ) (byte*) heap_head#36 ← phi( init_dist_screen::@20/(byte*) heap_head#41 init_dist_screen::@22/(byte*) heap_head#42 ) (byte) NUM_SQUARES#22 ← phi( init_dist_screen::@20/(byte) NUM_SQUARES#29 init_dist_screen::@22/(byte) NUM_SQUARES#30 ) (byte) init_dist_screen::y#4 ← phi( init_dist_screen::@20/(byte) init_dist_screen::y#5 init_dist_screen::@22/(byte) init_dist_screen::y#6 ) (byte*) init_dist_screen::screen_bottomline#4 ← phi( init_dist_screen::@20/(byte*) init_dist_screen::screen_bottomline#6 init_dist_screen::@22/(byte*) init_dist_screen::screen_bottomline#3 ) (byte*) init_dist_screen::screen_topline#4 ← phi( init_dist_screen::@20/(byte*) init_dist_screen::screen_topline#6 init_dist_screen::@22/(byte*) init_dist_screen::screen_topline#3 ) (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@20/(byte) init_dist_screen::x#0 init_dist_screen::@22/(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#36 ) (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#36 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#22 ) (word) init_dist_screen::yds#5 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#6 ) (word*) SQUARES#43 ← phi( init_dist_screen::@5/(word*) SQUARES#32 ) (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#25 ← phi( init_dist_screen::@5/(word*) SQUARES#32 ) (byte*) heap_head#30 ← phi( init_dist_screen::@5/(byte*) heap_head#36 ) (byte) NUM_SQUARES#17 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#22 ) (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#31 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#36 ) (word) init_dist_screen::yds#3 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#5 ) (word*) SQUARES#33 ← phi( init_dist_screen::@6/(word*) SQUARES#43 ) (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#32 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#36 ) (word) init_dist_screen::yds#4 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#5 ) (word*) SQUARES#34 ← phi( init_dist_screen::@6/(word*) SQUARES#43 ) (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#23 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#31 init_dist_screen::@9/(byte) NUM_SQUARES#32 ) (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#18 ← phi( init_dist_screen::@8/(word*) SQUARES#33 init_dist_screen::@9/(word*) SQUARES#34 ) (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::@21 init_dist_screen::@21: 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#13 ← phi( init_dist_screen::@10/(byte) NUM_SQUARES#23 ) (word*) SQUARES#20 ← phi( init_dist_screen::@10/(word*) SQUARES#18 ) (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::@22 init_dist_screen::@22: scope:[init_dist_screen] from init_dist_screen::@21 (word) init_dist_screen::yds#7 ← phi( init_dist_screen::@21/(word) init_dist_screen::yds#1 ) (word*) SQUARES#42 ← phi( init_dist_screen::@21/(word*) SQUARES#20 ) (byte*) heap_head#42 ← phi( init_dist_screen::@21/(byte*) heap_head#45 ) (byte) NUM_SQUARES#30 ← phi( init_dist_screen::@21/(byte) NUM_SQUARES#13 ) (byte) init_dist_screen::y#6 ← phi( init_dist_screen::@21/(byte) init_dist_screen::y#8 ) (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@21/(byte) init_dist_screen::xb#3 ) (byte*) init_dist_screen::screen_bottomline#3 ← phi( init_dist_screen::@21/(byte*) init_dist_screen::screen_bottomline#5 ) (byte) init_dist_screen::x#4 ← phi( init_dist_screen::@21/(byte) init_dist_screen::x#5 ) (byte*) init_dist_screen::screen_topline#3 ← phi( init_dist_screen::@21/(byte*) init_dist_screen::screen_topline#5 ) (byte) sqrt::return#4 ← phi( init_dist_screen::@21/(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#15 ← phi( init_dist_screen::@7/(word*) SQUARES#25 ) (byte*) heap_head#21 ← phi( init_dist_screen::@7/(byte*) heap_head#30 ) (byte) NUM_SQUARES#11 ← phi( init_dist_screen::@7/(byte) NUM_SQUARES#17 ) (byte) NUM_SQUARES#4 ← (byte) NUM_SQUARES#11 (byte*) heap_head#10 ← (byte*) heap_head#21 (word*) SQUARES#6 ← (word*) SQUARES#15 return to:@return @20: scope:[] from @22 (byte*) SCREEN_ANGLE#5 ← phi( @22/(byte*) SCREEN_ANGLE#0 ) (word*) SQUARES#26 ← phi( @22/(word*) SQUARES#35 ) (byte*) heap_head#31 ← phi( @22/(byte*) heap_head#6 ) (byte) NUM_SQUARES#18 ← phi( @22/(byte) NUM_SQUARES#24 ) (byte*) SCREEN_DIST#3 ← phi( @22/(byte*) SCREEN_DIST#7 ) call main to:@23 @23: scope:[] from @20 (word*) SQUARES#16 ← phi( @20/(word*) SQUARES#4 ) (byte*) heap_head#22 ← phi( @20/(byte*) heap_head#8 ) (byte) NUM_SQUARES#12 ← phi( @20/(byte) NUM_SQUARES#2 ) (byte) NUM_SQUARES#5 ← (byte) NUM_SQUARES#12 (byte*) heap_head#11 ← (byte*) heap_head#22 (word*) SQUARES#7 ← (word*) SQUARES#16 to:@end @end: scope:[] from @23 SYMBOL TABLE SSA (void*~) $0 (void*~) $1 (label) @12 (label) @15 (label) @17 (label) @20 (label) @21 (label) @22 (label) @23 (label) @4 (label) @begin (label) @end (word*) CORDIC_ATAN2_ANGLES_16 (const byte) CORDIC_ITERATIONS_16 = (number) $f (const byte) FILL_CHAR = (byte) '@' (const byte*) HEAP_TOP = (byte*)(number) $a000 (byte) NUM_SQUARES (byte) NUM_SQUARES#0 (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#11 (byte) NUM_SQUARES#12 (byte) NUM_SQUARES#13 (byte) NUM_SQUARES#14 (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#16 (byte) NUM_SQUARES#17 (byte) NUM_SQUARES#18 (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#2 (byte) NUM_SQUARES#20 (byte) NUM_SQUARES#21 (byte) NUM_SQUARES#22 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#26 (byte) NUM_SQUARES#27 (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#29 (byte) NUM_SQUARES#3 (byte) NUM_SQUARES#30 (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#32 (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#35 (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#37 (byte) NUM_SQUARES#38 (byte) NUM_SQUARES#39 (byte) NUM_SQUARES#4 (byte) NUM_SQUARES#40 (byte) NUM_SQUARES#41 (byte) NUM_SQUARES#5 (byte) NUM_SQUARES#6 (byte) NUM_SQUARES#7 (byte) NUM_SQUARES#8 (byte) NUM_SQUARES#9 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (byte*) SCREEN_ANGLE (byte*) SCREEN_ANGLE#0 (byte*) SCREEN_ANGLE#1 (byte*) SCREEN_ANGLE#10 (byte*) SCREEN_ANGLE#11 (byte*) SCREEN_ANGLE#12 (byte*) SCREEN_ANGLE#2 (byte*) SCREEN_ANGLE#3 (byte*) SCREEN_ANGLE#4 (byte*) SCREEN_ANGLE#5 (byte*) SCREEN_ANGLE#6 (byte*) SCREEN_ANGLE#7 (byte*) SCREEN_ANGLE#8 (byte*) SCREEN_ANGLE#9 (byte*) SCREEN_DIST (byte*) SCREEN_DIST#0 (byte*) SCREEN_DIST#1 (byte*) SCREEN_DIST#10 (byte*) SCREEN_DIST#11 (byte*) SCREEN_DIST#12 (byte*) SCREEN_DIST#13 (byte*) SCREEN_DIST#2 (byte*) SCREEN_DIST#3 (byte*) SCREEN_DIST#4 (byte*) SCREEN_DIST#5 (byte*) SCREEN_DIST#6 (byte*) SCREEN_DIST#7 (byte*) SCREEN_DIST#8 (byte*) SCREEN_DIST#9 (const byte*) SCREEN_FILL = (byte*)(number) $400 (const byte) SIZEOF_WORD = (byte) 2 (word*) SQUARES (word*) SQUARES#0 (word*) SQUARES#1 (word*) SQUARES#10 (word*) SQUARES#11 (word*) SQUARES#12 (word*) SQUARES#13 (word*) SQUARES#14 (word*) SQUARES#15 (word*) SQUARES#16 (word*) SQUARES#17 (word*) SQUARES#18 (word*) SQUARES#19 (word*) SQUARES#2 (word*) SQUARES#20 (word*) SQUARES#21 (word*) SQUARES#22 (word*) SQUARES#23 (word*) SQUARES#24 (word*) SQUARES#25 (word*) SQUARES#26 (word*) SQUARES#27 (word*) SQUARES#28 (word*) SQUARES#29 (word*) SQUARES#3 (word*) SQUARES#30 (word*) SQUARES#31 (word*) SQUARES#32 (word*) SQUARES#33 (word*) SQUARES#34 (word*) SQUARES#35 (word*) SQUARES#36 (word*) SQUARES#37 (word*) SQUARES#38 (word*) SQUARES#39 (word*) SQUARES#4 (word*) SQUARES#40 (word*) SQUARES#41 (word*) SQUARES#42 (word*) SQUARES#43 (word*) SQUARES#44 (word*) SQUARES#45 (word*) SQUARES#46 (word*) SQUARES#5 (word*) SQUARES#6 (word*) SQUARES#7 (word*) SQUARES#8 (word*) SQUARES#9 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (bool~) atan2_16::$0 (signed word~) atan2_16::$1 (bool~) atan2_16::$10 (bool~) atan2_16::$11 (number~) atan2_16::$12 (bool~) atan2_16::$13 (bool~) atan2_16::$14 (word~) atan2_16::$15 (bool~) atan2_16::$16 (bool~) atan2_16::$17 (bool~) atan2_16::$18 (bool~) atan2_16::$19 (signed word~) atan2_16::$2 (bool~) atan2_16::$20 (bool~) atan2_16::$21 (byte~) atan2_16::$22 (byte~) atan2_16::$23 (bool~) atan2_16::$24 (signed word~) atan2_16::$3 (signed word~) atan2_16::$4 (bool~) atan2_16::$5 (signed word~) atan2_16::$6 (signed word~) atan2_16::$7 (signed word~) atan2_16::$8 (signed word~) atan2_16::$9 (label) atan2_16::@1 (label) atan2_16::@13 (label) atan2_16::@15 (label) atan2_16::@16 (label) atan2_16::@17 (label) atan2_16::@18 (label) atan2_16::@19 (label) atan2_16::@2 (label) atan2_16::@20 (label) atan2_16::@24 (label) atan2_16::@25 (label) atan2_16::@26 (label) atan2_16::@27 (label) atan2_16::@3 (label) atan2_16::@30 (label) atan2_16::@33 (label) atan2_16::@4 (label) atan2_16::@5 (label) atan2_16::@6 (label) atan2_16::@7 (label) atan2_16::@8 (label) atan2_16::@return (word) atan2_16::angle (word) atan2_16::angle#0 (word) atan2_16::angle#1 (word) atan2_16::angle#10 (word) atan2_16::angle#11 (word) atan2_16::angle#12 (word) atan2_16::angle#13 (word) atan2_16::angle#14 (word) atan2_16::angle#15 (word) atan2_16::angle#16 (word) atan2_16::angle#17 (word) atan2_16::angle#18 (word) atan2_16::angle#19 (word) atan2_16::angle#2 (word) atan2_16::angle#20 (word) atan2_16::angle#3 (word) atan2_16::angle#4 (word) atan2_16::angle#5 (word) atan2_16::angle#6 (word) atan2_16::angle#7 (word) atan2_16::angle#8 (word) atan2_16::angle#9 (byte) atan2_16::i (byte) atan2_16::i#0 (byte) atan2_16::i#1 (byte) atan2_16::i#10 (byte) atan2_16::i#11 (byte) atan2_16::i#2 (byte) atan2_16::i#3 (byte) atan2_16::i#4 (byte) atan2_16::i#5 (byte) atan2_16::i#6 (byte) atan2_16::i#7 (byte) atan2_16::i#8 (byte) atan2_16::i#9 (word) atan2_16::return (word) atan2_16::return#0 (word) atan2_16::return#1 (word) atan2_16::return#2 (word) atan2_16::return#3 (word) atan2_16::return#4 (byte) atan2_16::shift (byte) atan2_16::shift#0 (byte) atan2_16::shift#1 (byte) atan2_16::shift#2 (byte) atan2_16::shift#3 (byte) atan2_16::shift#4 (signed word) atan2_16::x (signed word) atan2_16::x#0 (signed word) atan2_16::x#1 (signed word) atan2_16::x#10 (signed word) atan2_16::x#11 (signed word) atan2_16::x#12 (signed word) atan2_16::x#13 (signed word) atan2_16::x#14 (signed word) atan2_16::x#15 (signed word) atan2_16::x#16 (signed word) atan2_16::x#17 (signed word) atan2_16::x#18 (signed word) atan2_16::x#2 (signed word) atan2_16::x#3 (signed word) atan2_16::x#4 (signed word) atan2_16::x#5 (signed word) atan2_16::x#6 (signed word) atan2_16::x#7 (signed word) atan2_16::x#8 (signed word) atan2_16::x#9 (signed word) atan2_16::xd (signed word) atan2_16::xd#0 (signed word) atan2_16::xd#1 (signed word) atan2_16::xd#2 (signed word) atan2_16::xd#3 (signed word) atan2_16::xd#4 (signed word) atan2_16::xd#5 (signed word) atan2_16::xd#6 (signed word) atan2_16::xd#7 (signed word) atan2_16::xd#8 (signed word) atan2_16::xd#9 (signed word) atan2_16::xi (signed word) atan2_16::xi#0 (signed word) atan2_16::xi#1 (signed word) atan2_16::xi#10 (signed word) atan2_16::xi#11 (signed word) atan2_16::xi#12 (signed word) atan2_16::xi#2 (signed word) atan2_16::xi#3 (signed word) atan2_16::xi#4 (signed word) atan2_16::xi#5 (signed word) atan2_16::xi#6 (signed word) atan2_16::xi#7 (signed word) atan2_16::xi#8 (signed word) atan2_16::xi#9 (signed word) atan2_16::y (signed word) atan2_16::y#0 (signed word) atan2_16::y#1 (signed word) atan2_16::y#10 (signed word) atan2_16::y#11 (signed word) atan2_16::y#12 (signed word) atan2_16::y#13 (signed word) atan2_16::y#14 (signed word) atan2_16::y#15 (signed word) atan2_16::y#16 (signed word) atan2_16::y#17 (signed word) atan2_16::y#18 (signed word) atan2_16::y#19 (signed word) atan2_16::y#2 (signed word) atan2_16::y#20 (signed word) atan2_16::y#3 (signed word) atan2_16::y#4 (signed word) atan2_16::y#5 (signed word) atan2_16::y#6 (signed word) atan2_16::y#7 (signed word) atan2_16::y#8 (signed word) atan2_16::y#9 (signed word) atan2_16::yd (signed word) atan2_16::yd#0 (signed word) atan2_16::yd#1 (signed word) atan2_16::yd#2 (signed word) atan2_16::yd#3 (signed word) atan2_16::yd#4 (signed word) atan2_16::yd#5 (signed word) atan2_16::yd#6 (signed word) atan2_16::yd#7 (signed word) atan2_16::yd#8 (signed word) atan2_16::yd#9 (signed word) atan2_16::yi (signed word) atan2_16::yi#0 (signed word) atan2_16::yi#1 (signed word) atan2_16::yi#10 (signed word) atan2_16::yi#11 (signed word) atan2_16::yi#12 (signed word) atan2_16::yi#13 (signed word) atan2_16::yi#14 (signed word) atan2_16::yi#15 (signed word) atan2_16::yi#2 (signed word) atan2_16::yi#3 (signed word) atan2_16::yi#4 (signed word) atan2_16::yi#5 (signed word) atan2_16::yi#6 (signed word) atan2_16::yi#7 (signed word) atan2_16::yi#8 (signed word) atan2_16::yi#9 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (bool~) bsearch16u::$0 (word*~) bsearch16u::$1 (signed word~) bsearch16u::$10 (bool~) bsearch16u::$11 (bool~) bsearch16u::$12 (bool~) bsearch16u::$13 (bool~) bsearch16u::$14 (word*~) bsearch16u::$15 (byte~) bsearch16u::$16 (number~) bsearch16u::$17 (number~) bsearch16u::$18 (word*~) bsearch16u::$2 (word*~) bsearch16u::$3 (word*~) bsearch16u::$4 (bool~) bsearch16u::$5 (byte~) bsearch16u::$6 (word*~) bsearch16u::$7 (signed word~) bsearch16u::$8 (signed word~) bsearch16u::$9 (label) bsearch16u::@1 (label) bsearch16u::@10 (label) bsearch16u::@13 (label) bsearch16u::@15 (label) bsearch16u::@2 (label) bsearch16u::@3 (label) bsearch16u::@6 (label) bsearch16u::@7 (label) bsearch16u::@8 (label) bsearch16u::@9 (label) bsearch16u::@return (word*) bsearch16u::items (word*) bsearch16u::items#0 (word*) bsearch16u::items#1 (word*) bsearch16u::items#2 (word*) bsearch16u::items#3 (word*) bsearch16u::items#4 (word*) bsearch16u::items#5 (word*) bsearch16u::items#6 (word*) bsearch16u::items#7 (word*) bsearch16u::items#8 (word*) bsearch16u::items#9 (word) bsearch16u::key (word) bsearch16u::key#0 (word) bsearch16u::key#1 (word) bsearch16u::key#2 (word) bsearch16u::key#3 (word) bsearch16u::key#4 (word) bsearch16u::key#5 (word) bsearch16u::key#6 (word) bsearch16u::key#7 (byte) bsearch16u::num (byte) bsearch16u::num#0 (byte) bsearch16u::num#1 (byte) bsearch16u::num#2 (byte) bsearch16u::num#3 (byte) bsearch16u::num#4 (byte) bsearch16u::num#5 (byte) bsearch16u::num#6 (byte) bsearch16u::num#7 (byte) bsearch16u::num#8 (word*) bsearch16u::pivot (word*) bsearch16u::pivot#0 (word*) bsearch16u::pivot#1 (word*) bsearch16u::pivot#2 (word*) bsearch16u::pivot#3 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 (signed word) bsearch16u::result#1 (word*) bsearch16u::return (word*) bsearch16u::return#0 (word*) bsearch16u::return#1 (word*) bsearch16u::return#2 (word*) bsearch16u::return#3 (word*) bsearch16u::return#4 (word*) bsearch16u::return#5 (byte*) heap_head (byte*) heap_head#0 (byte*) heap_head#1 (byte*) heap_head#10 (byte*) heap_head#11 (byte*) heap_head#12 (byte*) heap_head#13 (byte*) heap_head#14 (byte*) heap_head#15 (byte*) heap_head#16 (byte*) heap_head#17 (byte*) heap_head#18 (byte*) heap_head#19 (byte*) heap_head#2 (byte*) heap_head#20 (byte*) heap_head#21 (byte*) heap_head#22 (byte*) heap_head#23 (byte*) heap_head#24 (byte*) heap_head#25 (byte*) heap_head#26 (byte*) heap_head#27 (byte*) heap_head#28 (byte*) heap_head#29 (byte*) heap_head#3 (byte*) heap_head#30 (byte*) heap_head#31 (byte*) heap_head#32 (byte*) heap_head#33 (byte*) heap_head#34 (byte*) heap_head#35 (byte*) heap_head#36 (byte*) heap_head#37 (byte*) heap_head#38 (byte*) heap_head#39 (byte*) heap_head#4 (byte*) heap_head#40 (byte*) heap_head#41 (byte*) heap_head#42 (byte*) heap_head#43 (byte*) heap_head#44 (byte*) heap_head#45 (byte*) heap_head#46 (byte*) heap_head#47 (byte*) heap_head#48 (byte*) heap_head#49 (byte*) heap_head#5 (byte*) heap_head#50 (byte*) heap_head#51 (byte*) heap_head#52 (byte*) heap_head#6 (byte*) heap_head#7 (byte*) heap_head#8 (byte*) heap_head#9 (void()) init_angle_screen((byte*) init_angle_screen::screen) (byte*~) init_angle_screen::$0 (byte*~) init_angle_screen::$1 (word~) init_angle_screen::$10 (number~) init_angle_screen::$11 (number~) init_angle_screen::$12 (byte~) init_angle_screen::$13 (number~) init_angle_screen::$14 (number~) init_angle_screen::$15 (bool~) init_angle_screen::$16 (bool~) init_angle_screen::$2 (number~) init_angle_screen::$3 (number~) init_angle_screen::$4 (word~) init_angle_screen::$5 (signed word~) init_angle_screen::$6 (number~) init_angle_screen::$7 (word~) init_angle_screen::$8 (signed word~) init_angle_screen::$9 (label) init_angle_screen::@1 (label) init_angle_screen::@2 (label) init_angle_screen::@3 (label) init_angle_screen::@4 (label) init_angle_screen::@9 (label) init_angle_screen::@return (byte) init_angle_screen::ang_w (byte) init_angle_screen::ang_w#0 (word) init_angle_screen::angle_w (word) init_angle_screen::angle_w#0 (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen#0 (byte*) init_angle_screen::screen#1 (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 (byte*) init_angle_screen::screen_bottomline#1 (byte*) init_angle_screen::screen_bottomline#2 (byte*) init_angle_screen::screen_bottomline#3 (byte*) init_angle_screen::screen_bottomline#4 (byte*) init_angle_screen::screen_bottomline#5 (byte*) init_angle_screen::screen_bottomline#6 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 (byte*) init_angle_screen::screen_topline#1 (byte*) init_angle_screen::screen_topline#2 (byte*) init_angle_screen::screen_topline#3 (byte*) init_angle_screen::screen_topline#4 (byte*) init_angle_screen::screen_topline#5 (byte*) init_angle_screen::screen_topline#6 (byte) init_angle_screen::x (byte) init_angle_screen::x#0 (byte) init_angle_screen::x#1 (byte) init_angle_screen::x#2 (byte) init_angle_screen::x#3 (byte) init_angle_screen::x#4 (byte) init_angle_screen::xb (byte) init_angle_screen::xb#0 (byte) init_angle_screen::xb#1 (byte) init_angle_screen::xb#2 (byte) init_angle_screen::xb#3 (byte) init_angle_screen::xb#4 (signed word) init_angle_screen::xw (signed word) init_angle_screen::xw#0 (byte) init_angle_screen::y (byte) init_angle_screen::y#0 (byte) init_angle_screen::y#1 (byte) init_angle_screen::y#2 (byte) init_angle_screen::y#3 (byte) init_angle_screen::y#4 (byte) init_angle_screen::y#5 (byte) init_angle_screen::y#6 (signed word) init_angle_screen::yw (signed word) init_angle_screen::yw#0 (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte*~) init_dist_screen::$1 (bool~) init_dist_screen::$10 (number~) init_dist_screen::$11 (bool~) init_dist_screen::$12 (number~) init_dist_screen::$13 (number~) init_dist_screen::$14 (number~) init_dist_screen::$15 (number~) init_dist_screen::$16 (number~) init_dist_screen::$17 (word~) init_dist_screen::$18 (word~) init_dist_screen::$19 (number~) init_dist_screen::$2 (byte~) init_dist_screen::$20 (bool~) init_dist_screen::$21 (bool~) init_dist_screen::$3 (number~) init_dist_screen::$4 (number~) init_dist_screen::$5 (number~) init_dist_screen::$6 (number~) init_dist_screen::$7 (number~) init_dist_screen::$8 (word~) init_dist_screen::$9 (label) init_dist_screen::@1 (label) init_dist_screen::@10 (label) init_dist_screen::@19 (label) init_dist_screen::@2 (label) init_dist_screen::@20 (label) init_dist_screen::@21 (label) init_dist_screen::@22 (label) init_dist_screen::@3 (label) init_dist_screen::@4 (label) init_dist_screen::@5 (label) init_dist_screen::@6 (label) init_dist_screen::@7 (label) init_dist_screen::@8 (label) init_dist_screen::@9 (label) init_dist_screen::@return (byte) init_dist_screen::d (byte) init_dist_screen::d#0 (word) init_dist_screen::ds (word) init_dist_screen::ds#0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen#0 (byte*) init_dist_screen::screen#1 (byte*) init_dist_screen::screen#2 (byte*) init_dist_screen::screen_bottomline (byte*) init_dist_screen::screen_bottomline#0 (byte*) init_dist_screen::screen_bottomline#1 (byte*) init_dist_screen::screen_bottomline#10 (byte*) init_dist_screen::screen_bottomline#11 (byte*) init_dist_screen::screen_bottomline#12 (byte*) init_dist_screen::screen_bottomline#13 (byte*) init_dist_screen::screen_bottomline#14 (byte*) init_dist_screen::screen_bottomline#2 (byte*) init_dist_screen::screen_bottomline#3 (byte*) init_dist_screen::screen_bottomline#4 (byte*) init_dist_screen::screen_bottomline#5 (byte*) init_dist_screen::screen_bottomline#6 (byte*) init_dist_screen::screen_bottomline#7 (byte*) init_dist_screen::screen_bottomline#8 (byte*) init_dist_screen::screen_bottomline#9 (byte*) init_dist_screen::screen_topline (byte*) init_dist_screen::screen_topline#0 (byte*) init_dist_screen::screen_topline#1 (byte*) init_dist_screen::screen_topline#10 (byte*) init_dist_screen::screen_topline#11 (byte*) init_dist_screen::screen_topline#12 (byte*) init_dist_screen::screen_topline#13 (byte*) init_dist_screen::screen_topline#14 (byte*) init_dist_screen::screen_topline#2 (byte*) init_dist_screen::screen_topline#3 (byte*) init_dist_screen::screen_topline#4 (byte*) init_dist_screen::screen_topline#5 (byte*) init_dist_screen::screen_topline#6 (byte*) init_dist_screen::screen_topline#7 (byte*) init_dist_screen::screen_topline#8 (byte*) init_dist_screen::screen_topline#9 (byte) init_dist_screen::x (byte) init_dist_screen::x#0 (byte) init_dist_screen::x#1 (byte) init_dist_screen::x#2 (byte) init_dist_screen::x#3 (byte) init_dist_screen::x#4 (byte) init_dist_screen::x#5 (byte) init_dist_screen::x#6 (byte) init_dist_screen::x#7 (byte) init_dist_screen::x#8 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 (byte) init_dist_screen::x2#1 (byte) init_dist_screen::x2#2 (byte) init_dist_screen::xb (byte) init_dist_screen::xb#0 (byte) init_dist_screen::xb#1 (byte) init_dist_screen::xb#2 (byte) init_dist_screen::xb#3 (byte) init_dist_screen::xb#4 (byte) init_dist_screen::xb#5 (byte) init_dist_screen::xb#6 (byte) init_dist_screen::xb#7 (byte) init_dist_screen::xb#8 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 (word) init_dist_screen::xds (word) init_dist_screen::xds#0 (byte) init_dist_screen::y (byte) init_dist_screen::y#0 (byte) init_dist_screen::y#1 (byte) init_dist_screen::y#10 (byte) init_dist_screen::y#11 (byte) init_dist_screen::y#12 (byte) init_dist_screen::y#13 (byte) init_dist_screen::y#14 (byte) init_dist_screen::y#2 (byte) init_dist_screen::y#3 (byte) init_dist_screen::y#4 (byte) init_dist_screen::y#5 (byte) init_dist_screen::y#6 (byte) init_dist_screen::y#7 (byte) init_dist_screen::y#8 (byte) init_dist_screen::y#9 (byte) init_dist_screen::y2 (byte) init_dist_screen::y2#0 (byte) init_dist_screen::y2#1 (byte) init_dist_screen::y2#2 (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 (word) init_dist_screen::yds (word) init_dist_screen::yds#0 (word) init_dist_screen::yds#1 (word) init_dist_screen::yds#2 (word) init_dist_screen::yds#3 (word) init_dist_screen::yds#4 (word) init_dist_screen::yds#5 (word) init_dist_screen::yds#6 (word) init_dist_screen::yds#7 (void()) init_squares() (byte~) init_squares::$0 (void*~) init_squares::$1 (number~) init_squares::$2 (number~) init_squares::$3 (number~) init_squares::$4 (bool~) init_squares::$5 (label) init_squares::@1 (label) init_squares::@3 (label) init_squares::@return (byte) init_squares::i (byte) init_squares::i#0 (byte) init_squares::i#1 (byte) init_squares::i#2 (word) init_squares::sqr (word) init_squares::sqr#0 (word) init_squares::sqr#1 (word) init_squares::sqr#2 (word*) init_squares::squares (word*) init_squares::squares#0 (word*) init_squares::squares#1 (word*) init_squares::squares#2 (void()) main() (bool~) main::$2 (bool~) main::$3 (bool~) main::$4 (bool~) main::$5 (bool~) main::$6 (bool~) main::$7 (bool~) main::$8 (label) main::@1 (label) main::@12 (label) main::@17 (label) main::@18 (label) main::@2 (label) main::@4 (label) main::@5 (label) main::@7 (label) main::@8 (label) main::@9 (label) main::@return (byte*) main::angle (byte*) main::angle#0 (byte*) main::angle#1 (byte*) main::angle#2 (byte*) main::angle#3 (byte*) main::angle#4 (byte*) main::angle#5 (byte*) main::dist (byte*) main::dist#0 (byte*) main::dist#1 (byte*) main::dist#2 (byte*) main::dist#3 (byte*) main::dist#4 (byte*) main::dist#5 (word) main::dist_angle (word) main::dist_angle#0 (word) main::dist_angle#1 (byte*) main::fill (byte*) main::fill#0 (byte*) main::fill#1 (byte*) main::fill#2 (byte*) main::fill#3 (byte*) main::fill#4 (byte*) main::fill#5 (word) main::min_dist_angle (word) main::min_dist_angle#0 (word) main::min_dist_angle#1 (word) main::min_dist_angle#2 (word) main::min_dist_angle#3 (word) main::min_dist_angle#4 (word) main::min_dist_angle#5 (byte*) main::min_fill (byte*) main::min_fill#0 (byte*) main::min_fill#1 (byte*) main::min_fill#2 (byte*) main::min_fill#3 (byte*) main::min_fill#4 (byte*) main::min_fill#5 (byte*) main::min_fill#6 (void*()) malloc((word) malloc::size) (byte*~) malloc::$0 (label) malloc::@return (byte*) malloc::mem (byte*) malloc::mem#0 (void*) malloc::return (void*) malloc::return#0 (void*) malloc::return#1 (void*) malloc::return#2 (void*) malloc::return#3 (void*) malloc::return#4 (void*) malloc::return#5 (void*) malloc::return#6 (void*) malloc::return#7 (void*) malloc::return#8 (word) malloc::size (word) malloc::size#0 (word) malloc::size#1 (word) malloc::size#2 (word) malloc::size#3 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 (label) sqr::@return (word) sqr::return (word) sqr::return#0 (word) sqr::return#1 (word) sqr::return#2 (word) sqr::return#3 (word) sqr::return#4 (word) sqr::return#5 (word) sqr::return#6 (byte) sqr::val (byte) sqr::val#0 (byte) sqr::val#1 (byte) sqr::val#2 (byte()) sqrt((word) sqrt::val) (word*~) sqrt::$0 (word~) sqrt::$1 (byte~) sqrt::$2 (word~) sqrt::$3 (label) sqrt::@2 (label) sqrt::@return (word*) sqrt::found (word*) sqrt::found#0 (byte) sqrt::return (byte) sqrt::return#0 (byte) sqrt::return#1 (byte) sqrt::return#2 (byte) sqrt::return#3 (byte) sqrt::return#4 (byte) sqrt::sq (byte) sqrt::sq#0 (word) sqrt::val (word) sqrt::val#0 (word) sqrt::val#1 Fixing inline constructor with main::$9 ← (byte)*(main::dist#3) w= (byte)*(main::angle#3) Fixing inline constructor with init_angle_screen::$17 ← (byte)init_angle_screen::$4 w= (byte)0 Fixing inline constructor with init_angle_screen::$18 ← (byte)init_angle_screen::$7 w= (byte)0 Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) 0 in (bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0 Adding number conversion cast (unumber) 1 in (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1 Adding number conversion cast (snumber) 0 in (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (number) 0 Adding number conversion cast (snumber) 0 in (bool~) bsearch16u::$13 ← (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::$17 ← (number) 1 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) bsearch16u::$17 in (number~) bsearch16u::$17 ← (unumber)(number) 1 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) 1 in (number~) bsearch16u::$18 ← (number) 1 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) bsearch16u::$18 in (number~) bsearch16u::$18 ← (unumber)(number) 1 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) $ff in (byte) NUM_SQUARES#0 ← (number) $ff Adding number conversion cast (unumber) 0 in (word) init_squares::sqr#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (number) 1 Adding number conversion cast (unumber) init_squares::$2 in (number~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (unumber)(number) 1 Adding number conversion cast (unumber) 2 in (number~) init_squares::$3 ← (byte) init_squares::i#2 * (number) 2 Adding number conversion cast (unumber) init_squares::$3 in (number~) init_squares::$3 ← (byte) init_squares::i#2 * (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 (unumber) 0 in (word) atan2_16::angle#0 ← (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 (word) malloc::size#1 ← (number) $3e8 Adding number conversion cast (unumber) $3e8 in (word) malloc::size#2 ← (number) $3e8 Adding number conversion cast (unumber) $ffff in (word) main::min_dist_angle#0 ← (number) $ffff Adding number conversion cast (unumber) $3e8 in (bool~) main::$6 ← (byte*) main::fill#1 < (const 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) 0 in (byte) init_angle_screen::x#0 ← (number) 0 Adding number conversion cast (unumber) $27 in (byte) init_angle_screen::xb#0 ← (number) $27 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::$7 ← (byte) init_angle_screen::y#2 * (number) 2 Adding number conversion cast (unumber) init_angle_screen::$7 in (number~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (unumber)(number) 2 Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (number) $80 Adding number conversion cast (unumber) init_angle_screen::$11 in (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (unumber)(number) $80 Adding number conversion cast (unumber) init_angle_screen::$12 in (number~) init_angle_screen::$12 ← > (unumber~) init_angle_screen::$11 Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$14 ← (number) $80 + (byte) init_angle_screen::ang_w#0 Adding number conversion cast (unumber) init_angle_screen::$14 in (number~) init_angle_screen::$14 ← (unumber)(number) $80 + (byte) init_angle_screen::ang_w#0 Adding number conversion cast (unumber) $80 in (number~) init_angle_screen::$15 ← (number) $80 - (byte) init_angle_screen::ang_w#0 Adding number conversion cast (unumber) init_angle_screen::$15 in (number~) init_angle_screen::$15 ← (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#3 ← (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#35 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#38 init_dist_screen::@3/(byte) NUM_SQUARES#39 ) (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#19 ← phi( init_dist_screen::@2/(word*) SQUARES#30 init_dist_screen::@3/(word*) SQUARES#31 ) (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) 0 in (byte) init_dist_screen::x#0 ← (number) 0 Adding number conversion cast (unumber) $27 in (byte) init_dist_screen::xb#0 ← (number) $27 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#23 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#31 init_dist_screen::@9/(byte) NUM_SQUARES#32 ) (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#18 ← phi( init_dist_screen::@8/(word*) SQUARES#33 init_dist_screen::@9/(word*) SQUARES#34 ) (number~) init_dist_screen::$17 ← phi( init_dist_screen::@8/(unumber~) init_dist_screen::$16 init_dist_screen::@9/(unumber~) init_dist_screen::$14 ) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 Inlining cast (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#1 Inlining cast (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) Inlining cast (byte) NUM_SQUARES#0 ← (unumber)(number) $ff Inlining cast (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 Inlining cast (word) init_squares::sqr#0 ← (unumber)(number) 0 Inlining cast (byte~) sqrt::$2 ← (byte)(word~) sqrt::$1 Inlining cast (word) atan2_16::angle#0 ← (unumber)(number) 0 Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8 Inlining cast (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $0 Inlining cast (word) malloc::size#2 ← (unumber)(number) $3e8 Inlining cast (byte*) SCREEN_ANGLE#0 ← (byte*)(void*~) $1 Inlining cast (word) main::min_dist_angle#0 ← (unumber)(number) $ffff Inlining cast (byte) init_angle_screen::x#0 ← (unumber)(number) 0 Inlining cast (byte) init_angle_screen::xb#0 ← (unumber)(number) $27 Inlining cast (signed word~) init_angle_screen::$6 ← (signed word)(word~) init_angle_screen::$5 Inlining cast (signed word~) init_angle_screen::$9 ← (signed word)(word~) init_angle_screen::$8 Inlining cast (byte) NUM_SQUARES#3 ← (unumber)(number) $30 Inlining cast (byte) init_dist_screen::x#0 ← (unumber)(number) 0 Inlining cast (byte) init_dist_screen::xb#0 ← (unumber)(number) $27 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 $ff Simplifying constant integer cast 0 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 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 $3e8 Simplifying constant integer cast $ffff 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 0 Simplifying constant integer cast $27 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 0 Simplifying constant integer cast $27 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 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) $ff Finalized unsigned number type (byte) 0 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 unsigned number type (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) $3e8 Finalized unsigned number type (word) $ffff Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $ffff Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $27 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) 0 Finalized unsigned number type (byte) $27 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 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD Inferred type updated to byte in (unumber~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD Inferred type updated to byte in (unumber~) init_squares::$2 ← (byte) NUM_SQUARES#7 - (byte) 1 Inferred type updated to byte in (unumber~) init_squares::$3 ← (byte) init_squares::i#2 * (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::$7 ← (byte) init_angle_screen::y#2 * (byte) 2 Inferred type updated to word in (unumber~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 Inferred type updated to byte in (unumber~) init_angle_screen::$12 ← > (word~) init_angle_screen::$11 Inferred type updated to byte in (unumber~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 Inferred type updated to byte in (unumber~) init_angle_screen::$15 ← (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 [24] (bool~) bsearch16u::$12 ← (signed word) bsearch16u::result#0 != (signed byte) 0 from [23] (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (signed byte) 0 Inversing boolean not [31] (bool~) bsearch16u::$14 ← (signed word) bsearch16u::result#1 <= (signed byte) 0 from [30] (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (signed byte) 0 Inversing boolean not [130] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [129] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0 Inversing boolean not [139] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [138] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 Inversing boolean not [150] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [149] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4 Inversing boolean not [174] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [173] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0 Inversing boolean not [222] (bool~) main::$3 ← *((byte*) main::fill#2) == (const byte) FILL_CHAR from [221] (bool~) main::$2 ← *((byte*) main::fill#2) != (const byte) FILL_CHAR Inversing boolean not [234] (bool~) main::$5 ← (word) main::dist_angle#0 >= (word) main::min_dist_angle#2 from [233] (bool~) main::$4 ← (word) main::dist_angle#0 < (word) main::min_dist_angle#2 Inversing boolean not [241] (bool~) main::$8 ← (word) main::min_dist_angle#3 != (word) $ffff from [240] (bool~) main::$7 ← (word) main::min_dist_angle#3 == (word) $ffff Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) malloc::mem#0 = (byte*~) malloc::$0 Alias (void*) malloc::return#0 = (void*) malloc::return#5 (void*) malloc::return#1 Alias (byte*) heap_head#1 = (byte*) heap_head#13 (byte*) heap_head#2 Alias (byte) bsearch16u::num#3 = (byte) bsearch16u::num#4 (byte) bsearch16u::num#8 (byte) bsearch16u::num#6 Alias (word*) bsearch16u::items#2 = (word*) bsearch16u::items#6 (word*) bsearch16u::items#3 (word*) bsearch16u::items#9 (word*) bsearch16u::items#4 (word*~) bsearch16u::$3 (word*) bsearch16u::items#5 Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#3 (word) bsearch16u::key#2 (word) bsearch16u::key#7 (word) bsearch16u::key#6 Alias (word*) bsearch16u::pivot#0 = (word*~) bsearch16u::$7 (word*) bsearch16u::pivot#3 (word*) bsearch16u::pivot#1 (word*) bsearch16u::return#0 (word*) bsearch16u::pivot#2 Alias (signed word) bsearch16u::result#0 = (signed word~) bsearch16u::$10 (signed word) bsearch16u::result#1 Alias (word*) bsearch16u::return#1 = (word*) bsearch16u::return#4 Alias (word*) bsearch16u::items#0 = (word*~) bsearch16u::$15 Alias (word*~) bsearch16u::$2 = (word*~) bsearch16u::$1 Alias (word*) bsearch16u::return#2 = (word*~) bsearch16u::$4 Alias (byte*) heap_head#0 = (byte*) heap_head#37 (byte*) heap_head#32 (byte*) heap_head#23 Alias (word) malloc::size#0 = (byte~) init_squares::$0 Alias (void*) malloc::return#2 = (void*) malloc::return#6 Alias (byte) NUM_SQUARES#6 = (byte) NUM_SQUARES#7 Alias (byte*) heap_head#14 = (byte*) heap_head#3 Alias (byte*) heap_head#15 = (byte*) heap_head#25 (byte*) heap_head#4 Alias (word*) SQUARES#17 = (word*) SQUARES#8 (word*) SQUARES#2 Alias (word) sqr::return#0 = (word) sqr::return#4 (word) sqr::return#1 Alias (word*) bsearch16u::return#3 = (word*) bsearch16u::return#5 Alias (word*) SQUARES#10 = (word*) SQUARES#11 Alias (word*) sqrt::found#0 = (word*~) sqrt::$0 Alias (byte) sqrt::return#0 = (byte) sqrt::sq#0 (byte~) sqrt::$2 (byte) sqrt::return#3 (byte) sqrt::return#1 Alias (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#37 (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#18 Alias (word*) SQUARES#0 = (word*) SQUARES#46 (word*) SQUARES#44 (word*) SQUARES#36 (word*) SQUARES#35 (word*) SQUARES#26 Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#2 (signed word~) atan2_16::$3 (signed word) atan2_16::y#3 Alias (signed word) atan2_16::x#5 = (signed word) atan2_16::x#9 (signed word) atan2_16::x#6 Alias (signed word~) atan2_16::$2 = (signed word~) atan2_16::$1 Alias (signed word) atan2_16::yi#0 = (signed word~) atan2_16::$4 (signed word) atan2_16::yi#12 (signed word) atan2_16::yi#13 Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#2 (signed word~) atan2_16::$8 (signed word) atan2_16::x#3 Alias (signed word) atan2_16::y#12 = (signed word) atan2_16::y#15 (signed word) atan2_16::y#13 Alias (signed word~) atan2_16::$7 = (signed word~) atan2_16::$6 Alias (signed word) atan2_16::xi#0 = (signed word~) atan2_16::$9 Alias (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#6 (signed word) atan2_16::xd#0 Alias (signed word) atan2_16::yi#3 = (signed word) atan2_16::yi#4 (signed word) atan2_16::yd#0 Alias (byte) atan2_16::i#2 = (byte) atan2_16::i#6 (byte) atan2_16::shift#0 Alias (word) atan2_16::angle#12 = (word) atan2_16::angle#19 Alias (signed word) atan2_16::x#17 = (signed word) atan2_16::x#7 Alias (signed word) atan2_16::y#19 = (signed word) atan2_16::y#7 Alias (signed word) atan2_16::xd#3 = (signed word) atan2_16::xd#7 (signed word) atan2_16::xd#8 (signed word) atan2_16::xd#4 Alias (signed word) atan2_16::yd#3 = (signed word) atan2_16::yd#7 (signed word) atan2_16::yd#8 (signed word) atan2_16::yd#4 Alias (byte) atan2_16::shift#2 = (byte) atan2_16::shift#3 (byte) atan2_16::shift#4 Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#15 (signed word) atan2_16::yi#14 (signed word) atan2_16::yi#11 Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#12 (signed word) atan2_16::xi#11 (signed word) atan2_16::xi#9 Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#11 (byte) atan2_16::i#8 (byte) atan2_16::i#9 Alias (word) atan2_16::angle#16 = (word) atan2_16::angle#20 (word) atan2_16::angle#18 (word) atan2_16::angle#17 Alias (signed word) atan2_16::x#14 = (signed word) atan2_16::x#18 (signed word) atan2_16::x#16 (signed word) atan2_16::x#15 Alias (signed word) atan2_16::y#16 = (signed word) atan2_16::y#20 (signed word) atan2_16::y#18 (signed word) atan2_16::y#17 Alias (signed word) atan2_16::xi#4 = (signed word) atan2_16::xi#7 (signed word) atan2_16::xi#5 Alias (signed word) atan2_16::yd#5 = (signed word) atan2_16::yd#9 (signed word) atan2_16::yd#6 Alias (signed word) atan2_16::yi#5 = (signed word) atan2_16::yi#6 (signed word) atan2_16::yi#7 Alias (signed word) atan2_16::xd#5 = (signed word) atan2_16::xd#9 (signed word) atan2_16::xd#6 Alias (byte) atan2_16::i#3 = (byte) atan2_16::i#7 (byte) atan2_16::i#4 Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#7 (word) atan2_16::angle#8 Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#13 (signed word) atan2_16::x#12 Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#14 (signed word) atan2_16::y#11 Alias (word) atan2_16::angle#1 = (word) atan2_16::angle#9 Alias (signed word) atan2_16::y#5 = (signed word) atan2_16::y#6 Alias (word) atan2_16::angle#4 = (word~) atan2_16::$12 Alias (word) atan2_16::return#0 = (word) atan2_16::angle#10 (word) atan2_16::return#3 (word) atan2_16::return#1 Alias (word) atan2_16::angle#11 = (word) atan2_16::angle#15 Alias (word) atan2_16::angle#5 = (word~) atan2_16::$15 Alias (void*) malloc::return#3 = (void*) malloc::return#7 Alias (byte*) heap_head#16 = (byte*) heap_head#5 Alias (void*) malloc::return#4 = (void*) malloc::return#8 Alias (byte*) SCREEN_DIST#0 = (byte*) SCREEN_DIST#7 (byte*) SCREEN_DIST#3 Alias (byte*) heap_head#17 = (byte*) heap_head#6 (byte*) heap_head#31 Alias (byte*) SCREEN_ANGLE#1 = (byte*) SCREEN_ANGLE#3 (byte*) SCREEN_ANGLE#7 Alias (byte*) SCREEN_DIST#1 = (byte*) SCREEN_DIST#8 (byte*) SCREEN_DIST#6 Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#20 Alias (byte*) heap_head#18 = (byte*) heap_head#7 (byte*) heap_head#34 Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#28 Alias (byte*) SCREEN_DIST#2 = (byte*) SCREEN_DIST#4 Alias (byte*) SCREEN_ANGLE#2 = (byte*) SCREEN_ANGLE#4 Alias (byte) NUM_SQUARES#15 = (byte) NUM_SQUARES#34 Alias (byte*) heap_head#27 = (byte*) heap_head#43 Alias (word*) SQUARES#22 = (word*) SQUARES#45 Alias (byte*) main::dist#3 = (byte*) main::dist#4 (byte*) main::dist#5 Alias (byte*) main::angle#3 = (byte*) main::angle#4 (byte*) main::angle#5 Alias (word) main::min_dist_angle#2 = (word) main::min_dist_angle#4 Alias (byte*) main::fill#2 = (byte*) main::fill#5 (byte*) main::fill#4 (byte*) main::min_fill#1 Alias (byte*) main::min_fill#5 = (byte*) main::min_fill#6 Alias (byte) NUM_SQUARES#26 = (byte) NUM_SQUARES#27 (byte) NUM_SQUARES#28 Alias (byte*) heap_head#38 = (byte*) heap_head#39 (byte*) heap_head#40 Alias (word*) SQUARES#37 = (word*) SQUARES#38 (word*) SQUARES#39 Alias (byte*) SCREEN_DIST#11 = (byte*) SCREEN_DIST#12 (byte*) SCREEN_DIST#13 Alias (byte*) SCREEN_ANGLE#10 = (byte*) SCREEN_ANGLE#11 (byte*) SCREEN_ANGLE#12 Alias (word) main::dist_angle#0 = (word~) main::$9 (word) main::dist_angle#1 (word) main::min_dist_angle#1 Alias (word) main::min_dist_angle#3 = (word) main::min_dist_angle#5 Alias (byte*) main::min_fill#2 = (byte*) main::min_fill#3 (byte*) main::min_fill#4 Alias (byte) NUM_SQUARES#16 = (byte) NUM_SQUARES#21 (byte) NUM_SQUARES#19 Alias (byte*) heap_head#28 = (byte*) heap_head#35 (byte*) heap_head#33 Alias (word*) SQUARES#23 = (word*) SQUARES#29 (word*) SQUARES#27 Alias (byte*) SCREEN_DIST#10 = (byte*) SCREEN_DIST#9 (byte*) SCREEN_DIST#5 Alias (byte*) SCREEN_ANGLE#6 = (byte*) SCREEN_ANGLE#8 (byte*) SCREEN_ANGLE#9 Alias (byte) NUM_SQUARES#10 = (byte) NUM_SQUARES#2 Alias (byte*) heap_head#19 = (byte*) heap_head#8 Alias (word*) SQUARES#13 = (word*) SQUARES#4 Alias (byte*) init_angle_screen::screen_topline#0 = (byte*~) init_angle_screen::$0 Alias (byte*) init_angle_screen::screen_bottomline#0 = (byte*~) init_angle_screen::$1 Alias (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#3 (byte) init_angle_screen::x#4 Alias (byte) init_angle_screen::y#2 = (byte) init_angle_screen::y#4 (byte) init_angle_screen::y#6 (byte) init_angle_screen::y#3 Alias (byte*) init_angle_screen::screen_bottomline#2 = (byte*) init_angle_screen::screen_bottomline#4 (byte*) init_angle_screen::screen_bottomline#5 (byte*) init_angle_screen::screen_bottomline#3 Alias (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#3 (byte) init_angle_screen::xb#4 Alias (byte*) init_angle_screen::screen_topline#2 = (byte*) init_angle_screen::screen_topline#4 (byte*) init_angle_screen::screen_topline#5 (byte*) init_angle_screen::screen_topline#3 Alias (word~) init_angle_screen::$5 = (word~) init_angle_screen::$17 Alias (signed word) init_angle_screen::xw#0 = (signed word~) init_angle_screen::$6 Alias (word~) init_angle_screen::$8 = (word~) init_angle_screen::$18 Alias (signed word) init_angle_screen::yw#0 = (signed word~) init_angle_screen::$9 Alias (word) atan2_16::return#2 = (word) atan2_16::return#4 Alias (word) init_angle_screen::angle_w#0 = (word~) init_angle_screen::$10 Alias (byte) init_angle_screen::ang_w#0 = (byte~) init_angle_screen::$12 Alias (byte*) init_dist_screen::screen#1 = (byte*) init_dist_screen::screen#2 (byte*) init_dist_screen::screen_topline#0 Alias (byte) NUM_SQUARES#3 = (byte) NUM_SQUARES#41 Alias (byte*) heap_head#20 = (byte*) heap_head#9 Alias (word*) SQUARES#14 = (word*) SQUARES#5 Alias (byte*) init_dist_screen::screen_bottomline#0 = (byte*~) init_dist_screen::$1 Alias (byte) init_dist_screen::y2#0 = (byte~) init_dist_screen::$2 (byte) init_dist_screen::y2#1 (byte) init_dist_screen::y2#2 Alias (word*) SQUARES#30 = (word*) SQUARES#40 (word*) SQUARES#31 Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#14 (byte*) init_dist_screen::screen_topline#12 Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#14 (byte*) init_dist_screen::screen_bottomline#12 Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#9 (byte) init_dist_screen::y#2 Alias (byte) NUM_SQUARES#38 = (byte) NUM_SQUARES#40 (byte) NUM_SQUARES#39 Alias (byte*) heap_head#46 = (byte*) heap_head#49 (byte*) heap_head#47 Alias (byte~) init_dist_screen::$7 = (byte~) init_dist_screen::$6 Alias (byte~) init_dist_screen::$5 = (byte~) init_dist_screen::$4 Alias (byte) init_dist_screen::yd#0 = (byte~) init_dist_screen::$8 Alias (word) sqr::return#2 = (word) sqr::return#5 Alias (byte*) init_dist_screen::screen_topline#6 = (byte*) init_dist_screen::screen_topline#8 Alias (byte*) init_dist_screen::screen_bottomline#6 = (byte*) init_dist_screen::screen_bottomline#8 Alias (byte) init_dist_screen::y#5 = (byte) init_dist_screen::y#7 Alias (byte) NUM_SQUARES#29 = (byte) NUM_SQUARES#35 Alias (byte*) heap_head#41 = (byte*) heap_head#44 Alias (word*) SQUARES#19 = (word*) SQUARES#41 Alias (word) init_dist_screen::yds#0 = (word~) init_dist_screen::$9 Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#3 (byte) init_dist_screen::x#7 (byte) init_dist_screen::x#8 Alias (word*) SQUARES#15 = (word*) SQUARES#43 (word*) SQUARES#32 (word*) SQUARES#25 (word*) SQUARES#33 (word*) SQUARES#34 (word*) SQUARES#6 Alias (word) init_dist_screen::yds#3 = (word) init_dist_screen::yds#5 (word) init_dist_screen::yds#6 (word) init_dist_screen::yds#4 Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#22 (byte) NUM_SQUARES#17 (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#32 (byte) NUM_SQUARES#4 Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#13 (byte*) init_dist_screen::screen_topline#4 (byte*) init_dist_screen::screen_topline#2 (byte*) init_dist_screen::screen_topline#9 Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#13 (byte*) init_dist_screen::screen_bottomline#4 (byte*) init_dist_screen::screen_bottomline#2 (byte*) init_dist_screen::screen_bottomline#9 Alias (byte) init_dist_screen::xb#5 = (byte) init_dist_screen::xb#7 (byte) init_dist_screen::xb#8 (byte) init_dist_screen::xb#6 Alias (byte) init_dist_screen::y#12 = (byte) init_dist_screen::y#14 (byte) init_dist_screen::y#4 (byte) init_dist_screen::y#3 (byte) init_dist_screen::y#13 Alias (byte*) heap_head#10 = (byte*) heap_head#52 (byte*) heap_head#36 (byte*) heap_head#30 (byte*) heap_head#50 (byte*) heap_head#51 (byte*) heap_head#21 Alias (byte) init_dist_screen::x2#0 = (byte~) init_dist_screen::$11 (byte) init_dist_screen::x2#1 (byte) init_dist_screen::x2#2 Alias (byte~) init_dist_screen::$16 = (byte~) init_dist_screen::$15 Alias (byte~) init_dist_screen::$14 = (byte~) init_dist_screen::$13 Alias (byte) init_dist_screen::xd#0 = (byte~) init_dist_screen::$17 Alias (word) sqr::return#3 = (word) sqr::return#6 Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#2 (word) init_dist_screen::yds#7 Alias (word*) SQUARES#18 = (word*) SQUARES#20 (word*) SQUARES#42 Alias (byte) NUM_SQUARES#13 = (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#30 Alias (byte*) init_dist_screen::screen_topline#3 = (byte*) init_dist_screen::screen_topline#5 (byte*) init_dist_screen::screen_topline#7 Alias (byte) init_dist_screen::x#4 = (byte) init_dist_screen::x#5 (byte) init_dist_screen::x#6 Alias (byte*) init_dist_screen::screen_bottomline#3 = (byte*) init_dist_screen::screen_bottomline#5 (byte*) init_dist_screen::screen_bottomline#7 Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#3 (byte) init_dist_screen::xb#4 Alias (byte) init_dist_screen::y#11 = (byte) init_dist_screen::y#8 (byte) init_dist_screen::y#6 Alias (byte*) heap_head#42 = (byte*) heap_head#45 (byte*) heap_head#48 Alias (word) init_dist_screen::xds#0 = (word~) init_dist_screen::$18 Alias (word) init_dist_screen::ds#0 = (word~) init_dist_screen::$19 Alias (byte) sqrt::return#2 = (byte) sqrt::return#4 Alias (byte) init_dist_screen::d#0 = (byte~) init_dist_screen::$20 Alias (byte*) SCREEN_ANGLE#0 = (byte*) SCREEN_ANGLE#5 Alias (byte) NUM_SQUARES#12 = (byte) NUM_SQUARES#5 Alias (byte*) heap_head#11 = (byte*) heap_head#22 Alias (word*) SQUARES#16 = (word*) SQUARES#7 Successful SSA optimization Pass2AliasElimination Alias candidate removed (phi-usage) (byte*) main::fill#2 = (byte*) main::fill#3 Alias (word) bsearch16u::key#1 = (word) bsearch16u::key#5 Alias (signed word) atan2_16::x#1 = (signed word) atan2_16::x#5 (signed word) atan2_16::x#10 Alias (signed word) atan2_16::y#1 = (signed word) atan2_16::y#12 (signed word) atan2_16::y#9 Alias (signed word) atan2_16::yi#0 = (signed word) atan2_16::yi#9 Alias (signed word) atan2_16::yi#10 = (signed word) atan2_16::yi#5 Alias (signed word) atan2_16::xi#10 = (signed word) atan2_16::xi#4 Alias (byte) atan2_16::i#10 = (byte) atan2_16::i#3 (byte) atan2_16::i#5 Alias (word) atan2_16::angle#14 = (word) atan2_16::angle#16 Alias (signed word) atan2_16::x#11 = (signed word) atan2_16::x#14 (signed word) atan2_16::x#8 Alias (signed word) atan2_16::y#10 = (signed word) atan2_16::y#16 (signed word) atan2_16::y#8 Alias (signed word) atan2_16::y#4 = (signed word) atan2_16::y#5 Alias (byte*) main::dist#2 = (byte*) main::dist#3 Alias (byte*) main::angle#2 = (byte*) main::angle#3 Alias (byte) NUM_SQUARES#16 = (byte) NUM_SQUARES#26 Alias (byte*) heap_head#28 = (byte*) heap_head#38 Alias (word*) SQUARES#23 = (word*) SQUARES#37 Alias (byte*) SCREEN_DIST#10 = (byte*) SCREEN_DIST#11 Alias (byte*) SCREEN_ANGLE#10 = (byte*) SCREEN_ANGLE#6 Alias (word*) SQUARES#19 = (word*) SQUARES#30 Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#6 Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#6 Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#5 Alias (byte) NUM_SQUARES#29 = (byte) NUM_SQUARES#38 Alias (byte*) heap_head#41 = (byte*) heap_head#46 Alias (word*) SQUARES#15 = (word*) SQUARES#18 Alias (word) init_dist_screen::yds#1 = (word) init_dist_screen::yds#3 Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#13 Alias (byte*) init_dist_screen::screen_topline#10 = (byte*) init_dist_screen::screen_topline#3 Alias (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#4 Alias (byte*) init_dist_screen::screen_bottomline#10 = (byte*) init_dist_screen::screen_bottomline#3 Alias (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#5 Alias (byte) init_dist_screen::y#11 = (byte) init_dist_screen::y#12 Alias (byte*) heap_head#10 = (byte*) heap_head#42 Successful SSA optimization Pass2AliasElimination Alias candidate removed (phi-usage) (byte*) main::fill#2 = (byte*) 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#6 (byte) NUM_SQUARES#3 Identical Phi Values (byte*) heap_head#24 (byte*) heap_head#29 Identical Phi Values (byte*) heap_head#14 (byte*) heap_head#1 Identical Phi Values (byte*) heap_head#15 (byte*) heap_head#14 Identical Phi Values (word*) SQUARES#17 (word*) SQUARES#1 Identical Phi Values (word) sqrt::val#1 (word) sqrt::val#0 Identical Phi Values (word*) SQUARES#10 (word*) SQUARES#15 Identical Phi Values (byte) NUM_SQUARES#8 (byte) NUM_SQUARES#11 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*) heap_head#16 (byte*) heap_head#1 Identical Phi Values (byte*) heap_head#17 (byte*) heap_head#1 Identical Phi Values (byte*) SCREEN_DIST#1 (byte*) SCREEN_DIST#0 Identical Phi Values (byte) NUM_SQUARES#14 (byte) NUM_SQUARES#0 Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#17 Identical Phi Values (word*) SQUARES#21 (word*) SQUARES#0 Identical Phi Values (byte*) SCREEN_ANGLE#1 (byte*) SCREEN_ANGLE#0 Identical Phi Values (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#11 Identical Phi Values (byte*) heap_head#18 (byte*) heap_head#10 Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15 Identical Phi Values (byte) NUM_SQUARES#16 (byte) NUM_SQUARES#15 Identical Phi Values (byte*) heap_head#28 (byte*) heap_head#27 Identical Phi Values (word*) SQUARES#23 (word*) SQUARES#22 Identical Phi Values (byte*) SCREEN_DIST#10 (byte*) SCREEN_DIST#2 Identical Phi Values (byte*) SCREEN_ANGLE#10 (byte*) SCREEN_ANGLE#2 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#29 (byte*) heap_head#26 Identical Phi Values (word*) SQUARES#24 (word*) SQUARES#21 Identical Phi Values (byte*) init_dist_screen::screen#1 (byte*) init_dist_screen::screen#0 Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#15 Identical Phi Values (word*) SQUARES#14 (word*) SQUARES#17 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#11 (byte) NUM_SQUARES#29 Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#41 Identical Phi Values (word*) SQUARES#15 (word*) SQUARES#19 Identical Phi Values (word) init_dist_screen::yds#1 (word) init_dist_screen::yds#0 Identical Phi Values (byte) NUM_SQUARES#12 (byte) NUM_SQUARES#10 Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#19 Identical Phi Values (word*) SQUARES#16 (word*) SQUARES#13 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (word*) SQUARES#9 (word*) SQUARES#19 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#2 (byte*) SCREEN_DIST#0 Identical Phi Values (byte*) SCREEN_ANGLE#2 (byte*) SCREEN_ANGLE#0 Identical Phi Values (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#29 Identical Phi Values (byte*) heap_head#27 (byte*) heap_head#41 Identical Phi Values (word*) SQUARES#22 (word*) SQUARES#19 Identical Phi Values (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#15 Identical Phi Values (byte*) heap_head#19 (byte*) heap_head#27 Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#22 Identical Phi Values (word*) SQUARES#19 (word*) SQUARES#1 Identical Phi Values (byte) NUM_SQUARES#29 (byte) NUM_SQUARES#3 Identical Phi Values (byte*) heap_head#41 (byte*) heap_head#1 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) bsearch16u::$5 [13] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7 Simple Condition (bool~) bsearch16u::$12 [25] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9 Simple Condition (bool~) bsearch16u::$0 [28] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@1 Simple Condition (bool~) bsearch16u::$14 [32] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 Simple Condition (bool~) init_squares::$5 [77] if((byte) init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 Simple Condition (bool~) atan2_16::$0 [109] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 Simple Condition (bool~) atan2_16::$5 [118] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 Simple Condition (bool~) atan2_16::$17 [131] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16 Simple Condition (bool~) atan2_16::$11 [140] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 Simple Condition (bool~) atan2_16::$18 [143] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19 Simple Condition (bool~) atan2_16::$19 [151] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25 Simple Condition (bool~) atan2_16::$20 [154] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26 Simple Condition (bool~) atan2_16::$21 [171] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@15 Simple Condition (bool~) atan2_16::$14 [175] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) main::$3 [223] if(*((byte*) main::fill#2)==(const byte) FILL_CHAR) goto main::@5 Simple Condition (bool~) main::$6 [229] if((byte*) main::fill#1<(const byte*) SCREEN_FILL+(word) $3e8) goto main::@4 Simple Condition (bool~) main::$5 [235] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@5 Simple Condition (bool~) main::$8 [242] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@12 Simple Condition (bool~) init_angle_screen::$2 [261] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 Simple Condition (bool~) init_angle_screen::$16 [298] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 Simple Condition (bool~) init_dist_screen::$3 [314] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 Simple Condition (bool~) init_dist_screen::$10 [333] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6 Simple Condition (bool~) init_dist_screen::$12 [338] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 Simple Condition (bool~) init_dist_screen::$21 [344] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Negating conditional jump and destination [171] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement Constant right-side identified [41] (byte~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD Constant right-side identified [48] (byte~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) heap_head#0 = HEAP_TOP Constant (const byte) bsearch16u::$17 = 1*SIZEOF_WORD Constant (const byte) bsearch16u::$18 = 1*SIZEOF_WORD Constant (const byte) NUM_SQUARES#0 = $ff Constant (const word*) SQUARES#0 = (word*) 0 Constant (const word) init_squares::sqr#0 = 0 Constant (const byte) init_squares::i#0 = 0 Constant (const word*) CORDIC_ATAN2_ANGLES_16 = kickasm {{ .for (var i=0; i=(word) main::min_dist_angle#2) goto main::@11 to:main::@5 main::@5: scope:[main] from main::@4 [19] (byte*) main::min_fill#10 ← (byte*) main::fill#2 to:main::@3 main::@3: scope:[main] from main::@10 main::@11 main::@5 [20] (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 ) [20] (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 ) [21] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 [22] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 [23] (byte*) main::fill#1 ← ++ (byte*) main::fill#2 [24] if((byte*) main::fill#1<(const byte*) SCREEN_FILL+(word) $3e8) goto main::@9 to:main::@6 main::@6: scope:[main] from main::@3 [25] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@7 to:main::@return main::@return: scope:[main] from main::@6 [26] return to:@return main::@7: scope:[main] from main::@6 [27] *((byte*) main::min_fill#2) ← (const byte) FILL_CHAR to:main::@1 main::@9: scope:[main] from main::@3 [28] (word) main::min_dist_angle#6 ← (word) main::min_dist_angle#3 to:main::@2 main::@11: scope:[main] from main::@4 [29] (word) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 to:main::@3 main::@10: scope:[main] from main::@2 [30] (word) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 to:main::@3 (void()) init_angle_screen((byte*) init_angle_screen::screen) init_angle_screen: scope:[init_angle_screen] from main::@8 [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4 [33] (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 ) [33] (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 ) [33] (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 [34] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) [34] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) [35] 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 [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 [39] 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 [40] return to:@return init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [48] call atan2_16 [49] (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 [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 to:init_angle_screen::@2 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) atan2_16: scope:[atan2_16] from init_angle_screen::@3 [62] 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 [63] (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 [64] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) [65] 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 [66] (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 [67] (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 [68] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) [68] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [68] (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 ) [68] (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 ) [69] 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 [70] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [72] 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 [73] (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 [74] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) [75] 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 [76] (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 [77] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 [78] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 [79] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 [80] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [81] (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 [82] (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 ) [82] (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 ) [82] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) [83] 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 [84] 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 [85] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [86] (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 [87] (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 ) [87] (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 ) [88] 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 [89] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [90] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [91] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [92] (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 [93] (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 ) [93] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) [93] (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 ) [94] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 [95] if((byte) atan2_16::i#1==(const 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 [96] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [97] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [98] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [99] (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 [100] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [101] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [102] (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 [103] (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 [104] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 (void()) init_dist_screen((byte*) init_dist_screen::screen) init_dist_screen: scope:[init_dist_screen] from main [105] phi() [106] call init_squares to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen [107] (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 [108] (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 ) [108] (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 ) [108] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [110] 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 [111] (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 [112] (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 ) [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 [114] call sqr [115] (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 [116] (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 [117] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) [117] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) [118] 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 [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 [122] 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 [123] return to:@return init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [125] 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 [126] (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 [127] (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 ) [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 [129] call sqr [130] (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 [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [134] call sqrt [135] (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 [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 [137] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [138] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [139] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [140] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 [142] (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 [143] (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 [144] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 to:init_dist_screen::@4 (byte()) sqrt((word) sqrt::val) sqrt: scope:[sqrt] from init_dist_screen::@13 [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [147] call bsearch16u [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 [153] return to:@return (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) bsearch16u: scope:[bsearch16u] from sqrt [154] phi() to:bsearch16u::@3 bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 [155] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) [155] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 [158] (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 [159] (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 [160] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) [161] return to:@return bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 to:bsearch16u::@8 bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 [167] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 to:bsearch16u::@return bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 to:bsearch16u::@9 bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 to:bsearch16u::@7 bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 [171] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) [171] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 (word()) sqr((byte) sqr::val) sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 [173] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr [176] return to:@return (void()) init_squares() init_squares: scope:[init_squares] from init_dist_screen [177] phi() [178] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 [181] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) [181] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) [181] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 [189] return to:@return (void*()) malloc((word) malloc::size) malloc: scope:[malloc] from @1 @3 init_squares [190] (word) malloc::size#3 ← phi( @1/(word) $3e8 @3/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) [190] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc [193] return to:@return 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#1 0.03225806451612903 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 4.0 (byte~) atan2_16::$22 2002.0 (byte~) atan2_16::$23 2002.0 (signed word~) atan2_16::$7 4.0 (word) atan2_16::angle (word) atan2_16::angle#1 3.0 (word) atan2_16::angle#11 4.0 (word) atan2_16::angle#12 190.66666666666666 (word) atan2_16::angle#13 1334.6666666666667 (word) atan2_16::angle#2 2002.0 (word) atan2_16::angle#3 2002.0 (word) atan2_16::angle#4 4.0 (word) atan2_16::angle#5 4.0 (word) atan2_16::angle#6 2004.0 (byte) atan2_16::i (byte) atan2_16::i#1 1501.5 (byte) atan2_16::i#2 208.54166666666669 (word) atan2_16::return (word) atan2_16::return#0 34.99999999999999 (word) atan2_16::return#2 202.0 (byte) atan2_16::shift (byte) atan2_16::shift#1 20002.0 (byte) atan2_16::shift#2 8001.25 (byte) atan2_16::shift#5 667.3333333333334 (signed word) atan2_16::x (signed word) atan2_16::x#0 2.8684210526315796 (signed word) atan2_16::xd (signed word) atan2_16::xd#1 6667.333333333333 (signed word) atan2_16::xd#10 1001.0 (signed word) atan2_16::xd#2 1001.0 (signed word) atan2_16::xd#3 7668.333333333332 (signed word) atan2_16::xd#5 1001.0 (signed word) atan2_16::xi (signed word) atan2_16::xi#0 6.0 (signed word) atan2_16::xi#1 500.5 (signed word) atan2_16::xi#13 4.0 (signed word) atan2_16::xi#2 500.5 (signed word) atan2_16::xi#3 267.0666666666667 (signed word) atan2_16::xi#8 1001.0 (signed word) atan2_16::y (signed word) atan2_16::y#0 2.724999999999999 (signed word) atan2_16::yd (signed word) atan2_16::yd#1 10001.0 (signed word) atan2_16::yd#10 2002.0 (signed word) atan2_16::yd#2 2002.0 (signed word) atan2_16::yd#3 4601.0 (signed word) atan2_16::yd#5 2002.0 (signed word) atan2_16::yi (signed word) atan2_16::yi#0 1.2000000000000002 (signed word) atan2_16::yi#1 667.3333333333334 (signed word) atan2_16::yi#16 4.0 (signed word) atan2_16::yi#2 667.3333333333334 (signed word) atan2_16::yi#3 353.4117647058823 (signed word) atan2_16::yi#8 1001.0 (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) (byte~) bsearch16u::$16 2002.0 (word*~) bsearch16u::$2 4.0 (byte~) bsearch16u::$6 2002.0 (word*) bsearch16u::items (word*) bsearch16u::items#0 1001.0 (word*) bsearch16u::items#1 2.0 (word*) bsearch16u::items#2 334.5555555555556 (word*) bsearch16u::items#8 1501.5 (word) bsearch16u::key (word) bsearch16u::key#0 0.26666666666666666 (byte) bsearch16u::num (byte) bsearch16u::num#0 2002.0 (byte) bsearch16u::num#1 2002.0 (byte) bsearch16u::num#3 556.1111111111111 (byte) bsearch16u::num#5 3003.0 (word*) bsearch16u::pivot (word*) bsearch16u::pivot#0 501.0 (signed word) bsearch16u::result (signed word) bsearch16u::result#0 1501.5 (word*) bsearch16u::return (word*) bsearch16u::return#1 2.0 (word*) bsearch16u::return#2 6.0 (word*) bsearch16u::return#3 4.0 (word*) bsearch16u::return#6 4.0 (byte*) heap_head (byte*) heap_head#1 0.6000000000000001 (byte*) heap_head#12 6.0 (void()) init_angle_screen((byte*) init_angle_screen::screen) (word~) init_angle_screen::$11 202.0 (byte~) init_angle_screen::$13 202.0 (byte~) init_angle_screen::$14 202.0 (byte~) init_angle_screen::$15 202.0 (byte~) init_angle_screen::$3 202.0 (byte~) init_angle_screen::$4 202.0 (byte~) init_angle_screen::$7 202.0 (byte) init_angle_screen::ang_w (byte) init_angle_screen::ang_w#0 84.16666666666666 (word) init_angle_screen::angle_w (word) init_angle_screen::angle_w#0 202.0 (byte*) init_angle_screen::screen (byte*) init_angle_screen::screen#0 3.0 (byte*) init_angle_screen::screen_bottomline (byte*) init_angle_screen::screen_bottomline#0 4.0 (byte*) init_angle_screen::screen_bottomline#1 7.333333333333333 (byte*) init_angle_screen::screen_bottomline#6 9.04 (byte*) init_angle_screen::screen_topline (byte*) init_angle_screen::screen_topline#0 2.0 (byte*) init_angle_screen::screen_topline#1 5.5 (byte*) init_angle_screen::screen_topline#6 9.416666666666666 (byte) init_angle_screen::x (byte) init_angle_screen::x#1 101.0 (byte) init_angle_screen::x#2 28.857142857142858 (byte) init_angle_screen::xb (byte) init_angle_screen::xb#1 202.0 (byte) init_angle_screen::xb#2 18.363636363636363 (signed word) init_angle_screen::xw (word) init_angle_screen::xw#0 33.666666666666664 (byte) init_angle_screen::y (byte) init_angle_screen::y#1 16.5 (byte) init_angle_screen::y#5 4.730769230769231 (signed word) init_angle_screen::yw (word) init_angle_screen::yw#0 50.5 (void()) init_dist_screen((byte*) init_dist_screen::screen) (byte~) init_dist_screen::$14 202.0 (byte~) init_dist_screen::$16 202.0 (byte~) init_dist_screen::$5 22.0 (byte~) init_dist_screen::$7 22.0 (byte) init_dist_screen::d (byte) init_dist_screen::d#0 126.25 (word) init_dist_screen::ds (word) init_dist_screen::ds#0 202.0 (byte*) init_dist_screen::screen (byte*) init_dist_screen::screen#0 1.5 (byte*) init_dist_screen::screen_bottomline (byte*) init_dist_screen::screen_bottomline#0 4.0 (byte*) init_dist_screen::screen_bottomline#1 7.333333333333333 (byte*) init_dist_screen::screen_bottomline#11 6.848484848484849 (byte*) init_dist_screen::screen_topline (byte*) init_dist_screen::screen_topline#1 5.5 (byte*) init_dist_screen::screen_topline#11 7.0625 (byte) init_dist_screen::x (byte) init_dist_screen::x#1 101.0 (byte) init_dist_screen::x#2 30.3 (byte) init_dist_screen::x2 (byte) init_dist_screen::x2#0 202.0 (byte) init_dist_screen::xb (byte) init_dist_screen::xb#1 202.0 (byte) init_dist_screen::xb#2 19.238095238095237 (byte) init_dist_screen::xd (byte) init_dist_screen::xd#0 303.0 (word) init_dist_screen::xds (word) init_dist_screen::xds#0 202.0 (byte) init_dist_screen::y (byte) init_dist_screen::y#1 16.5 (byte) init_dist_screen::y#10 0.9705882352941178 (byte) init_dist_screen::y2 (byte) init_dist_screen::y2#0 22.0 (byte) init_dist_screen::yd (byte) init_dist_screen::yd#0 33.0 (word) init_dist_screen::yds (word) init_dist_screen::yds#0 4.869565217391305 (void()) init_squares() (byte~) init_squares::$3 22.0 (byte~) init_squares::$4 22.0 (byte) init_squares::i (byte) init_squares::i#1 16.5 (byte) init_squares::i#2 5.5 (word) init_squares::sqr (word) init_squares::sqr#1 7.333333333333333 (word) init_squares::sqr#2 6.6000000000000005 (word*) init_squares::squares (word*) init_squares::squares#0 4.0 (word*) init_squares::squares#1 3.6666666666666665 (word*) init_squares::squares#2 17.5 (void()) main() (byte*) main::angle (byte*) main::angle#0 22.0 (byte*) main::angle#1 50.5 (byte*) main::angle#2 34.888888888888886 (byte*) main::dist (byte*) main::dist#0 11.0 (byte*) main::dist#1 40.4 (byte*) main::dist#2 39.25 (word) main::dist_angle (word) main::dist_angle#0 101.0 (byte*) main::fill (byte*) main::fill#1 101.0 (byte*) main::fill#2 40.4 (word) main::min_dist_angle (word) main::min_dist_angle#2 101.0 (word) main::min_dist_angle#3 83.0 (word) main::min_dist_angle#6 202.0 (word) main::min_dist_angle#7 202.0 (word) main::min_dist_angle#8 202.0 (byte*) main::min_fill (byte*) main::min_fill#10 202.0 (byte*) main::min_fill#2 59.285714285714285 (byte*) main::min_fill#5 50.5 (void*()) malloc((word) malloc::size) (byte*) malloc::mem (byte*) malloc::mem#0 0.6666666666666666 (void*) malloc::return (word) malloc::size (word) malloc::size#3 2.0 (word()) sqr((byte) sqr::val) (byte~) sqr::$0 4.0 (word) sqr::return (word) sqr::return#0 28.5 (word) sqr::return#2 22.0 (word) sqr::return#3 202.0 (byte) sqr::val (byte) sqr::val#0 22.0 (byte) sqr::val#1 202.0 (byte) sqr::val#2 114.0 (byte()) sqrt((word) sqrt::val) (word~) sqrt::$1 2.0 (word~) sqrt::$3 4.0 (word*) sqrt::found (word*) sqrt::found#0 4.0 (byte) sqrt::return (byte) sqrt::return#0 34.33333333333333 (byte) sqrt::return#2 202.0 (byte) sqrt::sq (word) sqrt::val (word) sqrt::val#0 103.0 Initial phi equivalence classes [ 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_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 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 ] [ 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] [ 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 ] [ 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 ] [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] [ init_squares::i#2 init_squares::i#1 ] [ heap_head#12 heap_head#1 ] [ malloc::size#3 ] Added variable SCREEN_DIST#0 to zero page equivalence class [ SCREEN_DIST#0 ] Added variable SCREEN_ANGLE#0 to zero page equivalence class [ SCREEN_ANGLE#0 ] Added variable init_angle_screen::screen#0 to zero page equivalence class [ init_angle_screen::screen#0 ] Added variable init_angle_screen::$3 to zero page equivalence class [ init_angle_screen::$3 ] Added variable init_angle_screen::$4 to zero page equivalence class [ init_angle_screen::$4 ] Added variable init_angle_screen::xw#0 to zero page equivalence class [ init_angle_screen::xw#0 ] Added variable init_angle_screen::$7 to zero page equivalence class [ init_angle_screen::$7 ] Added variable init_angle_screen::yw#0 to zero page equivalence class [ init_angle_screen::yw#0 ] Added variable atan2_16::x#0 to zero page equivalence class [ atan2_16::x#0 ] Added variable atan2_16::y#0 to zero page equivalence class [ atan2_16::y#0 ] Added variable atan2_16::return#2 to zero page equivalence class [ atan2_16::return#2 ] Added variable init_angle_screen::angle_w#0 to zero page equivalence class [ init_angle_screen::angle_w#0 ] Added variable init_angle_screen::$11 to zero page equivalence class [ init_angle_screen::$11 ] Added variable init_angle_screen::ang_w#0 to zero page equivalence class [ init_angle_screen::ang_w#0 ] Added variable init_angle_screen::$13 to zero page equivalence class [ init_angle_screen::$13 ] Added variable init_angle_screen::$14 to zero page equivalence class [ init_angle_screen::$14 ] Added variable init_angle_screen::$15 to zero page equivalence class [ init_angle_screen::$15 ] Added variable atan2_16::$23 to zero page equivalence class [ atan2_16::$23 ] Added variable atan2_16::$22 to zero page equivalence class [ atan2_16::$22 ] Added variable init_dist_screen::y2#0 to zero page equivalence class [ init_dist_screen::y2#0 ] Added variable sqr::return#2 to zero page equivalence class [ sqr::return#2 ] Added variable init_dist_screen::yds#0 to zero page equivalence class [ init_dist_screen::yds#0 ] Added variable init_dist_screen::x2#0 to zero page equivalence class [ init_dist_screen::x2#0 ] Added variable sqr::return#3 to zero page equivalence class [ sqr::return#3 ] Added variable init_dist_screen::xds#0 to zero page equivalence class [ init_dist_screen::xds#0 ] Added variable init_dist_screen::ds#0 to zero page equivalence class [ init_dist_screen::ds#0 ] Added variable sqrt::val#0 to zero page equivalence class [ sqrt::val#0 ] Added variable sqrt::return#2 to zero page equivalence class [ sqrt::return#2 ] Added variable init_dist_screen::d#0 to zero page equivalence class [ init_dist_screen::d#0 ] Added variable bsearch16u::key#0 to zero page equivalence class [ bsearch16u::key#0 ] Added variable bsearch16u::return#3 to zero page equivalence class [ bsearch16u::return#3 ] Added variable sqrt::found#0 to zero page equivalence class [ sqrt::found#0 ] Added variable sqrt::$3 to zero page equivalence class [ sqrt::$3 ] Added variable sqrt::$1 to zero page equivalence class [ sqrt::$1 ] Added variable sqrt::return#0 to zero page equivalence class [ sqrt::return#0 ] Added variable bsearch16u::$6 to zero page equivalence class [ bsearch16u::$6 ] Added variable bsearch16u::$16 to zero page equivalence class [ bsearch16u::$16 ] Added variable bsearch16u::pivot#0 to zero page equivalence class [ bsearch16u::pivot#0 ] Added variable bsearch16u::result#0 to zero page equivalence class [ bsearch16u::result#0 ] Added variable sqr::$0 to zero page equivalence class [ sqr::$0 ] Added variable sqr::return#0 to zero page equivalence class [ sqr::return#0 ] Added variable SQUARES#1 to zero page equivalence class [ SQUARES#1 ] Added variable init_squares::$3 to zero page equivalence class [ init_squares::$3 ] Added variable init_squares::$4 to zero page equivalence class [ init_squares::$4 ] Added variable malloc::mem#0 to zero page equivalence class [ malloc::mem#0 ] Complete equivalence classes [ 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_angle_screen::y#5 init_angle_screen::y#1 ] [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 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 ] [ 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] [ 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 ] [ 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 ] [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] [ sqr::val#2 sqr::val#1 sqr::val#0 ] [ init_squares::sqr#2 init_squares::sqr#1 ] [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] [ init_squares::i#2 init_squares::i#1 ] [ heap_head#12 heap_head#1 ] [ malloc::size#3 ] [ SCREEN_DIST#0 ] [ SCREEN_ANGLE#0 ] [ init_angle_screen::screen#0 ] [ init_angle_screen::$3 ] [ init_angle_screen::$4 ] [ init_angle_screen::xw#0 ] [ init_angle_screen::$7 ] [ 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::$11 ] [ init_angle_screen::ang_w#0 ] [ init_angle_screen::$13 ] [ init_angle_screen::$14 ] [ init_angle_screen::$15 ] [ atan2_16::$23 ] [ atan2_16::$22 ] [ 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 ] [ bsearch16u::key#0 ] [ bsearch16u::return#3 ] [ sqrt::found#0 ] [ sqrt::$3 ] [ sqrt::$1 ] [ sqrt::return#0 ] [ bsearch16u::$6 ] [ bsearch16u::$16 ] [ bsearch16u::pivot#0 ] [ bsearch16u::result#0 ] [ sqr::$0 ] [ sqr::return#0 ] [ SQUARES#1 ] [ init_squares::$3 ] [ init_squares::$4 ] [ malloc::mem#0 ] Allocated zp[2]:2 [ main::fill#2 main::fill#1 ] Allocated zp[2]:4 [ main::dist#2 main::dist#0 main::dist#1 ] Allocated zp[2]:6 [ main::angle#2 main::angle#0 main::angle#1 ] Allocated zp[2]:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ] Allocated zp[2]:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] Allocated zp[2]:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] Allocated zp[1]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Allocated zp[2]:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] Allocated zp[2]:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] Allocated zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Allocated zp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Allocated 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 ] Allocated 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 ] Allocated zp[1]:25 [ atan2_16::i#2 atan2_16::i#1 ] Allocated zp[2]:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] Allocated zp[2]:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] Allocated zp[1]:30 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] Allocated zp[2]:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] Allocated zp[2]:33 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] Allocated zp[1]:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Allocated zp[2]:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] Allocated zp[2]:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] Allocated zp[1]:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] Allocated zp[1]:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Allocated zp[1]:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Allocated zp[1]:43 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] Allocated zp[2]:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] Allocated zp[1]:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] Allocated zp[1]:47 [ sqr::val#2 sqr::val#1 sqr::val#0 ] Allocated zp[2]:48 [ init_squares::sqr#2 init_squares::sqr#1 ] Allocated zp[2]:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] Allocated zp[1]:52 [ init_squares::i#2 init_squares::i#1 ] Allocated zp[2]:53 [ heap_head#12 heap_head#1 ] Allocated zp[2]:55 [ malloc::size#3 ] Allocated zp[2]:57 [ SCREEN_DIST#0 ] Allocated zp[2]:59 [ SCREEN_ANGLE#0 ] Allocated zp[2]:61 [ init_angle_screen::screen#0 ] Allocated zp[1]:63 [ init_angle_screen::$3 ] Allocated zp[1]:64 [ init_angle_screen::$4 ] Allocated zp[2]:65 [ init_angle_screen::xw#0 ] Allocated zp[1]:67 [ init_angle_screen::$7 ] Allocated zp[2]:68 [ init_angle_screen::yw#0 ] Allocated zp[2]:70 [ atan2_16::x#0 ] Allocated zp[2]:72 [ atan2_16::y#0 ] Allocated zp[2]:74 [ atan2_16::return#2 ] Allocated zp[2]:76 [ init_angle_screen::angle_w#0 ] Allocated zp[2]:78 [ init_angle_screen::$11 ] Allocated zp[1]:80 [ init_angle_screen::ang_w#0 ] Allocated zp[1]:81 [ init_angle_screen::$13 ] Allocated zp[1]:82 [ init_angle_screen::$14 ] Allocated zp[1]:83 [ init_angle_screen::$15 ] Allocated zp[1]:84 [ atan2_16::$23 ] Allocated zp[1]:85 [ atan2_16::$22 ] Allocated zp[1]:86 [ init_dist_screen::y2#0 ] Allocated zp[2]:87 [ sqr::return#2 ] Allocated zp[2]:89 [ init_dist_screen::yds#0 ] Allocated zp[1]:91 [ init_dist_screen::x2#0 ] Allocated zp[2]:92 [ sqr::return#3 ] Allocated zp[2]:94 [ init_dist_screen::xds#0 ] Allocated zp[2]:96 [ init_dist_screen::ds#0 ] Allocated zp[2]:98 [ sqrt::val#0 ] Allocated zp[1]:100 [ sqrt::return#2 ] Allocated zp[1]:101 [ init_dist_screen::d#0 ] Allocated zp[2]:102 [ bsearch16u::key#0 ] Allocated zp[2]:104 [ bsearch16u::return#3 ] Allocated zp[2]:106 [ sqrt::found#0 ] Allocated zp[2]:108 [ sqrt::$3 ] Allocated zp[2]:110 [ sqrt::$1 ] Allocated zp[1]:112 [ sqrt::return#0 ] Allocated zp[1]:113 [ bsearch16u::$6 ] Allocated zp[1]:114 [ bsearch16u::$16 ] Allocated zp[2]:115 [ bsearch16u::pivot#0 ] Allocated zp[2]:117 [ bsearch16u::result#0 ] Allocated zp[1]:119 [ sqr::$0 ] Allocated zp[2]:120 [ sqr::return#0 ] Allocated zp[2]:122 [ SQUARES#1 ] Allocated zp[1]:124 [ init_squares::$3 ] Allocated zp[1]:125 [ init_squares::$4 ] Allocated zp[2]:126 [ malloc::mem#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(__bbegin) .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 // Screen containing angle to center .label SCREEN_FILL = $400 // Char to fill with .const FILL_CHAR = '@' // Top of the heap used by malloc() .label HEAP_TOP = $a000 .const NUM_SQUARES = $30 .label heap_head = $35 .label SQUARES = $7a .label SCREEN_DIST = $39 .label SCREEN_ANGLE = $3b // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] __b1_from___bbegin: jmp __b1 // @1 __b1: // [2] call malloc // [190] phi from @1 to malloc [phi:@1->malloc] malloc_from___b1: // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 // [190] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP sta.z heap_head+1 jsr malloc jmp __b3 // @3 __b3: // [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 // [190] phi from @3 to malloc [phi:@3->malloc] malloc_from___b3: // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy jsr malloc jmp __b4 // @4 __b4: // [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 @4 to @2 [phi:@4->@2] __b2_from___b4: jmp __b2 // @2 __b2: // [7] call main jsr main // [8] phi from @2 to @end [phi:@2->@end] __bend_from___b2: jmp __bend // @end __bend: // 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 // [9] (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 // [10] call init_dist_screen // [105] 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: // [11] (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 // [12] call init_angle_screen jsr init_angle_screen jmp __b1 // main::@1 __b1: // [13] (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 // [14] (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 // [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: // [15] phi (byte*) main::min_fill#5 = (const byte*) SCREEN_FILL [phi:main::@1->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN_FILL sta.z min_fill+1 // [15] 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 // [15] phi (byte*) main::angle#2 = (byte*) main::angle#0 [phi:main::@1->main::@2#2] -- register_copy // [15] phi (byte*) main::dist#2 = (byte*) main::dist#0 [phi:main::@1->main::@2#3] -- register_copy // [15] phi (byte*) main::fill#2 = (const byte*) SCREEN_FILL [phi:main::@1->main::@2#4] -- pbuz1=pbuc1 lda #SCREEN_FILL sta.z fill+1 jmp __b2 // main::@2 __b2: // [16] if(*((byte*) main::fill#2)==(const 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: // [17] (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 // [18] 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: // [19] (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 // [20] 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: // [20] phi (byte*) main::min_fill#2 = (byte*) main::min_fill#5 [phi:main::@10/main::@11/main::@5->main::@3#0] -- register_copy // [20] 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: // [21] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 -- pbuz1=_inc_pbuz1 inc.z dist bne !+ inc.z dist+1 !: // [22] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 -- pbuz1=_inc_pbuz1 inc.z angle bne !+ inc.z angle+1 !: // [23] (byte*) main::fill#1 ← ++ (byte*) main::fill#2 -- pbuz1=_inc_pbuz1 inc.z fill bne !+ inc.z fill+1 !: // [24] if((byte*) main::fill#1<(const 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: // [26] return rts // main::@7 __b7: // [27] *((byte*) main::min_fill#2) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 // Fill the found location lda #FILL_CHAR ldy #0 sta (min_fill),y jmp __b1 // main::@9 __b9: // [28] (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 // [15] phi from main::@9 to main::@2 [phi:main::@9->main::@2] __b2_from___b9: // [15] phi (byte*) main::min_fill#5 = (byte*) main::min_fill#2 [phi:main::@9->main::@2#0] -- register_copy // [15] phi (word) main::min_dist_angle#2 = (word) main::min_dist_angle#6 [phi:main::@9->main::@2#1] -- register_copy // [15] phi (byte*) main::angle#2 = (byte*) main::angle#1 [phi:main::@9->main::@2#2] -- register_copy // [15] phi (byte*) main::dist#2 = (byte*) main::dist#1 [phi:main::@9->main::@2#3] -- register_copy // [15] phi (byte*) main::fill#2 = (byte*) main::fill#1 [phi:main::@9->main::@2#4] -- register_copy jmp __b2 // main::@11 __b11: // [29] (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: // [30] (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_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center // init_angle_screen(byte* zeropage($3d) screen) init_angle_screen: { .label __3 = $3f .label __4 = $40 .label __7 = $43 .label __11 = $4e .label __13 = $51 .label __14 = $52 .label __15 = $53 .label screen = $3d .label screen_topline = $f .label screen_bottomline = $11 .label xw = $41 .label yw = $44 .label angle_w = $4c .label ang_w = $50 .label x = $13 .label xb = $14 .label y = $e // [31] (byte*) init_angle_screen::screen_topline#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_topline lda.z screen+1 adc #>$28*$c sta.z screen_topline+1 // [32] (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 // [33] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] __b1_from_init_angle_screen: // [33] 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 // [33] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy // [33] 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 // [33] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] __b1_from___b4: // [33] 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 // [33] 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 // [33] 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: // [34] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] __b2_from___b1: // [34] 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 // [34] 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: // [35] 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: // [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_topline sec sbc #<$28 sta.z screen_topline lda.z screen_topline+1 sbc #>$28 sta.z screen_topline+1 // [37] (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 !: // [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 inc.z y // [39] 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: // [40] return rts // init_angle_screen::@3 __b3: // [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z x asl sta.z __3 // [42] (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 // [43] (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 // [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z y asl sta.z __7 // [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuz2_word_vbuc1 lda.z __7 ldy #0 sta.z yw+1 sty.z yw // [46] (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 // [47] (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 // [48] call atan2_16 jsr atan2_16 // [49] (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: // [50] (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 // [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz2_plus_vbuc1 lda #$80 clc adc.z angle_w sta.z __11 lda #0 adc.z angle_w+1 sta.z __11+1 // [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda.z __11+1 sta.z ang_w // [53] *((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 // [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuz1=_neg_vbuz2 lda.z ang_w eor #$ff clc adc #1 sta.z __13 // [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __13 ldy.z xb sta (screen_topline),y // [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_plus_vbuz2 lax.z ang_w axs #-[$80] stx.z __14 // [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __14 ldy.z x sta (screen_topline),y // [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuz1=vbuc1_minus_vbuz2 lda #$80 sec sbc.z ang_w sta.z __15 // [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z __15 ldy.z x sta (screen_bottomline),y // [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x // [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb // [34] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] __b2_from___b5: // [34] 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 // [34] 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 } // 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 zeropage($46) x, signed word zeropage($48) y) atan2_16: { .label __2 = $15 .label __7 = $17 .label __22 = $55 .label __23 = $54 .label yi = $15 .label xi = $17 .label angle = $1c .label xd = $21 .label yd = $1f .label shift = $1e .label angle_1 = $1a .label i = $19 .label return = $1c .label x = $46 .label y = $48 .label return_1 = $4a // [62] 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: // [63] (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 // [64] 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: // [64] 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: // [65] 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: // [66] (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 // [67] 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: // [67] 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: // [68] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: // [68] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #<0 sta.z angle_1 lda #>0 sta.z angle_1+1 // [68] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 lda #0 sta.z i // [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy // [68] 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: // [69] 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 // [70] 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: // [70] 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: // [71] (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 // [72] 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: // [73] (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 // [74] 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: // [74] 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: // [75] 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: // [76] (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 // [77] 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: // [77] 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: // [78] return rts // atan2_16::@11 __b11: // [79] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 lda.z i sta.z shift // [80] (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 // [81] (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 // [82] 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: // [82] 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 // [82] 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 // [82] 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: // [83] 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: // [84] 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: // [85] (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 // [86] (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 // [87] 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: // [87] 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 // [87] 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: // [88] 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: // [89] (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 // [90] (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 // [91] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __23 // [92] (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 // [93] 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: // [93] 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 // [93] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy // [93] 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: // [94] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [95] if((byte) atan2_16::i#1==(const 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 // [68] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] __b10_from___b19: // [68] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy // [68] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy // [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy // [68] 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: // [96] (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 // [97] (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 // [98] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __22 // [99] (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: // [100] (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 // [101] (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 // [102] (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: // [103] (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: // [104] (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 } // 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* zeropage($24) screen) init_dist_screen: { .label __5 = $28 .label __7 = $28 .label __14 = $2b .label __16 = $2b .label screen = $24 .label screen_bottomline = $26 .label y2 = $56 .label yd = $28 .label yds = $59 .label x2 = $5b .label screen_topline = $24 .label y = $23 .label xd = $2b .label xds = $5e .label ds = $60 .label d = $65 .label x = $29 .label xb = $2a // [106] call init_squares // [177] 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: // [107] (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 // [108] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] __b1_from___b11: // [108] 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 // [108] 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 // [108] 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 // [108] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] __b1_from___b7: // [108] 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 // [108] 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 // [108] 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: // [109] (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 // [110] 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: // [111] (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 // [112] 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: // [112] 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: // [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 lda.z yd sta.z sqr.val // [114] call sqr // [173] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from___b4: // [173] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // [115] (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: // [116] (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 // [117] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] __b5_from___b12: // [117] 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 // [117] 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: // [118] 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: // [119] (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 !: // [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_bottomline sec sbc #<$28 sta.z screen_bottomline lda.z screen_bottomline+1 sbc #>$28 sta.z screen_bottomline+1 // [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc.z y // [122] 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: // [123] return rts // init_dist_screen::@6 __b6: // [124] (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 // [125] 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: // [126] (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 // [127] 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: // [127] 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: // [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 lda.z xd sta.z sqr.val // [129] call sqr // [173] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from___b10: // [173] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr // [130] (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: // [131] (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 // [132] (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 // [133] (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 // [134] call sqrt jsr sqrt // [135] (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: // [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 lda.z sqrt.return_1 sta.z d // [137] *((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 // [138] *((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 // [139] *((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 // [140] *((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 // [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x // [142] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb // [117] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] __b5_from___b14: // [117] 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 // [117] 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: // [143] (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: // [144] (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 } // sqrt // Find the (integer) square root of a word 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 zeropage($62) val) sqrt: { .label __1 = $6e .label __3 = $6c .label found = $6a .label return = $70 .label val = $62 .label return_1 = $64 // [145] (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 // [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z bsearch16u.items lda.z SQUARES+1 sta.z bsearch16u.items+1 // [147] call bsearch16u // [154] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u // [148] (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: // [149] (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 // [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz2_minus_pwuz3 lda.z found sec sbc.z SQUARES sta.z __3 lda.z found+1 sbc.z SQUARES+1 sta.z __3+1 // [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz2_ror_1 lda.z __3+1 lsr sta.z __1+1 lda.z __3 ror sta.z __1 // [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 lda.z __1 sta.z return jmp __breturn // sqrt::@return __breturn: // [153] return rts } // bsearch16u // Searches an array of nitems unsigned words, 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 zeropage($66) key, word* zeropage($2c) items, byte zeropage($2e) num) bsearch16u: { .label __2 = $2c .label __6 = $71 .label __16 = $72 .label pivot = $73 .label result = $75 .label return = $2c .label num = $2e .label items = $2c .label key = $66 .label return_1 = $68 // [155] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] __b3_from_bsearch16u: // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy // [155] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 lda #NUM_SQUARES sta.z num jmp __b3 // bsearch16u::@3 __b3: // [156] 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: // [157] 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: // [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda.z __2 sec sbc #<1*SIZEOF_WORD sta.z __2 lda.z __2+1 sbc #>1*SIZEOF_WORD sta.z __2+1 // [159] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] __b2_from___b1: __b2_from___b5: // [159] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp __b2 // bsearch16u::@2 __b2: // [160] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] __breturn_from___b2: __breturn_from___b8: // [160] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy jmp __breturn // bsearch16u::@return __breturn: // [161] return rts // bsearch16u::@4 __b4: // [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 lda.z num lsr sta.z __6 // [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z __6 asl sta.z __16 // [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 lda.z __16 clc adc.z items sta.z pivot lda #0 adc.z items+1 sta.z pivot+1 // [165] (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 // [166] 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: // [167] (word*) bsearch16u::return#6 ← (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: // [168] 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: // [169] (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 // [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 dec.z num // [171] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] __b7_from___b6: __b7_from___b9: // [171] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy // [171] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy jmp __b7 // bsearch16u::@7 __b7: // [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 lsr.z num // [155] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] __b3_from___b7: // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy // [155] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp __b3 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte zeropage($2f) val) sqr: { .label __0 = $77 .label return = $78 .label val = $2f .label return_1 = $57 .label return_2 = $5c // [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z val asl sta.z __0 // [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (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: // [176] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { .label __3 = $7c .label __4 = $7d .label squares = $32 .label sqr = $30 .label i = $34 // [178] call malloc // [190] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: // [190] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta.z malloc.size+1 // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc jmp __b2 // init_squares::@2 __b2: // [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 lda.z malloc.mem sta.z SQUARES lda.z malloc.mem+1 sta.z SQUARES+1 // [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z squares lda.z SQUARES+1 sta.z squares+1 // [181] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] __b1_from___b2: // [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy // [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 jmp __b1 // [181] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] __b1_from___b1: // [181] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy // [181] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp __b1 // init_squares::@1 __b1: // [182] *((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 // [183] (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 !: // [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __3 // [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z __3 iny sty.z __4 // [186] (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 !: // [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuz1_neq_vbuc1_then_la1 lda #NUM_SQUARES-1+1 cmp.z i bne __b1_from___b1 jmp __breturn // init_squares::@return __breturn: // [189] return rts } // malloc // Allocates a block of size bytes 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 zeropage($37) size) malloc: { .label mem = $7e .label size = $37 // [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (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 // [192] (byte*) heap_head#1 ← (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: // [193] return rts } // 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 [19] (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 [24] if((byte*) main::fill#1<(const 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 [25] 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 [27] *((byte*) main::min_fill#2) ← (const 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 [28] (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 [29] (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 [30] (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 [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a Statement [36] (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:12 [ 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]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Statement [37] (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:12 [ 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 [41] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Removing always clobbered register reg byte a as potential for zp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Statement [42] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [43] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Removing always clobbered register reg byte y as potential for zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Removing always clobbered register reg byte y as potential for zp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Statement [44] (byte~) init_angle_screen::$7 ← (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::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$7 ] ) always clobbers reg byte a Statement [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte y Statement [46] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [47] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [49] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [50] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [51] (word~) init_angle_screen::$11 ← (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::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [52] (byte) init_angle_screen::ang_w#0 ← > (word~) 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 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 Statement [53] *((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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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]:80 [ init_angle_screen::ang_w#0 ] Statement [54] (byte~) init_angle_screen::$13 ← - (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::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$13 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:80 [ init_angle_screen::ang_w#0 ] Statement [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [56] (byte~) init_angle_screen::$14 ← (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::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$14 ] ) always clobbers reg byte a Statement [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [58] (byte~) init_angle_screen::$15 ← (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::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$15 ] ) always clobbers reg byte a Statement [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [62] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [63] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [65] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [66] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [69] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:25 [ atan2_16::i#2 atan2_16::i#1 ] Statement [71] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [72] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [73] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [80] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:30 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] Statement [81] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [85] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [86] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [88] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [89] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [90] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [91] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [92] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [96] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [97] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [98] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [99] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [100] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [101] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [103] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [104] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [107] (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#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a Statement [109] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Statement [111] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [115] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [116] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [119] (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#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a Statement [120] (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#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a Statement [124] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Removing always clobbered register reg byte a as potential for zp[1]:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Statement [126] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [130] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [131] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [132] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [133] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a Statement [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a Statement [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 bsearch16u::return#3 ] ) always clobbers reg byte a Statement [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 sqrt::found#0 ] ) always clobbers reg byte a Statement [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 sqrt::$3 ] ) always clobbers reg byte a Statement [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 sqrt::$1 ] ) always clobbers reg byte a Statement [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 ] ) always clobbers reg byte a Statement [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Removing always clobbered register reg byte y as potential for zp[1]:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Removing always clobbered register reg byte y as potential for zp[1]:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Statement [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::$2 ] ) always clobbers reg byte a Statement [162] (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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] Statement [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a Statement [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a Statement [165] (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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] Statement [166] 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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a Statement [167] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::return#6 ] ) always clobbers reg byte a Statement [168] 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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a Statement [169] (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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a Statement [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:129 [ 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#1 sqr::$0 ] ) always clobbers reg byte a Statement [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:114 [ 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#1 ] main:7::init_dist_screen:10::sqr:129 [ 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#1 ] ) always clobbers reg byte a reg byte y Statement [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a Statement [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a Statement [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:52 [ init_squares::i#2 init_squares::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:52 [ init_squares::i#2 init_squares::i#1 ] Statement [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a Statement [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a Statement [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a Statement [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a Statement [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a Statement [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a Statement [11] (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 [13] (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 [14] (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 [16] if(*((byte*) main::fill#2)==(const 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 [17] (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 [18] 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 [19] (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 [24] if((byte*) main::fill#1<(const 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 [25] 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 [27] *((byte*) main::min_fill#2) ← (const 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 [28] (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 [29] (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 [30] (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 [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a Statement [36] (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:12 [ 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 [37] (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:12 [ 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 [41] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [42] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [43] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte y Statement [44] (byte~) init_angle_screen::$7 ← (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::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$7 ] ) always clobbers reg byte a Statement [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte y Statement [46] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [47] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [49] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [50] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [51] (word~) init_angle_screen::$11 ← (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::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [52] (byte) init_angle_screen::ang_w#0 ← > (word~) 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 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 Statement [53] *((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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [54] (byte~) init_angle_screen::$13 ← - (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::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$13 ] ) always clobbers reg byte a Statement [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [56] (byte~) init_angle_screen::$14 ← (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::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$14 ] ) always clobbers reg byte a Statement [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [58] (byte~) init_angle_screen::$15 ← (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::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$15 ] ) always clobbers reg byte a Statement [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [62] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [63] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [65] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [66] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [69] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [71] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [72] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [73] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [80] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [81] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [85] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [86] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [88] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [89] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [90] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [91] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [92] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [96] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [97] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [98] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [99] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [100] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [101] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [103] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [104] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [107] (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#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a Statement [109] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [111] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [115] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [116] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [119] (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#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a Statement [120] (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#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a Statement [124] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [126] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [130] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [131] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [132] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [133] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [137] *((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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:101 [ init_dist_screen::d#0 ] Statement [138] *((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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte y Statement [139] *((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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte y Statement [140] *((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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte y Statement [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a Statement [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a Statement [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 bsearch16u::return#3 ] ) always clobbers reg byte a Statement [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 sqrt::found#0 ] ) always clobbers reg byte a Statement [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 sqrt::$3 ] ) always clobbers reg byte a Statement [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 sqrt::$1 ] ) always clobbers reg byte a Statement [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 ] ) always clobbers reg byte a Statement [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y Statement [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::$2 ] ) always clobbers reg byte a Statement [162] (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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a Statement [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a Statement [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a Statement [165] (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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y Statement [166] 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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a Statement [167] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::return#6 ] ) always clobbers reg byte a Statement [168] 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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a Statement [169] (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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a Statement [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:129 [ 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#1 sqr::$0 ] ) always clobbers reg byte a Statement [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:114 [ 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#1 ] main:7::init_dist_screen:10::sqr:129 [ 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#1 ] ) always clobbers reg byte a reg byte y Statement [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a Statement [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a Statement [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y Statement [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a Statement [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a Statement [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a Statement [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a Statement [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Statement [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 heap_head#1 ] ( [ SCREEN_DIST#0 heap_head#1 ] ) always clobbers reg byte a Statement [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ( [ SCREEN_DIST#0 SCREEN_ANGLE#0 heap_head#1 ] ) always clobbers reg byte a Statement [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ( main:7 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a Statement [11] (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 [13] (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 [14] (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 [16] if(*((byte*) main::fill#2)==(const 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 [17] (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 [18] 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 [19] (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 [24] if((byte*) main::fill#1<(const 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 [25] 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 [27] *((byte*) main::min_fill#2) ← (const 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 [28] (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 [29] (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 [30] (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 [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a Statement [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a Statement [36] (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:12 [ 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 [37] (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:12 [ 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 [41] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [42] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [43] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte y Statement [44] (byte~) init_angle_screen::$7 ← (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::$7 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$7 ] ) always clobbers reg byte a Statement [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte y Statement [46] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [47] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [49] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [50] (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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [51] (word~) init_angle_screen::$11 ← (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::$11 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [52] (byte) init_angle_screen::ang_w#0 ← > (word~) 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 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 Statement [53] *((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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [54] (byte~) init_angle_screen::$13 ← - (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::$13 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$13 ] ) always clobbers reg byte a Statement [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [56] (byte~) init_angle_screen::$14 ← (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::$14 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$14 ] ) always clobbers reg byte a Statement [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [58] (byte~) init_angle_screen::$15 ← (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::$15 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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::$15 ] ) always clobbers reg byte a Statement [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::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:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 [62] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [63] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [65] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [66] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [69] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [71] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [72] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [73] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [80] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [81] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [85] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [86] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [88] 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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [89] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [90] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [91] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [92] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [96] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [97] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [98] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [99] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [100] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [101] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [103] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [104] (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:12::atan2_16:48 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::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 ] ) always clobbers reg byte a Statement [107] (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#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a Statement [109] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [111] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [115] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [116] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [119] (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#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ) always clobbers reg byte a Statement [120] (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#1 ] ( main:7::init_dist_screen:10 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ) always clobbers reg byte a Statement [124] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [126] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [130] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [131] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [132] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [133] (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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte a Statement [137] *((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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte y Statement [138] *((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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte y Statement [139] *((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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte y Statement [140] *((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#1 ] ( main:7::init_dist_screen:10 [ 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#1 ] ) always clobbers reg byte y Statement [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a Statement [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a Statement [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 bsearch16u::return#3 ] ) always clobbers reg byte a Statement [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 sqrt::found#0 ] ) always clobbers reg byte a Statement [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 sqrt::$3 ] ) always clobbers reg byte a Statement [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 sqrt::$1 ] ) always clobbers reg byte a Statement [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqrt:134 [ 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#1 ] ) always clobbers reg byte a Statement [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y Statement [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::$2 ] ) always clobbers reg byte a Statement [162] (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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a Statement [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a Statement [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a Statement [165] (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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y Statement [166] 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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a Statement [167] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:7::init_dist_screen:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::return#6 ] ) always clobbers reg byte a Statement [168] 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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a Statement [169] (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:10::sqrt:134::bsearch16u:147 [ 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#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a Statement [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:7::init_dist_screen:10::sqr:114 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:7::init_dist_screen:10::sqr:129 [ 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#1 sqr::$0 ] ) always clobbers reg byte a Statement [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:7::init_dist_screen:10::sqr:114 [ 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#1 ] main:7::init_dist_screen:10::sqr:129 [ 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#1 ] ) always clobbers reg byte a reg byte y Statement [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ SQUARES#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 ] ) always clobbers reg byte a Statement [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ SQUARES#1 init_squares::squares#0 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a Statement [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y Statement [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a Statement [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a Statement [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:7::init_dist_screen:10::init_squares:106 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a Statement [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a Statement [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 [ malloc::mem#0 heap_head#1 ] ( malloc:2 [ malloc::mem#0 heap_head#1 ] malloc:4 [ malloc::mem#0 heap_head#1 ] main:7::init_dist_screen:10::init_squares:106::malloc:178 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a Potential registers zp[2]:2 [ main::fill#2 main::fill#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ main::dist#2 main::dist#0 main::dist#1 ] : zp[2]:4 , Potential registers zp[2]:6 [ main::angle#2 main::angle#0 main::angle#1 ] : zp[2]:6 , Potential registers zp[2]:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ] : zp[2]:8 , Potential registers zp[2]:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] : zp[2]:10 , Potential registers zp[2]:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] : zp[2]:12 , Potential registers zp[1]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp[1]:14 , reg byte x , Potential registers zp[2]:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp[2]:15 , Potential registers zp[2]:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp[2]:17 , Potential registers zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp[1]:19 , reg byte x , Potential registers zp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp[1]:20 , reg byte x , Potential registers 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 ] : zp[2]:21 , Potential registers 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 ] : zp[2]:23 , Potential registers zp[1]:25 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:25 , reg byte x , reg byte y , Potential registers zp[2]:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:26 , Potential registers zp[2]:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp[2]:28 , Potential registers zp[1]:30 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:30 , reg byte x , reg byte y , Potential registers zp[2]:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:31 , Potential registers zp[2]:33 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:33 , Potential registers zp[1]:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp[1]:35 , reg byte x , Potential registers zp[2]:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] : zp[2]:36 , Potential registers zp[2]:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] : zp[2]:38 , Potential registers zp[1]:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp[1]:40 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp[1]:41 , reg byte x , Potential registers zp[1]:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp[1]:42 , reg byte x , Potential registers zp[1]:43 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] : zp[1]:43 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp[2]:44 , Potential registers zp[1]:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp[1]:46 , reg byte x , Potential registers zp[1]:47 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp[1]:47 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:48 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp[2]:48 , Potential registers zp[2]:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp[2]:50 , Potential registers zp[1]:52 [ init_squares::i#2 init_squares::i#1 ] : zp[1]:52 , reg byte x , Potential registers zp[2]:53 [ heap_head#12 heap_head#1 ] : zp[2]:53 , Potential registers zp[2]:55 [ malloc::size#3 ] : zp[2]:55 , 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 [ init_angle_screen::screen#0 ] : zp[2]:61 , Potential registers zp[1]:63 [ init_angle_screen::$3 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:64 [ init_angle_screen::$4 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:65 [ init_angle_screen::xw#0 ] : zp[2]:65 , Potential registers zp[1]:67 [ init_angle_screen::$7 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:68 [ init_angle_screen::yw#0 ] : zp[2]:68 , Potential registers zp[2]:70 [ atan2_16::x#0 ] : zp[2]:70 , Potential registers zp[2]:72 [ atan2_16::y#0 ] : zp[2]:72 , Potential registers zp[2]:74 [ atan2_16::return#2 ] : zp[2]:74 , Potential registers zp[2]:76 [ init_angle_screen::angle_w#0 ] : zp[2]:76 , Potential registers zp[2]:78 [ init_angle_screen::$11 ] : zp[2]:78 , Potential registers zp[1]:80 [ init_angle_screen::ang_w#0 ] : zp[1]:80 , reg byte x , Potential registers zp[1]:81 [ init_angle_screen::$13 ] : zp[1]:81 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:82 [ init_angle_screen::$14 ] : zp[1]:82 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:83 [ init_angle_screen::$15 ] : zp[1]:83 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:84 [ atan2_16::$23 ] : zp[1]:84 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:85 [ atan2_16::$22 ] : zp[1]:85 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:86 [ init_dist_screen::y2#0 ] : zp[1]:86 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:87 [ sqr::return#2 ] : zp[2]:87 , Potential registers zp[2]:89 [ init_dist_screen::yds#0 ] : zp[2]:89 , Potential registers zp[1]:91 [ init_dist_screen::x2#0 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:92 [ sqr::return#3 ] : zp[2]:92 , Potential registers zp[2]:94 [ init_dist_screen::xds#0 ] : zp[2]:94 , Potential registers zp[2]:96 [ init_dist_screen::ds#0 ] : zp[2]:96 , Potential registers zp[2]:98 [ sqrt::val#0 ] : zp[2]:98 , Potential registers zp[1]:100 [ sqrt::return#2 ] : zp[1]:100 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:101 [ init_dist_screen::d#0 ] : zp[1]:101 , reg byte a , reg byte x , Potential registers zp[2]:102 [ bsearch16u::key#0 ] : zp[2]:102 , Potential registers zp[2]:104 [ bsearch16u::return#3 ] : zp[2]:104 , Potential registers zp[2]:106 [ sqrt::found#0 ] : zp[2]:106 , Potential registers zp[2]:108 [ sqrt::$3 ] : zp[2]:108 , Potential registers zp[2]:110 [ sqrt::$1 ] : zp[2]:110 , Potential registers zp[1]:112 [ sqrt::return#0 ] : zp[1]:112 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:113 [ bsearch16u::$6 ] : zp[1]:113 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:114 [ bsearch16u::$16 ] : zp[1]:114 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:115 [ bsearch16u::pivot#0 ] : zp[2]:115 , Potential registers zp[2]:117 [ bsearch16u::result#0 ] : zp[2]:117 , Potential registers zp[1]:119 [ sqr::$0 ] : zp[1]:119 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:120 [ sqr::return#0 ] : zp[2]:120 , Potential registers zp[2]:122 [ SQUARES#1 ] : zp[2]:122 , Potential registers zp[1]:124 [ init_squares::$3 ] : zp[1]:124 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:125 [ init_squares::$4 ] : zp[1]:125 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:126 [ malloc::mem#0 ] : zp[2]:126 , REGISTER UPLIFT SCOPES Uplift Scope [atan2_16] 28,670.58: zp[1]:30 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp[2]:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp[2]:33 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp[2]:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: 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 ] 2,283.07: 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 ] 2,002: zp[1]:84 [ atan2_16::$23 ] 2,002: zp[1]:85 [ atan2_16::$22 ] 1,710.04: zp[1]:25 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp[2]:74 [ atan2_16::return#2 ] 50: zp[2]:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp[2]:70 [ atan2_16::x#0 ] 2.72: zp[2]:72 [ atan2_16::y#0 ] Uplift Scope [bsearch16u] 7,563.11: zp[1]:46 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp[2]:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp[1]:113 [ bsearch16u::$6 ] 2,002: zp[1]:114 [ bsearch16u::$16 ] 1,501.5: zp[2]:117 [ bsearch16u::result#0 ] 501: zp[2]:115 [ bsearch16u::pivot#0 ] 4: zp[2]:104 [ bsearch16u::return#3 ] 0.27: zp[2]:102 [ bsearch16u::key#0 ] Uplift Scope [init_angle_screen] 220.36: zp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp[1]:63 [ init_angle_screen::$3 ] 202: zp[1]:64 [ init_angle_screen::$4 ] 202: zp[1]:67 [ init_angle_screen::$7 ] 202: zp[2]:76 [ init_angle_screen::angle_w#0 ] 202: zp[2]:78 [ init_angle_screen::$11 ] 202: zp[1]:81 [ init_angle_screen::$13 ] 202: zp[1]:82 [ init_angle_screen::$14 ] 202: zp[1]:83 [ init_angle_screen::$15 ] 129.86: zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp[1]:80 [ init_angle_screen::ang_w#0 ] 50.5: zp[2]:68 [ init_angle_screen::yw#0 ] 33.67: zp[2]:65 [ init_angle_screen::xw#0 ] 21.23: zp[1]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp[2]:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp[2]:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp[2]:61 [ init_angle_screen::screen#0 ] Uplift Scope [init_dist_screen] 707: zp[1]:43 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 221.24: zp[1]:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 202: zp[1]:91 [ init_dist_screen::x2#0 ] 202: zp[2]:94 [ init_dist_screen::xds#0 ] 202: zp[2]:96 [ init_dist_screen::ds#0 ] 131.3: zp[1]:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp[1]:101 [ init_dist_screen::d#0 ] 77: zp[1]:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp[1]:86 [ init_dist_screen::y2#0 ] 18.18: zp[2]:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp[1]:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp[2]:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp[2]:89 [ init_dist_screen::yds#0 ] Uplift Scope [main] 588: zp[2]:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] 311.79: zp[2]:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] 303: zp[2]:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ] 141.4: zp[2]:2 [ main::fill#2 main::fill#1 ] 107.39: zp[2]:6 [ main::angle#2 main::angle#0 main::angle#1 ] 90.65: zp[2]:4 [ main::dist#2 main::dist#0 main::dist#1 ] Uplift Scope [sqr] 338: zp[1]:47 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp[2]:92 [ sqr::return#3 ] 28.5: zp[2]:120 [ sqr::return#0 ] 22: zp[2]:87 [ sqr::return#2 ] 4: zp[1]:119 [ sqr::$0 ] Uplift Scope [sqrt] 202: zp[1]:100 [ sqrt::return#2 ] 103: zp[2]:98 [ sqrt::val#0 ] 34.33: zp[1]:112 [ sqrt::return#0 ] 4: zp[2]:106 [ sqrt::found#0 ] 4: zp[2]:108 [ sqrt::$3 ] 2: zp[2]:110 [ sqrt::$1 ] Uplift Scope [init_squares] 25.17: zp[2]:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp[1]:52 [ init_squares::i#2 init_squares::i#1 ] 22: zp[1]:124 [ init_squares::$3 ] 22: zp[1]:125 [ init_squares::$4 ] 13.93: zp[2]:48 [ init_squares::sqr#2 init_squares::sqr#1 ] Uplift Scope [] 6.6: zp[2]:53 [ heap_head#12 heap_head#1 ] 0.09: zp[2]:59 [ SCREEN_ANGLE#0 ] 0.08: zp[2]:57 [ SCREEN_DIST#0 ] 0.03: zp[2]:122 [ SQUARES#1 ] Uplift Scope [malloc] 2: zp[2]:55 [ malloc::size#3 ] 0.67: zp[2]:126 [ malloc::mem#0 ] Uplift Scope [RADIX] Uplifting [atan2_16] best 1247286 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:33 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 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 ] 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 ] 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]:74 [ atan2_16::return#2 ] zp[2]:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp[2]:70 [ atan2_16::x#0 ] zp[2]:72 [ atan2_16::y#0 ] Limited combination testing to 100 combinations of 144 possible. Uplifting [bsearch16u] best 1228286 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp[2]:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp[2]:117 [ bsearch16u::result#0 ] zp[2]:115 [ bsearch16u::pivot#0 ] zp[2]:104 [ bsearch16u::return#3 ] zp[2]:102 [ bsearch16u::key#0 ] Uplifting [init_angle_screen] best 1226686 combination zp[1]:20 [ 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::$7 ] zp[2]:76 [ init_angle_screen::angle_w#0 ] zp[2]:78 [ init_angle_screen::$11 ] zp[1]:81 [ init_angle_screen::$13 ] zp[1]:82 [ init_angle_screen::$14 ] zp[1]:83 [ init_angle_screen::$15 ] zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:80 [ init_angle_screen::ang_w#0 ] zp[2]:68 [ init_angle_screen::yw#0 ] zp[2]:65 [ init_angle_screen::xw#0 ] zp[1]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp[2]:61 [ init_angle_screen::screen#0 ] Limited combination testing to 100 combinations of 65536 possible. Uplifting [init_dist_screen] best 1223486 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp[1]:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp[2]:94 [ init_dist_screen::xds#0 ] zp[2]:96 [ init_dist_screen::ds#0 ] zp[1]:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp[1]:40 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp[1]:86 [ init_dist_screen::y2#0 ] zp[2]:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp[1]:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp[2]:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp[2]:89 [ init_dist_screen::yds#0 ] Limited combination testing to 100 combinations of 6144 possible. Uplifting [main] best 1223486 combination zp[2]:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] zp[2]:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] zp[2]:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ] zp[2]:2 [ main::fill#2 main::fill#1 ] zp[2]:6 [ main::angle#2 main::angle#0 main::angle#1 ] zp[2]:4 [ main::dist#2 main::dist#0 main::dist#1 ] Uplifting [sqr] best 1223149 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp[2]:92 [ sqr::return#3 ] zp[2]:120 [ sqr::return#0 ] zp[2]:87 [ sqr::return#2 ] reg byte a [ sqr::$0 ] Uplifting [sqrt] best 1222246 combination reg byte a [ sqrt::return#2 ] zp[2]:98 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp[2]:106 [ sqrt::found#0 ] zp[2]:108 [ sqrt::$3 ] zp[2]:110 [ sqrt::$1 ] Uplifting [init_squares] best 1222046 combination zp[2]:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 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]:48 [ init_squares::sqr#2 init_squares::sqr#1 ] Uplifting [] best 1222046 combination zp[2]:53 [ heap_head#12 heap_head#1 ] zp[2]:59 [ SCREEN_ANGLE#0 ] zp[2]:57 [ SCREEN_DIST#0 ] zp[2]:122 [ SQUARES#1 ] Uplifting [malloc] best 1222046 combination zp[2]:55 [ malloc::size#3 ] zp[2]:126 [ malloc::mem#0 ] Uplifting [RADIX] best 1222046 combination Attempting to uplift remaining variables inzp[1]:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Uplifting [init_dist_screen] best 1222046 combination zp[1]:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Attempting to uplift remaining variables inzp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Uplifting [init_angle_screen] best 1222046 combination zp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] Attempting to uplift remaining variables inzp[1]:81 [ init_angle_screen::$13 ] Uplifting [init_angle_screen] best 1221446 combination reg byte a [ init_angle_screen::$13 ] Attempting to uplift remaining variables inzp[1]:82 [ init_angle_screen::$14 ] Uplifting [init_angle_screen] best 1221046 combination reg byte a [ init_angle_screen::$14 ] Attempting to uplift remaining variables inzp[1]:83 [ init_angle_screen::$15 ] Uplifting [init_angle_screen] best 1220446 combination reg byte a [ init_angle_screen::$15 ] Attempting to uplift remaining variables inzp[1]:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Uplifting [init_dist_screen] best 1220446 combination zp[1]:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] Attempting to uplift remaining variables inzp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Uplifting [init_angle_screen] best 1220446 combination zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] Attempting to uplift remaining variables inzp[1]:80 [ init_angle_screen::ang_w#0 ] Uplifting [init_angle_screen] best 1220446 combination zp[1]:80 [ init_angle_screen::ang_w#0 ] Attempting to uplift remaining variables inzp[1]:40 [ 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]:86 [ 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]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Uplifting [init_angle_screen] best 1220276 combination zp[1]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] Attempting to uplift remaining variables inzp[1]:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Uplifting [init_dist_screen] best 1220276 combination zp[1]:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] Coalescing zero page register [ zp[2]:17 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:61 [ init_angle_screen::screen#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:26 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:28 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] - score: 1 Coalescing zero page register [ zp[2]:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp[2]:104 [ bsearch16u::return#3 ] ] - score: 1 Coalescing zero page register [ zp[2]:55 [ malloc::size#3 ] ] with [ zp[2]:126 [ malloc::mem#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:65 [ init_angle_screen::xw#0 ] ] with [ zp[2]:70 [ atan2_16::x#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:68 [ init_angle_screen::yw#0 ] ] with [ zp[2]:72 [ atan2_16::y#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:74 [ atan2_16::return#2 ] ] with [ zp[2]:76 [ init_angle_screen::angle_w#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:87 [ sqr::return#2 ] ] with [ zp[2]:89 [ init_dist_screen::yds#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:92 [ sqr::return#3 ] ] with [ zp[2]:94 [ init_dist_screen::xds#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:92 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp[2]:120 [ sqr::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:96 [ init_dist_screen::ds#0 ] ] with [ zp[2]:98 [ sqrt::val#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:106 [ sqrt::found#0 ] ] with [ zp[2]:108 [ sqrt::$3 ] ] - score: 1 Coalescing zero page register [ zp[2]:26 [ 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] ] with [ zp[2]:74 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp[2]:106 [ sqrt::found#0 sqrt::$3 ] ] - score: 1 Coalescing zero page register [ zp[2]:55 [ malloc::size#3 malloc::mem#0 ] ] with [ zp[2]:122 [ SQUARES#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:92 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp[2]:96 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:26 [ 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp[2]:78 [ init_angle_screen::$11 ] ] - score: 1 Coalescing zero page register [ zp[2]:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp[2]:110 [ sqrt::$1 ] ] - score: 1 Coalescing zero page register [ zp[2]:92 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp[2]:102 [ bsearch16u::key#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp[2]:2 [ main::fill#2 main::fill#1 ] ] Coalescing zero page register [ 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 ] ] with [ zp[2]:4 [ main::dist#2 main::dist#0 main::dist#1 ] ] Coalescing zero page register [ 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 ] ] with [ zp[2]:6 [ main::angle#2 main::angle#0 main::angle#1 ] ] Coalescing zero page register [ 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 ] ] with [ zp[2]:8 [ main::min_dist_angle#2 main::min_dist_angle#6 ] ] Coalescing zero page register [ zp[2]:26 [ 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] with [ zp[2]:10 [ main::min_fill#5 main::min_fill#2 main::min_fill#10 ] ] Coalescing zero page register [ zp[2]:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ] with [ zp[2]:12 [ main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] ] Coalescing zero page register [ zp[1]:35 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp[1]:14 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] Coalescing zero page register [ zp[2]:36 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] ] with [ zp[2]:33 [ 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[1]:41 [ init_dist_screen::x#2 init_dist_screen::x#1 ] ] with [ zp[1]:19 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] Coalescing zero page register [ zp[1]:42 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] ] with [ zp[1]:20 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ] Coalescing zero page register [ zp[2]:48 [ init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp[2]:38 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] Coalescing zero page register [ zp[2]:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp[2]:44 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] Coalescing zero page register [ zp[2]:65 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp[2]:53 [ heap_head#12 heap_head#1 ] ] Coalescing zero page register [ zp[2]:68 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp[2]:55 [ malloc::size#3 malloc::mem#0 SQUARES#1 ] ] Coalescing zero page register [ zp[2]:48 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] with [ zp[2]:15 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] ] Coalescing zero page register [ zp[2]:50 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ 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 main::dist#2 main::dist#0 main::dist#1 ] ] Coalescing zero page register [ zp[2]:87 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ 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 main::angle#2 main::angle#0 main::angle#1 ] ] Coalescing zero page register [ zp[2]:92 [ 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]: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 main::min_dist_angle#2 main::min_dist_angle#6 ] ] Coalescing zero page register [ zp[2]:115 [ bsearch16u::pivot#0 ] ] with [ zp[2]:26 [ 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] ] Coalescing zero page register [ zp[2]:117 [ bsearch16u::result#0 ] ] with [ zp[2]:31 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] ] Allocated (was zp[1]:35) zp[1]:2 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ] Allocated (was zp[2]:36) zp[2]:3 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] Allocated (was zp[1]:41) zp[1]:5 [ init_dist_screen::x#2 init_dist_screen::x#1 init_angle_screen::x#2 init_angle_screen::x#1 ] Allocated (was zp[1]:42) zp[1]:6 [ init_dist_screen::xb#2 init_dist_screen::xb#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ] Allocated (was zp[2]:48) zp[2]:7 [ init_squares::sqr#2 init_squares::sqr#1 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 main::fill#2 main::fill#1 ] Allocated (was zp[2]:50) zp[2]:9 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 main::dist#2 main::dist#0 main::dist#1 ] Allocated (was zp[2]:57) zp[2]:11 [ SCREEN_DIST#0 ] Allocated (was zp[2]:59) zp[2]:13 [ SCREEN_ANGLE#0 ] Allocated (was zp[2]:65) zp[2]:15 [ init_angle_screen::xw#0 atan2_16::x#0 heap_head#12 heap_head#1 ] Allocated (was zp[2]:68) zp[2]:17 [ init_angle_screen::yw#0 atan2_16::y#0 malloc::size#3 malloc::mem#0 SQUARES#1 ] Allocated (was zp[1]:80) zp[1]:19 [ init_angle_screen::ang_w#0 ] Allocated (was zp[2]:87) zp[2]:20 [ sqr::return#2 init_dist_screen::yds#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 main::angle#2 main::angle#0 main::angle#1 ] Allocated (was zp[2]:92) zp[2]:22 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 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 main::min_dist_angle#2 main::min_dist_angle#6 ] Allocated (was zp[2]:115) zp[2]:24 [ bsearch16u::pivot#0 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#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 main::min_fill#5 main::min_fill#2 main::min_fill#10 ] Allocated (was zp[2]:117) zp[2]:26 [ bsearch16u::result#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 main::min_dist_angle#3 main::min_dist_angle#7 main::min_dist_angle#8 main::dist_angle#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Fill screen using a spiral based on distance-to-center / angle-to-center // Upstart .pc = $801 "Basic" :BasicUpstart(__bbegin) .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 // Screen containing angle to center .label SCREEN_FILL = $400 // Char to fill with .const FILL_CHAR = '@' // Top of the heap used by malloc() .label HEAP_TOP = $a000 .const NUM_SQUARES = $30 .label heap_head = $f .label SQUARES = $11 .label SCREEN_DIST = $b .label SCREEN_ANGLE = $d // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] __b1_from___bbegin: jmp __b1 // @1 __b1: // [2] call malloc // [190] phi from @1 to malloc [phi:@1->malloc] malloc_from___b1: // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 // [190] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP sta.z heap_head+1 jsr malloc jmp __b3 // @3 __b3: // [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 // [190] phi from @3 to malloc [phi:@3->malloc] malloc_from___b3: // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy jsr malloc jmp __b4 // @4 __b4: // [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 @4 to @2 [phi:@4->@2] __b2_from___b4: jmp __b2 // @2 __b2: // [7] call main jsr main // [8] phi from @2 to @end [phi:@2->@end] __bend_from___b2: jmp __bend // @end __bend: // main main: { .label dist = 9 .label angle = $14 .label fill = 7 .label dist_angle = $1a .label min_dist_angle = $16 .label min_dist_angle_1 = $1a .label min_fill = $18 // [9] (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 // [10] call init_dist_screen // [105] 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: // [11] (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 // [12] call init_angle_screen jsr init_angle_screen jmp __b1 // main::@1 __b1: // [13] (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 // [14] (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 // [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2] __b2_from___b1: // [15] phi (byte*) main::min_fill#5 = (const byte*) SCREEN_FILL [phi:main::@1->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN_FILL sta.z min_fill+1 // [15] 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 // [15] phi (byte*) main::angle#2 = (byte*) main::angle#0 [phi:main::@1->main::@2#2] -- register_copy // [15] phi (byte*) main::dist#2 = (byte*) main::dist#0 [phi:main::@1->main::@2#3] -- register_copy // [15] phi (byte*) main::fill#2 = (const byte*) SCREEN_FILL [phi:main::@1->main::@2#4] -- pbuz1=pbuc1 lda #SCREEN_FILL sta.z fill+1 jmp __b2 // main::@2 __b2: // [16] if(*((byte*) main::fill#2)==(const 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: // [17] (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 // [18] 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: // [19] (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 // [20] 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: // [20] phi (byte*) main::min_fill#2 = (byte*) main::min_fill#5 [phi:main::@10/main::@11/main::@5->main::@3#0] -- register_copy // [20] 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: // [21] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 -- pbuz1=_inc_pbuz1 inc.z dist bne !+ inc.z dist+1 !: // [22] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 -- pbuz1=_inc_pbuz1 inc.z angle bne !+ inc.z angle+1 !: // [23] (byte*) main::fill#1 ← ++ (byte*) main::fill#2 -- pbuz1=_inc_pbuz1 inc.z fill bne !+ inc.z fill+1 !: // [24] if((byte*) main::fill#1<(const 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: // [26] return rts // main::@7 __b7: // [27] *((byte*) main::min_fill#2) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 // Fill the found location lda #FILL_CHAR ldy #0 sta (min_fill),y jmp __b1 // main::@9 __b9: // [28] (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 // [15] phi from main::@9 to main::@2 [phi:main::@9->main::@2] __b2_from___b9: // [15] phi (byte*) main::min_fill#5 = (byte*) main::min_fill#2 [phi:main::@9->main::@2#0] -- register_copy // [15] phi (word) main::min_dist_angle#2 = (word) main::min_dist_angle#6 [phi:main::@9->main::@2#1] -- register_copy // [15] phi (byte*) main::angle#2 = (byte*) main::angle#1 [phi:main::@9->main::@2#2] -- register_copy // [15] phi (byte*) main::dist#2 = (byte*) main::dist#1 [phi:main::@9->main::@2#3] -- register_copy // [15] phi (byte*) main::fill#2 = (byte*) main::fill#1 [phi:main::@9->main::@2#4] -- register_copy jmp __b2 // main::@11 __b11: // [29] (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: // [30] (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_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center // init_angle_screen(byte* zeropage(9) screen) init_angle_screen: { .label __11 = $18 .label screen = 9 .label screen_topline = 7 .label screen_bottomline = 9 .label xw = $f .label yw = $11 .label angle_w = $18 .label ang_w = $13 .label x = 5 .label xb = 6 .label y = 2 // [31] (byte*) init_angle_screen::screen_topline#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_topline lda.z screen+1 adc #>$28*$c sta.z screen_topline+1 // [32] (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 // [33] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] __b1_from_init_angle_screen: // [33] 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 // [33] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy // [33] 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 // [33] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] __b1_from___b4: // [33] 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 // [33] 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 // [33] 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: // [34] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] __b2_from___b1: // [34] 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 // [34] 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: // [35] 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: // [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_topline sec sbc #<$28 sta.z screen_topline lda.z screen_topline+1 sbc #>$28 sta.z screen_topline+1 // [37] (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 !: // [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 inc.z y // [39] 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: // [40] return rts // init_angle_screen::@3 __b3: // [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z x asl // [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // [43] (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 // [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z y asl // [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 ldy #0 sta.z yw+1 sty.z yw // [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 // [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 // [48] call atan2_16 jsr atan2_16 // [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 jmp __b5 // init_angle_screen::@5 __b5: // [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc.z __11 sta.z __11 bcc !+ inc.z __11+1 !: // [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda.z __11+1 sta.z ang_w // [53] *((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 // [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 lda.z ang_w eor #$ff clc adc #1 // [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z xb sta (screen_topline),y // [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1 lda #$80 clc adc.z ang_w // [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_topline),y // [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1 lda #$80 sec sbc.z ang_w // [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_bottomline),y // [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x // [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb // [34] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] __b2_from___b5: // [34] 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 // [34] 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 } // 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 zeropage($f) x, signed word zeropage($11) y) atan2_16: { .label __2 = $14 .label __7 = $16 .label yi = $14 .label xi = $16 .label angle = $18 .label xd = 3 .label yd = $1a .label return = $18 .label x = $f .label y = $11 // [62] 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: // [63] (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 // [64] 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: // [64] 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: // [65] 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: // [66] (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 // [67] 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: // [67] 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: // [68] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] __b10_from___b6: // [68] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #<0 sta.z angle lda #>0 sta.z angle+1 // [68] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 ldx #0 // [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy // [68] 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: // [69] 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 // [70] 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: // [70] 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: // [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z angle+1 ror.z angle // [72] 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: // [73] (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 // [74] 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: // [74] 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: // [75] 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: // [76] (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 // [77] 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: // [77] 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: // [78] return rts // atan2_16::@11 __b11: // [79] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay // [80] (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 // [81] (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 // [82] 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: // [82] 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 // [82] 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 // [82] 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: // [83] 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: // [84] 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: // [85] (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 // [86] (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 // [87] 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: // [87] 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 // [87] 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: // [88] 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: // [89] (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 // [90] (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 // [91] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // [92] (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 // [93] 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: // [93] 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 // [93] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy // [93] 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: // [94] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx // [95] if((byte) atan2_16::i#1==(const 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 // [68] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] __b10_from___b19: // [68] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy // [68] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy // [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy // [68] 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: // [96] (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 // [97] (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 // [98] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // [99] (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: // [100] (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 // [101] (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 // [102] (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: // [103] (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: // [104] (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 } // 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* zeropage(3) screen) init_dist_screen: { .label screen = 3 .label screen_bottomline = 7 .label yds = $14 .label screen_topline = 3 .label y = 2 .label xds = $16 .label ds = $16 .label x = 5 .label xb = 6 // [106] call init_squares // [177] 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: // [107] (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 // [108] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] __b1_from___b11: // [108] 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 // [108] 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 // [108] 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 // [108] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] __b1_from___b7: // [108] 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 // [108] 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 // [108] 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: // [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z y asl // [110] 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: // [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 // [112] 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: // [112] 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: // [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 // [114] call sqr // [173] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] sqr_from___b4: // [173] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // [115] (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: // [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 // [117] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] __b5_from___b12: // [117] 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 // [117] 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: // [118] 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: // [119] (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 !: // [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_bottomline sec sbc #<$28 sta.z screen_bottomline lda.z screen_bottomline+1 sbc #>$28 sta.z screen_bottomline+1 // [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc.z y // [122] 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: // [123] return rts // init_dist_screen::@6 __b6: // [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z x asl // [125] 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: // [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // [127] 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: // [127] 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: // [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 // [129] call sqr // [173] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] sqr_from___b10: // [173] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr // [130] (word) sqr::return#3 ← (word) sqr::return#0 jmp __b13 // init_dist_screen::@13 __b13: // [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 // [132] (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 // [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 // [134] call sqrt jsr sqrt // [135] (byte) sqrt::return#2 ← (byte) sqrt::return#0 jmp __b14 // init_dist_screen::@14 __b14: // [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 // [137] *((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 // [138] *((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 // [139] *((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 // [140] *((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 // [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x // [142] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb // [117] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] __b5_from___b14: // [117] 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 // [117] 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: // [143] (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: // [144] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp __b4_from___b2 } // sqrt // Find the (integer) square root of a word 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 zeropage($16) val) sqrt: { .label __1 = 9 .label __3 = 9 .label found = 9 .label val = $16 // [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 // [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z bsearch16u.items lda.z SQUARES+1 sta.z bsearch16u.items+1 // [147] call bsearch16u // [154] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] bsearch16u_from_sqrt: jsr bsearch16u // [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 jmp __b1 // sqrt::@1 __b1: // [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 // [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda.z __3 sec sbc.z SQUARES sta.z __3 lda.z __3+1 sbc.z SQUARES+1 sta.z __3+1 // [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z __1+1 ror.z __1 // [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda.z __1 jmp __breturn // sqrt::@return __breturn: // [153] return rts } // bsearch16u // Searches an array of nitems unsigned words, 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 zeropage($16) key, word* zeropage(9) items, byte register(X) num) bsearch16u: { .label __2 = 9 .label pivot = $18 .label result = $1a .label return = 9 .label items = 9 .label key = $16 // [155] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] __b3_from_bsearch16u: // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy // [155] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES jmp __b3 // bsearch16u::@3 __b3: // [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 cpx #0 bne __b4 jmp __b5 // bsearch16u::@5 __b5: // [157] 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: // [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda.z __2 sec sbc #<1*SIZEOF_WORD sta.z __2 lda.z __2+1 sbc #>1*SIZEOF_WORD sta.z __2+1 // [159] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] __b2_from___b1: __b2_from___b5: // [159] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy jmp __b2 // bsearch16u::@2 __b2: // [160] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] __breturn_from___b2: __breturn_from___b8: // [160] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy jmp __breturn // bsearch16u::@return __breturn: // [161] return rts // bsearch16u::@4 __b4: // [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr // [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl // [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa clc adc.z items sta.z pivot lda #0 adc.z items+1 sta.z pivot+1 // [165] (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 // [166] 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: // [167] (word*) bsearch16u::return#6 ← (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: // [168] 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: // [169] (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 // [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx dex // [171] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] __b7_from___b6: __b7_from___b9: // [171] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy // [171] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy jmp __b7 // bsearch16u::@7 __b7: // [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax // [155] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] __b3_from___b7: // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy // [155] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp __b3 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { .label return = $16 .label return_1 = $14 // [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl // [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (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: // [176] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { .label squares = 9 .label sqr = 7 // [178] call malloc // [190] phi from init_squares to malloc [phi:init_squares->malloc] malloc_from_init_squares: // [190] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta.z malloc.size+1 // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc jmp __b2 // init_squares::@2 __b2: // [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 // [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z squares lda.z SQUARES+1 sta.z squares+1 // [181] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] __b1_from___b2: // [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy // [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 lda #<0 sta.z sqr lda #>0 sta.z sqr+1 jmp __b1 // [181] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] __b1_from___b1: // [181] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy // [181] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy jmp __b1 // init_squares::@1 __b1: // [182] *((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 // [183] (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 !: // [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 // [186] (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 !: // [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx // [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne __b1_from___b1 jmp __breturn // init_squares::@return __breturn: // [189] return rts } // malloc // Allocates a block of size bytes 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 zeropage($11) size) malloc: { .label mem = $11 .label size = $11 // [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (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 // [192] (byte*) heap_head#1 ← (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: // [193] return rts } // 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 ldy.z x Removing instruction ldy.z xb Removing instruction lda.z result+1 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __bbegin with __b1 Replacing label __b3_from___b11 with __b3 Replacing label __b3_from___b10 with __b3 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 __b1_from___b7 with __b1 Replacing label __b10_from___b8 with __b10 Replacing label __b4_from___b2 with __b4 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 Replacing label __b1_from___b1 with __b1 Removing instruction __bbegin: Removing instruction __b1_from___bbegin: Removing instruction malloc_from___b1: Removing instruction __b2_from___b4: Removing instruction __bend_from___b2: Removing instruction __b3_from___b10: Removing instruction __b3_from___b11: Removing instruction __b3_from___b5: 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 __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 __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: Removing instruction __b1_from___b1: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __b3: Removing instruction malloc_from___b3: Removing instruction __b4: Removing instruction __b2: Removing instruction __bend: 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 __b1_from_init_angle_screen: Removing instruction __b4: Removing instruction __breturn: Removing instruction __b5: Removing instruction __b2_from___b5: 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 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 bsearch16u_from_sqrt: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b3_from_bsearch16u: Removing instruction __b5: Removing instruction __b1: Removing instruction __b8: Removing instruction __b9: Removing instruction __b3_from___b7: Removing instruction __breturn: Removing instruction malloc_from_init_squares: Removing instruction __b2: Removing instruction __b1_from___b2: Removing instruction __breturn: Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination Replacing jump to rts with rts in jmp __b2 Succesful ASM optimization Pass5DoubleJumpElimination Adding RTS to root block Succesful ASM optimization Pass5AddMainRts Removing instruction jmp __b1 Removing instruction jmp __b1 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction ldy #0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Fixing long branch [380] beq __b12 to bne Fixing long branch [274] bpl __b1 to bmi Fixing long branch [286] bpl __b4 to bmi FINAL SYMBOL TABLE (label) @1 (label) @2 (label) @3 (label) @4 (label) @begin (label) @end (const word*) CORDIC_ATAN2_ANGLES_16 = kickasm {{ .for (var i=0; i@1] // @1 __b1: // malloc(1000) // [2] call malloc // [190] phi from @1 to malloc [phi:@1->malloc] // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 // [190] phi (byte*) heap_head#12 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 lda #HEAP_TOP sta.z heap_head+1 jsr malloc // @3 // 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 // [190] phi from @3 to malloc [phi:@3->malloc] // [190] phi (word) malloc::size#3 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 lda #<$3e8 sta.z malloc.size lda #>$3e8 sta.z malloc.size+1 // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy jsr malloc // @4 // 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 @4 to @2 [phi:@4->@2] // @2 // [7] call main jsr main rts // [8] phi from @2 to @end [phi:@2->@end] // @end // main main: { .label dist = 9 .label angle = $14 .label fill = 7 .label dist_angle = $1a .label min_dist_angle = $16 .label min_dist_angle_1 = $1a .label min_fill = $18 // init_dist_screen(SCREEN_DIST) // [9] (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 // [10] call init_dist_screen // [105] phi from main to init_dist_screen [phi:main->init_dist_screen] jsr init_dist_screen // main::@8 // init_angle_screen(SCREEN_ANGLE) // [11] (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 // [12] call init_angle_screen jsr init_angle_screen // main::@1 __b1: // dist = SCREEN_DIST // [13] (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 // [14] (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 // [15] phi from main::@1 to main::@2 [phi:main::@1->main::@2] // [15] phi (byte*) main::min_fill#5 = (const byte*) SCREEN_FILL [phi:main::@1->main::@2#0] -- pbuz1=pbuc1 lda #SCREEN_FILL sta.z min_fill+1 // [15] 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 // [15] phi (byte*) main::angle#2 = (byte*) main::angle#0 [phi:main::@1->main::@2#2] -- register_copy // [15] phi (byte*) main::dist#2 = (byte*) main::dist#0 [phi:main::@1->main::@2#3] -- register_copy // [15] phi (byte*) main::fill#2 = (const 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) // [16] if(*((byte*) main::fill#2)==(const 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 } // [17] (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 // [19] (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 // [20] phi from main::@10 main::@11 main::@5 to main::@3 [phi:main::@10/main::@11/main::@5->main::@3] // [20] phi (byte*) main::min_fill#2 = (byte*) main::min_fill#5 [phi:main::@10/main::@11/main::@5->main::@3#0] -- register_copy // [20] 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++; // [21] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 -- pbuz1=_inc_pbuz1 inc.z dist bne !+ inc.z dist+1 !: // angle++; // [22] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 -- pbuz1=_inc_pbuz1 inc.z angle bne !+ inc.z angle+1 !: // fill++; // [23] (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 // } // [26] return rts // main::@7 __b7: // *min_fill = FILL_CHAR // [27] *((byte*) main::min_fill#2) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 // Fill the found location lda #FILL_CHAR ldy #0 sta (min_fill),y jmp __b1 // main::@9 __b9: // [28] (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 // [15] phi from main::@9 to main::@2 [phi:main::@9->main::@2] // [15] phi (byte*) main::min_fill#5 = (byte*) main::min_fill#2 [phi:main::@9->main::@2#0] -- register_copy // [15] phi (word) main::min_dist_angle#2 = (word) main::min_dist_angle#6 [phi:main::@9->main::@2#1] -- register_copy // [15] phi (byte*) main::angle#2 = (byte*) main::angle#1 [phi:main::@9->main::@2#2] -- register_copy // [15] phi (byte*) main::dist#2 = (byte*) main::dist#1 [phi:main::@9->main::@2#3] -- register_copy // [15] phi (byte*) main::fill#2 = (byte*) main::fill#1 [phi:main::@9->main::@2#4] -- register_copy jmp __b2 // main::@11 __b11: // [29] (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: // [30] (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_angle_screen // Populates 1000 bytes (a screen) with values representing the angle to the center. // Utilizes symmetry around the center // init_angle_screen(byte* zeropage(9) screen) init_angle_screen: { .label __11 = $18 .label screen = 9 .label screen_topline = 7 .label screen_bottomline = 9 .label xw = $f .label yw = $11 .label angle_w = $18 .label ang_w = $13 .label x = 5 .label xb = 6 .label y = 2 // screen_topline = screen+40*12 // [31] (byte*) init_angle_screen::screen_topline#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_topline lda.z screen+1 adc #>$28*$c sta.z screen_topline+1 // screen_bottomline = screen+40*12 // [32] (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 // [33] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1] // [33] 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 // [33] phi (byte*) init_angle_screen::screen_topline#6 = (byte*) init_angle_screen::screen_topline#0 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy // [33] 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 // [33] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1] // [33] 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 // [33] 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 // [33] 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: // [34] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2] // [34] 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 // [34] 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--) // [35] 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 // [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_topline sec sbc #<$28 sta.z screen_topline lda.z screen_topline+1 sbc #>$28 sta.z screen_topline+1 // screen_bottomline += 40 // [37] (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) // [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 inc.z y // [39] 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 // } // [40] return rts // init_angle_screen::@3 __b3: // x*2 // [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z x asl // 39-x*2 // [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // (word){ 39-x*2, 0 } // [43] (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 // [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z y asl // (word){ y*2, 0 } // [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 -- vwuz1=vbuaa_word_vbuc1 sta.z yw+1 sty.z yw // atan2_16(xw, yw) // [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 // [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 // [48] call atan2_16 jsr atan2_16 // [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 // init_angle_screen::@5 // angle_w = atan2_16(xw, yw) // [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 // angle_w+0x0080 // [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 -- vwuz1=vwuz1_plus_vbuc1 lda #$80 clc adc.z __11 sta.z __11 bcc !+ inc.z __11+1 !: // ang_w = >(angle_w+0x0080) // [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 lda.z __11+1 sta.z ang_w // screen_bottomline[xb] = ang_w // [53] *((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 // [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 eor #$ff clc adc #1 // screen_topline[xb] = -ang_w // [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_topline),y // 0x80+ang_w // [56] (byte~) init_angle_screen::$14 ← (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 // [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa ldy.z x sta (screen_topline),y // 0x80-ang_w // [58] (byte~) init_angle_screen::$15 ← (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 // [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa sta (screen_bottomline),y // for( byte x=0,xb=39; x<=19; x++, xb--) // [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x // [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb // [34] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2] // [34] 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 // [34] 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 } // 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 zeropage($f) x, signed word zeropage($11) y) atan2_16: { .label __2 = $14 .label __7 = $16 .label yi = $14 .label xi = $16 .label angle = $18 .label xd = 3 .label yd = $1a .label return = $18 .label x = $f .label y = $11 // (y>=0)?y:-y // [62] 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 // [63] (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 // [64] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3] // [64] 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 // [65] 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 // [66] (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 // [67] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6] // [67] 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: // [68] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10] // [68] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 lda #<0 sta.z angle sta.z angle+1 // [68] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 tax // [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy // [68] 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) // [69] 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 // [70] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12] // [70] 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 // [71] (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) // [72] 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 // [73] (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 // [74] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7] // [74] 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) // [75] 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 // [76] (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 // [77] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8] // [77] 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 // } // [78] return rts // atan2_16::@11 __b11: // [79] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx txa tay // [80] (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 // [81] (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 // [82] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13] // [82] 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 // [82] 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 // [82] 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) // [83] 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) // [84] 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 // [85] (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 // [86] (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 // [87] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17] // [87] 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 // [87] 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) // [88] 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 // [89] (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 // [90] (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] // [91] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // [92] (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 // [93] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19] // [93] 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 // [93] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy // [93] 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( byte i: 0..CORDIC_ITERATIONS_16-1) // [94] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx inx // [95] if((byte) atan2_16::i#1==(const 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: // [68] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10] // [68] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy // [68] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy // [68] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy // [68] 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 // [96] (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 // [97] (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] // [98] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // [99] (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 // [100] (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 // [101] (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 // [102] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 dey dey jmp __b13 // atan2_16::@4 __b4: // [103] (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: // [104] (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 } // 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* zeropage(3) screen) init_dist_screen: { .label screen = 3 .label screen_bottomline = 7 .label yds = $14 .label screen_topline = 3 .label y = 2 .label xds = $16 .label ds = $16 .label x = 5 .label xb = 6 // init_squares() // [106] call init_squares // [177] 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 // [107] (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 // [108] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1] // [108] 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 // [108] 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 // [108] 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 // [108] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1] // [108] 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 // [108] 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 // [108] 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 // [109] (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) // [110] 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 // [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$18+1 // [112] 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] // [112] 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) // [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 // [114] call sqr // [173] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr] // [173] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy jsr sqr // sqr(yd) // [115] (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) // [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 // [117] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5] // [117] 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 // [117] 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--) // [118] 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 // [119] (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 // [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 -- pbuz1=pbuz1_minus_vwuc1 lda.z screen_bottomline sec sbc #<$28 sta.z screen_bottomline lda.z screen_bottomline+1 sbc #>$28 sta.z screen_bottomline+1 // for(byte y: 0..12) // [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 inc.z y // [122] 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 // } // [123] return rts // init_dist_screen::@6 __b6: // x2 = x*2 // [124] (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) // [125] 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 // [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa eor #$ff clc adc #$27+1 // [127] 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] // [127] 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) // [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 // [129] call sqr // [173] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr] // [173] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy jsr sqr // sqr(xd) // [130] (word) sqr::return#3 ← (word) sqr::return#0 // init_dist_screen::@13 // xds = sqr(xd) // [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 // ds = xds+yds // [132] (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) // [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 // [134] call sqrt jsr sqrt // [135] (byte) sqrt::return#2 ← (byte) sqrt::return#0 // init_dist_screen::@14 // d = sqrt(ds) // [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 // screen_topline[x] = d // [137] *((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 // [138] *((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 // [139] *((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 // [140] *((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--) // [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 inc.z x // [142] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 dec.z xb // [117] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5] // [117] 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 // [117] 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) // [143] (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) // [144] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 -- vbuaa=vbuaa_minus_vbuc1 sec sbc #$18 jmp __b4 } // sqrt // Find the (integer) square root of a word 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 zeropage($16) val) sqrt: { .label __1 = 9 .label __3 = 9 .label found = 9 .label val = $16 // bsearch16u(val, SQUARES, NUM_SQUARES) // [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 // [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z bsearch16u.items lda.z SQUARES+1 sta.z bsearch16u.items+1 // [147] call bsearch16u // [154] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u] jsr bsearch16u // bsearch16u(val, SQUARES, NUM_SQUARES) // [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 // sqrt::@1 // found = bsearch16u(val, SQUARES, NUM_SQUARES) // [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 // found-SQUARES // [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 -- vwuz1=pwuz1_minus_pwuz2 lda.z __3 sec sbc.z SQUARES sta.z __3 lda.z __3+1 sbc.z SQUARES+1 sta.z __3+1 // [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z __1+1 ror.z __1 // (byte)(found-SQUARES) // [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 lda.z __1 // sqrt::@return // } // [153] return rts } // bsearch16u // Searches an array of nitems unsigned words, 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 zeropage($16) key, word* zeropage(9) items, byte register(X) num) bsearch16u: { .label __2 = 9 .label pivot = $18 .label result = $1a .label return = 9 .label items = 9 .label key = $16 // [155] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3] // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy // [155] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 ldx #NUM_SQUARES // bsearch16u::@3 __b3: // while (num > 0) // [156] 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 // [157] 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 // [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 lda.z __2 sec sbc #<1*SIZEOF_WORD sta.z __2 lda.z __2+1 sbc #>1*SIZEOF_WORD sta.z __2+1 // [159] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2] // [159] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy // bsearch16u::@2 __b2: // [160] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return] // [160] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy // bsearch16u::@return // } // [161] return rts // bsearch16u::@4 __b4: // num >> 1 // [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 txa lsr // items + (num >> 1) // [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl // [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- 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 // [165] (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) // [166] 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 // [167] (word*) bsearch16u::return#6 ← (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) // [168] 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 // [169] (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--; // [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx dex // [171] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7] // [171] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy // [171] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy // bsearch16u::@7 __b7: // num >>= 1 // [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 txa lsr tax // [155] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3] // [155] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy // [155] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy jmp __b3 } // sqr // Find the square of a byte value // Uses a table of squares that must be initialized by calling init_squares() // sqr(byte register(A) val) sqr: { .label return = $16 .label return_1 = $14 // return SQUARES[val]; // [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 asl // [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) -- vwuz1=pwuz2_derefidx_vbuaa tay lda (SQUARES),y sta.z return iny lda (SQUARES),y sta.z return+1 // sqr::@return // } // [176] return rts } // init_squares // Initialize squares table // Uses iterative formula (x+1)^2 = x^2 + 2*x + 1 init_squares: { .label squares = 9 .label sqr = 7 // malloc(NUM_SQUARES*sizeof(word)) // [178] call malloc // [190] phi from init_squares to malloc [phi:init_squares->malloc] // [190] phi (word) malloc::size#3 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD [phi:init_squares->malloc#0] -- vwuz1=vbuc1 lda #NUM_SQUARES*SIZEOF_WORD sta.z malloc.size+1 // [190] phi (byte*) heap_head#12 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy jsr malloc // init_squares::@2 // malloc(NUM_SQUARES*sizeof(word)) // [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 // squares = SQUARES // [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 lda.z SQUARES sta.z squares lda.z SQUARES+1 sta.z squares+1 // [181] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1] // [181] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 ldx #0 // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy // [181] phi (word) init_squares::sqr#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#2] -- vwuz1=vbuc1 txa sta.z sqr sta.z sqr+1 // [181] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1] // [181] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy // [181] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy // [181] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@1->init_squares::@1#2] -- register_copy // init_squares::@1 __b1: // *squares++ = sqr // [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 -- _deref_pwuz1=vwuz2 ldy #0 lda.z sqr sta (squares),y iny lda.z sqr+1 sta (squares),y // *squares++ = sqr; // [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 lda #SIZEOF_WORD clc adc.z squares sta.z squares bcc !+ inc.z squares+1 !: // i*2 // [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 txa asl // i*2+1 // [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 clc adc #1 // sqr += i*2+1 // [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 -- vwuz1=vwuz1_plus_vbuaa clc adc.z sqr sta.z sqr bcc !+ inc.z sqr+1 !: // for( byte i: 0..NUM_SQUARES-1) // [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx inx // [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #NUM_SQUARES-1+1 bne __b1 // init_squares::@return // } // [189] return rts } // malloc // Allocates a block of size bytes 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 zeropage($11) size) malloc: { .label mem = $11 .label size = $11 // mem = heap_head-size // [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (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 // [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 -- pbuz1=pbuz2 lda.z mem sta.z heap_head lda.z mem+1 sta.z heap_head+1 // malloc::@return // } // [193] return rts } // File Data // Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ... CORDIC_ATAN2_ANGLES_16: .for (var i=0; i