Resolved forward reference BUCKETS to (word*[]) BUCKETS
Resolved forward reference BUCKET_SIZES to (byte[]) BUCKET_SIZES
Resolved forward reference NUM_BUCKETS to (byte) NUM_BUCKETS
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_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i)
Fixing pointer array-indexing *((word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i)
Fixing pointer array-indexing *((word*[]) BUCKETS + (byte) main::bucket_idx)
Fixing pointer array-indexing *((word[]) main::bucket + (byte) main::i)
Fixing pointer array-indexing *((word*[]) BUCKETS + (word) init_buckets::i2)
Fixing pointer array-indexing *((word*[]) BUCKETS + (word~) init_buckets::$9)
Fixing pointer array-indexing *((word*) init_buckets::bucket + *((byte[]) BUCKET_IDX + (byte) init_buckets::distance))
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
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) malloc::@1
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
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) @12
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) init_squares::@2
Culled Empty Block (label) @17
Culled Empty Block (label) sqr::@1
Culled Empty Block (label) @18
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) @20
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@23
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@24
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@14
Culled Empty Block (label) main::@12
Culled Empty Block (label) main::@17
Culled Empty Block (label) main::@20
Culled Empty Block (label) main::@19
Culled Empty Block (label) main::@22
Culled Empty Block (label) main::@26
Culled Empty Block (label) main::@27
Culled Empty Block (label) main::@31
Culled Empty Block (label) main::@30
Culled Empty Block (label) main::@32
Culled Empty Block (label) main::@33
Culled Empty Block (label) init_buckets::@10
Culled Empty Block (label) @23
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) @24
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
  (byte*) RASTER#0 ← ((byte*)) (number) $d012
  (byte*) BORDERCOL#0 ← ((byte*)) (number) $d020
  (byte*) COLS#0 ← ((byte*)) (number) $d800
  to:@8
@8: scope:[]  from @begin
  (byte*) HEAP_TOP#0 ← ((byte*)) (number) $a000
  (byte*) heap_head#0 ← (byte*) HEAP_TOP#0
  to:@16
malloc: scope:[malloc]  from @21 @22 @26 @28 @29 init_buckets::@5 init_squares
  (word) malloc::size#7 ← phi( @21/(word) malloc::size#1 @22/(word) malloc::size#3 @26/(word) malloc::size#2 @28/(word) malloc::size#4 @29/(word) malloc::size#5 init_buckets::@5/(word) malloc::size#6 init_squares/(word) malloc::size#0 )
  (byte*) heap_head#18 ← phi( @21/(byte*) heap_head#35 @22/(byte*) heap_head#36 @26/(byte*) heap_head#5 @28/(byte*) heap_head#10 @29/(byte*) heap_head#11 init_buckets::@5/(byte*) heap_head#37 init_squares/(byte*) heap_head#38 )
  (byte*~) malloc::$0 ← (byte*) heap_head#18 - (word) malloc::size#7
  (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#19 ← phi( malloc/(byte*) heap_head#1 )
  (void*) malloc::return#9 ← phi( malloc/(void*) malloc::return#0 )
  (void*) malloc::return#1 ← (void*) malloc::return#9
  (byte*) heap_head#2 ← (byte*) heap_head#19
  return 
  to:@return
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
@16: scope:[]  from @8
  (byte*) heap_head#54 ← phi( @8/(byte*) heap_head#0 )
  (byte) NUM_SQUARES#0 ← (number) $ff
  (word*) SQUARES#0 ← (word*) 0
  to:@19
init_squares: scope:[init_squares]  from init_dist_screen
  (byte*) heap_head#38 ← phi( init_dist_screen/(byte*) heap_head#44 )
  (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#20 ← phi( init_squares/(byte*) heap_head#2 )
  (void*) malloc::return#10 ← phi( init_squares/(void*) malloc::return#2 )
  (void*~) init_squares::$1 ← (void*) malloc::return#10
  (byte*) heap_head#3 ← (byte*) heap_head#20
  (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#39 ← phi( init_squares::@1/(byte*) heap_head#39 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#21 ← phi( init_squares::@1/(byte*) heap_head#39 )
  (byte*) heap_head#4 ← (byte*) heap_head#21
  (word*) SQUARES#2 ← (word*) SQUARES#8
  return 
  to:@return
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
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
@19: scope:[]  from @16
  (word*) SQUARES#59 ← phi( @16/(word*) SQUARES#0 )
  (byte) NUM_SQUARES#54 ← phi( @16/(byte) NUM_SQUARES#0 )
  (byte*) heap_head#47 ← phi( @16/(byte*) heap_head#54 )
  (byte) CORDIC_ITERATIONS_16#0 ← (number) $f
  (word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 ← kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2
 }}
  to:@21
atan2_16: scope:[atan2_16]  from init_angle_screen::@3
  (signed word) atan2_16::x#9 ← phi( init_angle_screen::@3/(signed word) atan2_16::x#0 )
  (signed word) atan2_16::y#1 ← phi( init_angle_screen::@3/(signed word) atan2_16::y#0 )
  (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
  if((bool~) atan2_16::$0) goto atan2_16::@1
  to:atan2_16::@2
atan2_16::@1: scope:[atan2_16]  from atan2_16
  (signed word) atan2_16::x#5 ← phi( atan2_16/(signed word) atan2_16::x#9 )
  (signed word) atan2_16::y#2 ← phi( atan2_16/(signed word) atan2_16::y#1 )
  (signed word~) atan2_16::$3 ← (signed word) atan2_16::y#2
  to:atan2_16::@3
atan2_16::@2: scope:[atan2_16]  from atan2_16
  (signed word) atan2_16::x#6 ← phi( atan2_16/(signed word) atan2_16::x#9 )
  (signed word) atan2_16::y#3 ← phi( atan2_16/(signed word) atan2_16::y#1 )
  (signed word~) atan2_16::$1 ← - (signed word) atan2_16::y#3
  (signed word~) atan2_16::$2 ← (signed word~) atan2_16::$1
  to:atan2_16::@3
atan2_16::@3: scope:[atan2_16]  from atan2_16::@1 atan2_16::@2
  (signed word) atan2_16::y#15 ← phi( atan2_16::@1/(signed word) atan2_16::y#2 atan2_16::@2/(signed word) atan2_16::y#3 )
  (signed word) atan2_16::x#1 ← phi( atan2_16::@1/(signed word) atan2_16::x#5 atan2_16::@2/(signed word) atan2_16::x#6 )
  (signed word~) atan2_16::$4 ← phi( atan2_16::@1/(signed word~) atan2_16::$3 atan2_16::@2/(signed word~) atan2_16::$2 )
  (signed word) atan2_16::yi#0 ← (signed word~) atan2_16::$4
  (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
  if((bool~) atan2_16::$5) goto atan2_16::@4
  to:atan2_16::@5
atan2_16::@4: scope:[atan2_16]  from atan2_16::@3
  (signed word) atan2_16::y#12 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
  (signed word) atan2_16::yi#12 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
  (signed word) atan2_16::x#2 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
  (signed word~) atan2_16::$8 ← (signed word) atan2_16::x#2
  to:atan2_16::@6
atan2_16::@5: scope:[atan2_16]  from atan2_16::@3
  (signed word) atan2_16::y#13 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
  (signed word) atan2_16::yi#13 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
  (signed word) atan2_16::x#3 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
  (signed word~) atan2_16::$6 ← - (signed word) atan2_16::x#3
  (signed word~) atan2_16::$7 ← (signed word~) atan2_16::$6
  to:atan2_16::@6
atan2_16::@6: scope:[atan2_16]  from atan2_16::@4 atan2_16::@5
  (signed word) atan2_16::y#9 ← phi( atan2_16::@4/(signed word) atan2_16::y#12 atan2_16::@5/(signed word) atan2_16::y#13 )
  (signed word) atan2_16::x#10 ← phi( atan2_16::@4/(signed word) atan2_16::x#2 atan2_16::@5/(signed word) atan2_16::x#3 )
  (signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 )
  (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 )
  (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9
  (word) atan2_16::angle#0 ← (number) 0
  (number~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (number) 1
  (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::$17 ← (signed word) atan2_16::yi#3 == (number) 0
  (bool~) atan2_16::$18 ← ! (bool~) atan2_16::$17
  if((bool~) atan2_16::$18) 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::$19 ← (byte) atan2_16::shift#2 >= (number) 2
  if((bool~) atan2_16::$19) 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::$25 ← (number) 0 != (byte) atan2_16::shift#4
  (bool~) atan2_16::$20 ← ! (bool~) atan2_16::$25
  if((bool~) atan2_16::$20) 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::$21 ← (signed word) atan2_16::yi#5 >= (number) 0
  if((bool~) atan2_16::$21) 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::$23 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD
  (word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
  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::$24 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD
  (word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
  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,atan2_16::$16)
  (bool~) atan2_16::$22 ← (byte) atan2_16::i#1 != rangelast(0,atan2_16::$16)
  if((bool~) atan2_16::$22) 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
@21: scope:[]  from @19
  (word*) SQUARES#58 ← phi( @19/(word*) SQUARES#59 )
  (byte) NUM_SQUARES#53 ← phi( @19/(byte) NUM_SQUARES#54 )
  (byte*) heap_head#35 ← phi( @19/(byte*) heap_head#47 )
  (word) malloc::size#1 ← (number) $3e8
  call malloc 
  (void*) malloc::return#3 ← (void*) malloc::return#1
  to:@26
@26: scope:[]  from @21
  (word*) SQUARES#54 ← phi( @21/(word*) SQUARES#58 )
  (byte) NUM_SQUARES#48 ← phi( @21/(byte) NUM_SQUARES#53 )
  (byte*) heap_head#22 ← phi( @21/(byte*) heap_head#2 )
  (void*) malloc::return#11 ← phi( @21/(void*) malloc::return#3 )
  (void*~) $0 ← (void*) malloc::return#11
  (byte*) heap_head#5 ← (byte*) heap_head#22
  (byte[]) SCREEN_DIST#0 ← ((byte[])) (void*~) $0
  (word) malloc::size#2 ← (number) $3e8
  call malloc 
  (void*) malloc::return#4 ← (void*) malloc::return#1
  to:@27
@27: scope:[]  from @26
  (word*) SQUARES#53 ← phi( @26/(word*) SQUARES#54 )
  (byte) NUM_SQUARES#46 ← phi( @26/(byte) NUM_SQUARES#48 )
  (byte*) heap_head#23 ← phi( @26/(byte*) heap_head#2 )
  (void*) malloc::return#12 ← phi( @26/(void*) malloc::return#4 )
  (void*~) $1 ← (void*) malloc::return#12
  (byte*) heap_head#6 ← (byte*) heap_head#23
  (byte[]) SCREEN_ANGLE#0 ← ((byte[])) (void*~) $1
  (byte*) SCREEN_FILL#0 ← ((byte*)) (number) $400
  (byte) FILL_CHAR#0 ← (byte) '*'
  to:@22
main: scope:[main]  from @25
  (word*) SQUARES#21 ← phi( @25/(word*) SQUARES#25 )
  (byte*) heap_head#40 ← phi( @25/(byte*) heap_head#46 )
  (byte) NUM_SQUARES#14 ← phi( @25/(byte) NUM_SQUARES#17 )
  asm { sei  }
  (byte*) init_dist_screen::screen#0 ← (byte[]) SCREEN_DIST#0
  call init_dist_screen 
  to:main::@34
main::@34: scope:[main]  from main
  (word*) SQUARES#12 ← phi( main/(word*) SQUARES#6 )
  (byte*) heap_head#24 ← phi( main/(byte*) heap_head#16 )
  (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#24
  (word*) SQUARES#3 ← (word*) SQUARES#12
  (byte*) init_angle_screen::screen#0 ← (byte[]) SCREEN_ANGLE#0
  call init_angle_screen 
  to:main::@35
main::@35: scope:[main]  from main::@34
  (word*) SQUARES#44 ← phi( main::@34/(word*) SQUARES#3 )
  (byte) NUM_SQUARES#33 ← phi( main::@34/(byte) NUM_SQUARES#1 )
  (byte*) heap_head#41 ← phi( main::@34/(byte*) heap_head#7 )
  (byte*) init_buckets::screen#0 ← (byte[]) SCREEN_DIST#0
  call init_buckets 
  to:main::@36
main::@36: scope:[main]  from main::@35
  (word*) SQUARES#37 ← phi( main::@35/(word*) SQUARES#44 )
  (byte) NUM_SQUARES#26 ← phi( main::@35/(byte) NUM_SQUARES#33 )
  (byte*) heap_head#25 ← phi( main::@35/(byte*) heap_head#14 )
  (byte*) heap_head#8 ← (byte*) heap_head#25
  (byte) main::bucket_idx#0 ← (number) 0
  to:main::@1
main::@1: scope:[main]  from main::@18 main::@21 main::@36
  (word*) SQUARES#26 ← phi( main::@18/(word*) SQUARES#35 main::@21/(word*) SQUARES#36 main::@36/(word*) SQUARES#37 )
  (byte*) heap_head#48 ← phi( main::@18/(byte*) heap_head#55 main::@21/(byte*) heap_head#56 main::@36/(byte*) heap_head#8 )
  (byte) NUM_SQUARES#18 ← phi( main::@18/(byte) NUM_SQUARES#24 main::@21/(byte) NUM_SQUARES#25 main::@36/(byte) NUM_SQUARES#26 )
  (byte) main::bucket_idx#6 ← phi( main::@18/(byte) main::bucket_idx#8 main::@21/(byte) main::bucket_idx#9 main::@36/(byte) main::bucket_idx#0 )
  if(true) goto main::@4
  to:main::@28
main::@4: scope:[main]  from main::@1 main::@4
  (word*) SQUARES#48 ← phi( main::@1/(word*) SQUARES#26 main::@4/(word*) SQUARES#48 )
  (byte*) heap_head#68 ← phi( main::@1/(byte*) heap_head#48 main::@4/(byte*) heap_head#68 )
  (byte) NUM_SQUARES#39 ← phi( main::@1/(byte) NUM_SQUARES#18 main::@4/(byte) NUM_SQUARES#39 )
  (byte) main::bucket_idx#4 ← phi( main::@1/(byte) main::bucket_idx#6 main::@4/(byte) main::bucket_idx#4 )
  (bool~) main::$3 ← *((byte*) RASTER#0) != (number) $ff
  if((bool~) main::$3) goto main::@4
  to:main::@5
main::@5: scope:[main]  from main::@4
  (word*) SQUARES#46 ← phi( main::@4/(word*) SQUARES#48 )
  (byte*) heap_head#63 ← phi( main::@4/(byte*) heap_head#68 )
  (byte) NUM_SQUARES#35 ← phi( main::@4/(byte) NUM_SQUARES#39 )
  (byte) main::bucket_idx#2 ← phi( main::@4/(byte) main::bucket_idx#4 )
  *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0)
  (byte~) main::$21 ← (byte) main::bucket_idx#2 * (const byte) SIZEOF_POINTER
  (word[]) main::bucket#0 ← *((word*[]) BUCKETS#0 + (byte~) main::$21)
  (byte) main::bucket_size#0 ← *((byte[]) BUCKET_SIZES#0 + (byte) main::bucket_idx#2)
  (bool~) main::$4 ← (byte) main::bucket_size#0 > (number) 0
  (bool~) main::$5 ← ! (bool~) main::$4
  if((bool~) main::$5) goto main::@7
  to:main::@6
main::@7: scope:[main]  from main::@10 main::@5
  (word*) SQUARES#38 ← phi( main::@10/(word*) SQUARES#45 main::@5/(word*) SQUARES#46 )
  (byte*) heap_head#57 ← phi( main::@10/(byte*) heap_head#62 main::@5/(byte*) heap_head#63 )
  (byte) NUM_SQUARES#27 ← phi( main::@10/(byte) NUM_SQUARES#34 main::@5/(byte) NUM_SQUARES#35 )
  (byte) main::bucket_idx#3 ← phi( main::@10/(byte) main::bucket_idx#5 main::@5/(byte) main::bucket_idx#2 )
  (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#3
  (bool~) main::$16 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0
  (bool~) main::$17 ← ! (bool~) main::$16
  if((bool~) main::$17) goto main::@21
  to:main::@25
main::@6: scope:[main]  from main::@5
  (word*) SQUARES#52 ← phi( main::@5/(word*) SQUARES#46 )
  (byte*) heap_head#75 ← phi( main::@5/(byte*) heap_head#63 )
  (byte) NUM_SQUARES#45 ← phi( main::@5/(byte) NUM_SQUARES#35 )
  (byte) main::bucket_idx#11 ← phi( main::@5/(byte) main::bucket_idx#2 )
  (byte) main::bucket_size#3 ← phi( main::@5/(byte) main::bucket_size#0 )
  (byte) main::min_angle#0 ← (number) $ff
  (word) main::min_offset#0 ← (number) $ffff
  (byte) main::i#0 ← (number) 0
  to:main::@8
main::@8: scope:[main]  from main::@11 main::@6
  (word*) SQUARES#49 ← phi( main::@11/(word*) SQUARES#51 main::@6/(word*) SQUARES#52 )
  (byte*) heap_head#69 ← phi( main::@11/(byte*) heap_head#74 main::@6/(byte*) heap_head#75 )
  (byte) NUM_SQUARES#40 ← phi( main::@11/(byte) NUM_SQUARES#44 main::@6/(byte) NUM_SQUARES#45 )
  (byte) main::bucket_idx#7 ← phi( main::@11/(byte) main::bucket_idx#10 main::@6/(byte) main::bucket_idx#11 )
  (byte) main::min_angle#4 ← phi( main::@11/(byte) main::min_angle#5 main::@6/(byte) main::min_angle#0 )
  (word) main::min_offset#4 ← phi( main::@11/(word) main::min_offset#5 main::@6/(word) main::min_offset#0 )
  (byte) main::bucket_size#1 ← phi( main::@11/(byte) main::bucket_size#2 main::@6/(byte) main::bucket_size#3 )
  (byte) main::i#2 ← phi( main::@11/(byte) main::i#1 main::@6/(byte) main::i#0 )
  (bool~) main::$6 ← (byte) main::i#2 < (byte) main::bucket_size#1
  if((bool~) main::$6) goto main::@9
  to:main::@10
main::@9: scope:[main]  from main::@8
  (word*) SQUARES#57 ← phi( main::@8/(word*) SQUARES#49 )
  (byte*) heap_head#82 ← phi( main::@8/(byte*) heap_head#69 )
  (byte) NUM_SQUARES#51 ← phi( main::@8/(byte) NUM_SQUARES#40 )
  (byte) main::bucket_idx#14 ← phi( main::@8/(byte) main::bucket_idx#7 )
  (word) main::min_offset#7 ← phi( main::@8/(word) main::min_offset#4 )
  (byte) main::bucket_size#6 ← phi( main::@8/(byte) main::bucket_size#1 )
  (byte) main::min_angle#3 ← phi( main::@8/(byte) main::min_angle#4 )
  (byte) main::i#3 ← phi( main::@8/(byte) main::i#2 )
  (byte~) main::$22 ← (byte) main::i#3 * (const byte) SIZEOF_WORD
  (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22)
  (byte*~) main::$7 ← (byte*) SCREEN_FILL#0 + (word) main::offset#0
  (byte*) main::fill#0 ← (byte*~) main::$7
  (bool~) main::$8 ← *((byte*) main::fill#0) != (byte) FILL_CHAR#0
  (bool~) main::$9 ← ! (bool~) main::$8
  if((bool~) main::$9) goto main::@11
  to:main::@15
main::@10: scope:[main]  from main::@8
  (word*) SQUARES#45 ← phi( main::@8/(word*) SQUARES#49 )
  (byte*) heap_head#62 ← phi( main::@8/(byte*) heap_head#69 )
  (byte) NUM_SQUARES#34 ← phi( main::@8/(byte) NUM_SQUARES#40 )
  (byte) main::bucket_idx#5 ← phi( main::@8/(byte) main::bucket_idx#7 )
  (word) main::min_offset#2 ← phi( main::@8/(word) main::min_offset#4 )
  (bool~) main::$13 ← (word) main::min_offset#2 != (number) $ffff
  (bool~) main::$14 ← ! (bool~) main::$13
  if((bool~) main::$14) goto main::@7
  to:main::@18
main::@11: scope:[main]  from main::@15 main::@16 main::@9
  (word*) SQUARES#51 ← phi( main::@15/(word*) SQUARES#55 main::@16/(word*) SQUARES#56 main::@9/(word*) SQUARES#57 )
  (byte*) heap_head#74 ← phi( main::@15/(byte*) heap_head#80 main::@16/(byte*) heap_head#81 main::@9/(byte*) heap_head#82 )
  (byte) NUM_SQUARES#44 ← phi( main::@15/(byte) NUM_SQUARES#49 main::@16/(byte) NUM_SQUARES#50 main::@9/(byte) NUM_SQUARES#51 )
  (byte) main::bucket_idx#10 ← phi( main::@15/(byte) main::bucket_idx#12 main::@16/(byte) main::bucket_idx#13 main::@9/(byte) main::bucket_idx#14 )
  (byte) main::min_angle#5 ← phi( main::@15/(byte) main::min_angle#2 main::@16/(byte) main::min_angle#1 main::@9/(byte) main::min_angle#3 )
  (word) main::min_offset#5 ← phi( main::@15/(word) main::min_offset#6 main::@16/(word) main::min_offset#1 main::@9/(word) main::min_offset#7 )
  (byte) main::bucket_size#2 ← phi( main::@15/(byte) main::bucket_size#4 main::@16/(byte) main::bucket_size#5 main::@9/(byte) main::bucket_size#6 )
  (byte) main::i#4 ← phi( main::@15/(byte) main::i#5 main::@16/(byte) main::i#6 main::@9/(byte) main::i#3 )
  (byte) main::i#1 ← ++ (byte) main::i#4
  to:main::@8
main::@15: scope:[main]  from main::@9
  (word*) SQUARES#55 ← phi( main::@9/(word*) SQUARES#57 )
  (byte*) heap_head#80 ← phi( main::@9/(byte*) heap_head#82 )
  (byte) NUM_SQUARES#49 ← phi( main::@9/(byte) NUM_SQUARES#51 )
  (byte) main::bucket_idx#12 ← phi( main::@9/(byte) main::bucket_idx#14 )
  (word) main::min_offset#6 ← phi( main::@9/(word) main::min_offset#7 )
  (byte) main::bucket_size#4 ← phi( main::@9/(byte) main::bucket_size#6 )
  (byte) main::i#5 ← phi( main::@9/(byte) main::i#3 )
  (byte) main::min_angle#2 ← phi( main::@9/(byte) main::min_angle#3 )
  (word) main::offset#1 ← phi( main::@9/(word) main::offset#0 )
  (byte*~) main::$10 ← (byte[]) SCREEN_ANGLE#0 + (word) main::offset#1
  (byte*) main::angle#0 ← (byte*~) main::$10
  (bool~) main::$11 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2
  (bool~) main::$12 ← ! (bool~) main::$11
  if((bool~) main::$12) goto main::@11
  to:main::@16
main::@16: scope:[main]  from main::@15
  (word*) SQUARES#56 ← phi( main::@15/(word*) SQUARES#55 )
  (byte*) heap_head#81 ← phi( main::@15/(byte*) heap_head#80 )
  (byte) NUM_SQUARES#50 ← phi( main::@15/(byte) NUM_SQUARES#49 )
  (byte) main::bucket_idx#13 ← phi( main::@15/(byte) main::bucket_idx#12 )
  (byte) main::bucket_size#5 ← phi( main::@15/(byte) main::bucket_size#4 )
  (byte) main::i#6 ← phi( main::@15/(byte) main::i#5 )
  (word) main::offset#2 ← phi( main::@15/(word) main::offset#1 )
  (byte*) main::angle#1 ← phi( main::@15/(byte*) main::angle#0 )
  (byte) main::min_angle#1 ← *((byte*) main::angle#1)
  (word) main::min_offset#1 ← (word) main::offset#2
  to:main::@11
main::@18: scope:[main]  from main::@10
  (word*) SQUARES#35 ← phi( main::@10/(word*) SQUARES#45 )
  (byte*) heap_head#55 ← phi( main::@10/(byte*) heap_head#62 )
  (byte) NUM_SQUARES#24 ← phi( main::@10/(byte) NUM_SQUARES#34 )
  (byte) main::bucket_idx#8 ← phi( main::@10/(byte) main::bucket_idx#5 )
  (word) main::min_offset#3 ← phi( main::@10/(word) main::min_offset#2 )
  (byte*~) main::$15 ← (byte*) SCREEN_FILL#0 + (word) main::min_offset#3
  (byte*) main::fill1#0 ← (byte*~) main::$15
  *((byte*) main::fill1#0) ← (byte) FILL_CHAR#0
  *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0)
  to:main::@1
main::@21: scope:[main]  from main::@7
  (word*) SQUARES#36 ← phi( main::@7/(word*) SQUARES#38 )
  (byte*) heap_head#56 ← phi( main::@7/(byte*) heap_head#57 )
  (byte) NUM_SQUARES#25 ← phi( main::@7/(byte) NUM_SQUARES#27 )
  (byte) main::bucket_idx#9 ← phi( main::@7/(byte) main::bucket_idx#1 )
  *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0)
  to:main::@1
main::@25: scope:[main]  from main::@7
  (word*) SQUARES#27 ← phi( main::@7/(word*) SQUARES#38 )
  (byte*) heap_head#49 ← phi( main::@7/(byte*) heap_head#57 )
  (byte) NUM_SQUARES#19 ← phi( main::@7/(byte) NUM_SQUARES#27 )
  *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0)
  to:main::@28
main::@28: scope:[main]  from main::@1 main::@25 main::@29
  (word*) SQUARES#22 ← phi( main::@1/(word*) SQUARES#26 main::@25/(word*) SQUARES#27 main::@29/(word*) SQUARES#28 )
  (byte*) heap_head#42 ← phi( main::@1/(byte*) heap_head#48 main::@25/(byte*) heap_head#49 main::@29/(byte*) heap_head#50 )
  (byte) NUM_SQUARES#15 ← phi( main::@1/(byte) NUM_SQUARES#18 main::@25/(byte) NUM_SQUARES#19 main::@29/(byte) NUM_SQUARES#20 )
  if(true) goto main::@29
  to:main::@return
main::@29: scope:[main]  from main::@28
  (word*) SQUARES#28 ← phi( main::@28/(word*) SQUARES#22 )
  (byte*) heap_head#50 ← phi( main::@28/(byte*) heap_head#42 )
  (byte) NUM_SQUARES#20 ← phi( main::@28/(byte) NUM_SQUARES#15 )
  (byte*~) main::$20 ← (byte*) COLS#0 + (number) $3e7
  *((byte*~) main::$20) ← ++ *((byte*~) main::$20)
  to:main::@28
main::@return: scope:[main]  from main::@28
  (word*) SQUARES#13 ← phi( main::@28/(word*) SQUARES#22 )
  (byte*) heap_head#26 ← phi( main::@28/(byte*) heap_head#42 )
  (byte) NUM_SQUARES#10 ← phi( main::@28/(byte) NUM_SQUARES#15 )
  (byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10
  (byte*) heap_head#9 ← (byte*) heap_head#26
  (word*) SQUARES#4 ← (word*) SQUARES#13
  return 
  to:@return
@22: scope:[]  from @27
  (word*) SQUARES#50 ← phi( @27/(word*) SQUARES#53 )
  (byte) NUM_SQUARES#41 ← phi( @27/(byte) NUM_SQUARES#46 )
  (byte*) heap_head#36 ← phi( @27/(byte*) heap_head#6 )
  (byte) NUM_BUCKETS#0 ← (number) $30
  (byte~) $2 ← (byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE
  (word) malloc::size#3 ← (byte~) $2
  call malloc 
  (void*) malloc::return#5 ← (void*) malloc::return#1
  to:@28
@28: scope:[]  from @22
  (word*) SQUARES#47 ← phi( @22/(word*) SQUARES#50 )
  (byte) NUM_SQUARES#36 ← phi( @22/(byte) NUM_SQUARES#41 )
  (byte*) heap_head#27 ← phi( @22/(byte*) heap_head#2 )
  (void*) malloc::return#13 ← phi( @22/(void*) malloc::return#5 )
  (void*~) $3 ← (void*) malloc::return#13
  (byte*) heap_head#10 ← (byte*) heap_head#27
  (byte[]) BUCKET_SIZES#0 ← ((byte[])) (void*~) $3
  (byte~) $4 ← (byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER
  (word) malloc::size#4 ← (byte~) $4
  call malloc 
  (void*) malloc::return#6 ← (void*) malloc::return#1
  to:@29
@29: scope:[]  from @28
  (word*) SQUARES#39 ← phi( @28/(word*) SQUARES#47 )
  (byte) NUM_SQUARES#28 ← phi( @28/(byte) NUM_SQUARES#36 )
  (byte*) heap_head#28 ← phi( @28/(byte*) heap_head#2 )
  (void*) malloc::return#14 ← phi( @28/(void*) malloc::return#6 )
  (void*~) $5 ← (void*) malloc::return#14
  (byte*) heap_head#11 ← (byte*) heap_head#28
  (word*[]) BUCKETS#0 ← ((word*[])) (void*~) $5
  (byte~) $6 ← (byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE
  (word) malloc::size#5 ← (byte~) $6
  call malloc 
  (void*) malloc::return#7 ← (void*) malloc::return#1
  to:@30
@30: scope:[]  from @29
  (word*) SQUARES#34 ← phi( @29/(word*) SQUARES#39 )
  (byte) NUM_SQUARES#23 ← phi( @29/(byte) NUM_SQUARES#28 )
  (byte*) heap_head#29 ← phi( @29/(byte*) heap_head#2 )
  (void*) malloc::return#15 ← phi( @29/(void*) malloc::return#7 )
  (void*~) $7 ← (void*) malloc::return#15
  (byte*) heap_head#12 ← (byte*) heap_head#29
  (byte[]) BUCKET_IDX#0 ← ((byte[])) (void*~) $7
  to:@25
init_buckets: scope:[init_buckets]  from main::@35
  (byte*) heap_head#76 ← phi( main::@35/(byte*) heap_head#41 )
  (byte*) init_buckets::screen#6 ← phi( main::@35/(byte*) init_buckets::screen#0 )
  (number~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (number) 1
  (byte) init_buckets::i#0 ← (byte) 0
  to:init_buckets::@1
init_buckets::@1: scope:[init_buckets]  from init_buckets init_buckets::@1
  (byte*) heap_head#70 ← phi( init_buckets/(byte*) heap_head#76 init_buckets::@1/(byte*) heap_head#70 )
  (byte*) init_buckets::screen#4 ← phi( init_buckets/(byte*) init_buckets::screen#6 init_buckets::@1/(byte*) init_buckets::screen#4 )
  (byte) init_buckets::i#2 ← phi( init_buckets/(byte) init_buckets::i#0 init_buckets::@1/(byte) init_buckets::i#1 )
  *((byte[]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (number) 0
  (byte) init_buckets::i#1 ← (byte) init_buckets::i#2 + rangenext(0,init_buckets::$0)
  (bool~) init_buckets::$1 ← (byte) init_buckets::i#1 != rangelast(0,init_buckets::$0)
  if((bool~) init_buckets::$1) goto init_buckets::@1
  to:init_buckets::@2
init_buckets::@2: scope:[init_buckets]  from init_buckets::@1
  (byte*) heap_head#64 ← phi( init_buckets::@1/(byte*) heap_head#70 )
  (byte*) init_buckets::screen#1 ← phi( init_buckets::@1/(byte*) init_buckets::screen#4 )
  (byte*) init_buckets::dist#0 ← (byte*) init_buckets::screen#1
  (word) init_buckets::i1#0 ← (word) 0
  to:init_buckets::@3
init_buckets::@3: scope:[init_buckets]  from init_buckets::@2 init_buckets::@3
  (byte*) init_buckets::screen#11 ← phi( init_buckets::@2/(byte*) init_buckets::screen#1 init_buckets::@3/(byte*) init_buckets::screen#11 )
  (byte*) heap_head#58 ← phi( init_buckets::@2/(byte*) heap_head#64 init_buckets::@3/(byte*) heap_head#58 )
  (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) init_buckets::i1#0 init_buckets::@3/(word) init_buckets::i1#1 )
  (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*) init_buckets::dist#0 init_buckets::@3/(byte*) init_buckets::dist#1 )
  *((byte[]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[]) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4))
  (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4
  (word) init_buckets::i1#1 ← (word) init_buckets::i1#2 + rangenext(0,$3e7)
  (bool~) init_buckets::$2 ← (word) init_buckets::i1#1 != rangelast(0,$3e7)
  if((bool~) init_buckets::$2) goto init_buckets::@3
  to:init_buckets::@4
init_buckets::@4: scope:[init_buckets]  from init_buckets::@3
  (byte*) init_buckets::screen#10 ← phi( init_buckets::@3/(byte*) init_buckets::screen#11 )
  (byte*) heap_head#51 ← phi( init_buckets::@3/(byte*) heap_head#58 )
  (number~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (number) 1
  (word) init_buckets::i2#0 ← (word) 0
  to:init_buckets::@5
init_buckets::@5: scope:[init_buckets]  from init_buckets::@11 init_buckets::@4
  (byte*) init_buckets::screen#9 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 init_buckets::@4/(byte*) init_buckets::screen#10 )
  (byte*) heap_head#37 ← phi( init_buckets::@11/(byte*) heap_head#13 init_buckets::@4/(byte*) heap_head#51 )
  (word) init_buckets::i2#2 ← phi( init_buckets::@11/(word) init_buckets::i2#1 init_buckets::@4/(word) init_buckets::i2#0 )
  (byte~) init_buckets::$4 ← *((byte[]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER
  (word) malloc::size#6 ← (byte~) init_buckets::$4
  call malloc 
  (void*) malloc::return#8 ← (void*) malloc::return#1
  to:init_buckets::@11
init_buckets::@11: scope:[init_buckets]  from init_buckets::@5
  (byte*) init_buckets::screen#8 ← phi( init_buckets::@5/(byte*) init_buckets::screen#9 )
  (word) init_buckets::i2#3 ← phi( init_buckets::@5/(word) init_buckets::i2#2 )
  (byte*) heap_head#30 ← phi( init_buckets::@5/(byte*) heap_head#2 )
  (void*) malloc::return#16 ← phi( init_buckets::@5/(void*) malloc::return#8 )
  (void*~) init_buckets::$5 ← (void*) malloc::return#16
  (byte*) heap_head#13 ← (byte*) heap_head#30
  (word~) init_buckets::$12 ← (word) init_buckets::i2#3 * (const byte) SIZEOF_POINTER
  *((word*[]) BUCKETS#0 + (word~) init_buckets::$12) ← ((word*)) (void*~) init_buckets::$5
  (word) init_buckets::i2#1 ← (word) init_buckets::i2#3 + rangenext(0,init_buckets::$3)
  (bool~) init_buckets::$6 ← (word) init_buckets::i2#1 != rangelast(0,init_buckets::$3)
  if((bool~) init_buckets::$6) goto init_buckets::@5
  to:init_buckets::@6
init_buckets::@6: scope:[init_buckets]  from init_buckets::@11
  (byte*) heap_head#65 ← phi( init_buckets::@11/(byte*) heap_head#13 )
  (byte*) init_buckets::screen#7 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 )
  (number~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (number) 1
  (byte) init_buckets::i3#0 ← (byte) 0
  to:init_buckets::@7
init_buckets::@7: scope:[init_buckets]  from init_buckets::@6 init_buckets::@7
  (byte*) heap_head#59 ← phi( init_buckets::@6/(byte*) heap_head#65 init_buckets::@7/(byte*) heap_head#59 )
  (byte*) init_buckets::screen#5 ← phi( init_buckets::@6/(byte*) init_buckets::screen#7 init_buckets::@7/(byte*) init_buckets::screen#5 )
  (byte) init_buckets::i3#2 ← phi( init_buckets::@6/(byte) init_buckets::i3#0 init_buckets::@7/(byte) init_buckets::i3#1 )
  *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (number) 0
  (byte) init_buckets::i3#1 ← (byte) init_buckets::i3#2 + rangenext(0,init_buckets::$7)
  (bool~) init_buckets::$8 ← (byte) init_buckets::i3#1 != rangelast(0,init_buckets::$7)
  if((bool~) init_buckets::$8) goto init_buckets::@7
  to:init_buckets::@8
init_buckets::@8: scope:[init_buckets]  from init_buckets::@7
  (byte*) heap_head#52 ← phi( init_buckets::@7/(byte*) heap_head#59 )
  (byte*) init_buckets::screen#2 ← phi( init_buckets::@7/(byte*) init_buckets::screen#5 )
  (byte*) init_buckets::dist#2 ← (byte*) init_buckets::screen#2
  (word) init_buckets::i4#0 ← (word) 0
  to:init_buckets::@9
init_buckets::@9: scope:[init_buckets]  from init_buckets::@8 init_buckets::@9
  (byte*) heap_head#43 ← phi( init_buckets::@8/(byte*) heap_head#52 init_buckets::@9/(byte*) heap_head#43 )
  (word) init_buckets::i4#2 ← phi( init_buckets::@8/(word) init_buckets::i4#0 init_buckets::@9/(word) init_buckets::i4#1 )
  (byte*) init_buckets::screen#3 ← phi( init_buckets::@8/(byte*) init_buckets::screen#2 init_buckets::@9/(byte*) init_buckets::screen#3 )
  (byte*) init_buckets::dist#5 ← phi( init_buckets::@8/(byte*) init_buckets::dist#2 init_buckets::@9/(byte*) init_buckets::dist#3 )
  (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5)
  (word~) init_buckets::$9 ← ((word)) (byte) init_buckets::distance#0
  (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER
  (word*) init_buckets::bucket#0 ← *((word*[]) BUCKETS#0 + (word~) init_buckets::$13)
  (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#3
  (byte~) init_buckets::$14 ← *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD
  *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10
  *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
  (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5
  (word) init_buckets::i4#1 ← (word) init_buckets::i4#2 + rangenext(0,$3e7)
  (bool~) init_buckets::$11 ← (word) init_buckets::i4#1 != rangelast(0,$3e7)
  if((bool~) init_buckets::$11) goto init_buckets::@9
  to:init_buckets::@return
init_buckets::@return: scope:[init_buckets]  from init_buckets::@9
  (byte*) heap_head#31 ← phi( init_buckets::@9/(byte*) heap_head#43 )
  (byte*) heap_head#14 ← (byte*) heap_head#31
  return 
  to:@return
init_angle_screen: scope:[init_angle_screen]  from main::@34
  (byte*) init_angle_screen::screen#1 ← phi( main::@34/(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
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#23 ← phi( main/(word*) SQUARES#21 )
  (byte*) heap_head#44 ← phi( main/(byte*) heap_head#40 )
  (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#52 ← 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#32 ← phi( init_dist_screen/(byte*) heap_head#4 )
  (byte*) heap_head#15 ← (byte*) heap_head#32
  (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#77 ← phi( init_dist_screen::@19/(byte*) heap_head#15 init_dist_screen::@7/(byte*) heap_head#45 )
  (byte) NUM_SQUARES#47 ← phi( init_dist_screen::@19/(byte) NUM_SQUARES#52 init_dist_screen::@7/(byte) NUM_SQUARES#16 )
  (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#24 )
  (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#71 ← phi( init_dist_screen::@1/(byte*) heap_head#77 )
  (byte) NUM_SQUARES#42 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#47 )
  (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#29 ← 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#72 ← phi( init_dist_screen::@1/(byte*) heap_head#77 )
  (byte) NUM_SQUARES#43 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#47 )
  (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#30 ← 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#66 ← phi( init_dist_screen::@2/(byte*) heap_head#71 init_dist_screen::@3/(byte*) heap_head#72 )
  (byte) NUM_SQUARES#37 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#42 init_dist_screen::@3/(byte) NUM_SQUARES#43 )
  (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#29 init_dist_screen::@3/(word*) SQUARES#30 )
  (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#60 ← phi( init_dist_screen::@4/(byte*) heap_head#66 )
  (byte) NUM_SQUARES#29 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#37 )
  (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#31 ← phi( init_dist_screen::@20/(word*) SQUARES#41 init_dist_screen::@22/(word*) SQUARES#42 )
  (byte*) heap_head#53 ← phi( init_dist_screen::@20/(byte*) heap_head#60 init_dist_screen::@22/(byte*) heap_head#61 )
  (byte) NUM_SQUARES#21 ← 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#83 ← phi( init_dist_screen::@5/(byte*) heap_head#53 )
  (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#38 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#21 )
  (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#31 )
  (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#24 ← phi( init_dist_screen::@5/(word*) SQUARES#31 )
  (byte*) heap_head#45 ← phi( init_dist_screen::@5/(byte*) heap_head#53 )
  (byte) NUM_SQUARES#16 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#21 )
  (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#78 ← phi( init_dist_screen::@6/(byte*) heap_head#83 )
  (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#38 )
  (word) init_dist_screen::yds#3 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#5 )
  (word*) SQUARES#32 ← 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#79 ← phi( init_dist_screen::@6/(byte*) heap_head#83 )
  (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#38 )
  (word) init_dist_screen::yds#4 ← 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#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#73 ← phi( init_dist_screen::@8/(byte*) heap_head#78 init_dist_screen::@9/(byte*) heap_head#79 )
  (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#22 ← 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#32 init_dist_screen::@9/(word*) SQUARES#33 )
  (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#67 ← phi( init_dist_screen::@10/(byte*) heap_head#73 )
  (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#22 )
  (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#61 ← phi( init_dist_screen::@21/(byte*) heap_head#67 )
  (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#24 )
  (byte*) heap_head#33 ← phi( init_dist_screen::@7/(byte*) heap_head#45 )
  (byte) NUM_SQUARES#11 ← phi( init_dist_screen::@7/(byte) NUM_SQUARES#16 )
  (byte) NUM_SQUARES#4 ← (byte) NUM_SQUARES#11
  (byte*) heap_head#16 ← (byte*) heap_head#33
  (word*) SQUARES#6 ← (word*) SQUARES#15
  return 
  to:@return
@25: scope:[]  from @30
  (word*) SQUARES#25 ← phi( @30/(word*) SQUARES#34 )
  (byte*) heap_head#46 ← phi( @30/(byte*) heap_head#12 )
  (byte) NUM_SQUARES#17 ← phi( @30/(byte) NUM_SQUARES#23 )
  call main 
  to:@31
@31: scope:[]  from @25
  (word*) SQUARES#16 ← phi( @25/(word*) SQUARES#4 )
  (byte*) heap_head#34 ← phi( @25/(byte*) heap_head#9 )
  (byte) NUM_SQUARES#12 ← phi( @25/(byte) NUM_SQUARES#2 )
  (byte) NUM_SQUARES#5 ← (byte) NUM_SQUARES#12
  (byte*) heap_head#17 ← (byte*) heap_head#34
  (word*) SQUARES#7 ← (word*) SQUARES#16
  to:@end
@end: scope:[]  from @31

SYMBOL TABLE SSA
(void*~) $0
(void*~) $1
(byte~) $2
(void*~) $3
(byte~) $4
(void*~) $5
(byte~) $6
(void*~) $7
(label) @16
(label) @19
(label) @21
(label) @22
(label) @25
(label) @26
(label) @27
(label) @28
(label) @29
(label) @30
(label) @31
(label) @8
(label) @begin
(label) @end
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(word*[]) BUCKETS
(word*[]) BUCKETS#0
(byte[]) BUCKET_IDX
(byte[]) BUCKET_IDX#0
(byte[]) BUCKET_SIZES
(byte[]) BUCKET_SIZES#0
(byte*) COLS
(byte*) COLS#0
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0
(byte) CORDIC_ITERATIONS_16
(byte) CORDIC_ITERATIONS_16#0
(byte) FILL_CHAR
(byte) FILL_CHAR#0
(byte*) HEAP_TOP
(byte*) HEAP_TOP#0
(byte) NUM_BUCKETS
(byte) NUM_BUCKETS#0
(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#42
(byte) NUM_SQUARES#43
(byte) NUM_SQUARES#44
(byte) NUM_SQUARES#45
(byte) NUM_SQUARES#46
(byte) NUM_SQUARES#47
(byte) NUM_SQUARES#48
(byte) NUM_SQUARES#49
(byte) NUM_SQUARES#5
(byte) NUM_SQUARES#50
(byte) NUM_SQUARES#51
(byte) NUM_SQUARES#52
(byte) NUM_SQUARES#53
(byte) NUM_SQUARES#54
(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*) RASTER
(byte*) RASTER#0
(byte[]) SCREEN_ANGLE
(byte[]) SCREEN_ANGLE#0
(byte[]) SCREEN_DIST
(byte[]) SCREEN_DIST#0
(byte*) SCREEN_FILL
(byte*) SCREEN_FILL#0
(const byte) SIZEOF_BYTE = (byte) 1
(const byte) SIZEOF_POINTER = (byte) 2
(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#47
(word*) SQUARES#48
(word*) SQUARES#49
(word*) SQUARES#5
(word*) SQUARES#50
(word*) SQUARES#51
(word*) SQUARES#52
(word*) SQUARES#53
(word*) SQUARES#54
(word*) SQUARES#55
(word*) SQUARES#56
(word*) SQUARES#57
(word*) SQUARES#58
(word*) SQUARES#59
(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
(number~) 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
(bool~) atan2_16::$22
(byte~) atan2_16::$23
(byte~) atan2_16::$24
(bool~) atan2_16::$25
(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#53
(byte*) heap_head#54
(byte*) heap_head#55
(byte*) heap_head#56
(byte*) heap_head#57
(byte*) heap_head#58
(byte*) heap_head#59
(byte*) heap_head#6
(byte*) heap_head#60
(byte*) heap_head#61
(byte*) heap_head#62
(byte*) heap_head#63
(byte*) heap_head#64
(byte*) heap_head#65
(byte*) heap_head#66
(byte*) heap_head#67
(byte*) heap_head#68
(byte*) heap_head#69
(byte*) heap_head#7
(byte*) heap_head#70
(byte*) heap_head#71
(byte*) heap_head#72
(byte*) heap_head#73
(byte*) heap_head#74
(byte*) heap_head#75
(byte*) heap_head#76
(byte*) heap_head#77
(byte*) heap_head#78
(byte*) heap_head#79
(byte*) heap_head#8
(byte*) heap_head#80
(byte*) heap_head#81
(byte*) heap_head#82
(byte*) heap_head#83
(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_buckets((byte*) init_buckets::screen)
(number~) init_buckets::$0
(bool~) init_buckets::$1
(word~) init_buckets::$10
(bool~) init_buckets::$11
(word~) init_buckets::$12
(word~) init_buckets::$13
(byte~) init_buckets::$14
(bool~) init_buckets::$2
(number~) init_buckets::$3
(byte~) init_buckets::$4
(void*~) init_buckets::$5
(bool~) init_buckets::$6
(number~) init_buckets::$7
(bool~) init_buckets::$8
(word~) init_buckets::$9
(label) init_buckets::@1
(label) init_buckets::@11
(label) init_buckets::@2
(label) init_buckets::@3
(label) init_buckets::@4
(label) init_buckets::@5
(label) init_buckets::@6
(label) init_buckets::@7
(label) init_buckets::@8
(label) init_buckets::@9
(label) init_buckets::@return
(word*) init_buckets::bucket
(word*) init_buckets::bucket#0
(byte*) init_buckets::dist
(byte*) init_buckets::dist#0
(byte*) init_buckets::dist#1
(byte*) init_buckets::dist#2
(byte*) init_buckets::dist#3
(byte*) init_buckets::dist#4
(byte*) init_buckets::dist#5
(byte) init_buckets::distance
(byte) init_buckets::distance#0
(byte) init_buckets::i
(byte) init_buckets::i#0
(byte) init_buckets::i#1
(byte) init_buckets::i#2
(word) init_buckets::i1
(word) init_buckets::i1#0
(word) init_buckets::i1#1
(word) init_buckets::i1#2
(word) init_buckets::i2
(word) init_buckets::i2#0
(word) init_buckets::i2#1
(word) init_buckets::i2#2
(word) init_buckets::i2#3
(byte) init_buckets::i3
(byte) init_buckets::i3#0
(byte) init_buckets::i3#1
(byte) init_buckets::i3#2
(word) init_buckets::i4
(word) init_buckets::i4#0
(word) init_buckets::i4#1
(word) init_buckets::i4#2
(byte*) init_buckets::screen
(byte*) init_buckets::screen#0
(byte*) init_buckets::screen#1
(byte*) init_buckets::screen#10
(byte*) init_buckets::screen#11
(byte*) init_buckets::screen#2
(byte*) init_buckets::screen#3
(byte*) init_buckets::screen#4
(byte*) init_buckets::screen#5
(byte*) init_buckets::screen#6
(byte*) init_buckets::screen#7
(byte*) init_buckets::screen#8
(byte*) init_buckets::screen#9
(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()
(byte*~) main::$10
(bool~) main::$11
(bool~) main::$12
(bool~) main::$13
(bool~) main::$14
(byte*~) main::$15
(bool~) main::$16
(bool~) main::$17
(byte*~) main::$20
(byte~) main::$21
(byte~) main::$22
(bool~) main::$3
(bool~) main::$4
(bool~) main::$5
(bool~) main::$6
(byte*~) main::$7
(bool~) main::$8
(bool~) main::$9
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@15
(label) main::@16
(label) main::@18
(label) main::@21
(label) main::@25
(label) main::@28
(label) main::@29
(label) main::@34
(label) main::@35
(label) main::@36
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(byte*) main::angle
(byte*) main::angle#0
(byte*) main::angle#1
(word[]) main::bucket
(word[]) main::bucket#0
(byte) main::bucket_idx
(byte) main::bucket_idx#0
(byte) main::bucket_idx#1
(byte) main::bucket_idx#10
(byte) main::bucket_idx#11
(byte) main::bucket_idx#12
(byte) main::bucket_idx#13
(byte) main::bucket_idx#14
(byte) main::bucket_idx#2
(byte) main::bucket_idx#3
(byte) main::bucket_idx#4
(byte) main::bucket_idx#5
(byte) main::bucket_idx#6
(byte) main::bucket_idx#7
(byte) main::bucket_idx#8
(byte) main::bucket_idx#9
(byte) main::bucket_size
(byte) main::bucket_size#0
(byte) main::bucket_size#1
(byte) main::bucket_size#2
(byte) main::bucket_size#3
(byte) main::bucket_size#4
(byte) main::bucket_size#5
(byte) main::bucket_size#6
(byte*) main::fill
(byte*) main::fill#0
(byte*) main::fill1
(byte*) main::fill1#0
(byte) main::i
(byte) main::i#0
(byte) main::i#1
(byte) main::i#2
(byte) main::i#3
(byte) main::i#4
(byte) main::i#5
(byte) main::i#6
(byte) main::min_angle
(byte) main::min_angle#0
(byte) main::min_angle#1
(byte) main::min_angle#2
(byte) main::min_angle#3
(byte) main::min_angle#4
(byte) main::min_angle#5
(word) main::min_offset
(word) main::min_offset#0
(word) main::min_offset#1
(word) main::min_offset#2
(word) main::min_offset#3
(word) main::min_offset#4
(word) main::min_offset#5
(word) main::min_offset#6
(word) main::min_offset#7
(word) main::offset
(word) main::offset#0
(word) main::offset#1
(word) main::offset#2
(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#10
(void*) malloc::return#11
(void*) malloc::return#12
(void*) malloc::return#13
(void*) malloc::return#14
(void*) malloc::return#15
(void*) malloc::return#16
(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
(void*) malloc::return#9
(word) malloc::size
(word) malloc::size#0
(word) malloc::size#1
(word) malloc::size#2
(word) malloc::size#3
(word) malloc::size#4
(word) malloc::size#5
(word) malloc::size#6
(word) malloc::size#7
(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 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 (unumber) $f in (byte) CORDIC_ITERATIONS_16#0 ← (number) $f
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 (unumber) 1 in (number~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (number) 1
Adding number conversion cast (unumber) atan2_16::$16 in (number~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (unumber)(number) 1
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$17 ← (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::$19 ← (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::$25 ← (number) 0 != (byte) atan2_16::shift#4
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$21 ← (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 (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) 0 in (byte) main::bucket_idx#0 ← (number) 0
Adding number conversion cast (unumber) $ff in (bool~) main::$3 ← *((byte*) RASTER#0) != (number) $ff
Adding number conversion cast (unumber) 0 in (bool~) main::$4 ← (byte) main::bucket_size#0 > (number) 0
Adding number conversion cast (unumber) $ff in (byte) main::min_angle#0 ← (number) $ff
Adding number conversion cast (unumber) $ffff in (word) main::min_offset#0 ← (number) $ffff
Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0
Adding number conversion cast (unumber) $ffff in (bool~) main::$13 ← (word) main::min_offset#2 != (number) $ffff
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$20 ← (byte*) COLS#0 + (number) $3e7
Adding number conversion cast (unumber) $30 in (byte) NUM_BUCKETS#0 ← (number) $30
Adding number conversion cast (unumber) 1 in (number~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (number) 1
Adding number conversion cast (unumber) init_buckets::$0 in (number~) init_buckets::$0 ← (byte) NUM_BUCKETS#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 0 in *((byte[]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (number) 0
Adding number conversion cast (unumber) 1 in (number~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (number) 1
Adding number conversion cast (unumber) init_buckets::$3 in (number~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 1 in (number~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (number) 1
Adding number conversion cast (unumber) init_buckets::$7 in (number~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 0 in *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (number) 0
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#66 ← phi( init_dist_screen::@2/(byte*) heap_head#71 init_dist_screen::@3/(byte*) heap_head#72 )
  (byte) NUM_SQUARES#37 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#42 init_dist_screen::@3/(byte) NUM_SQUARES#43 )
  (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#29 init_dist_screen::@3/(word*) SQUARES#30 )
  (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#73 ← phi( init_dist_screen::@8/(byte*) heap_head#78 init_dist_screen::@9/(byte*) heap_head#79 )
  (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#22 ← 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#32 init_dist_screen::@9/(word*) SQUARES#33 )
  (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 (byte*) RASTER#0 ← (byte*)(number) $d012
Inlining cast (byte*) BORDERCOL#0 ← (byte*)(number) $d020
Inlining cast (byte*) COLS#0 ← (byte*)(number) $d800
Inlining cast (byte*) HEAP_TOP#0 ← (byte*)(number) $a000
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 (byte) CORDIC_ITERATIONS_16#0 ← (unumber)(number) $f
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 (byte*) SCREEN_FILL#0 ← (byte*)(number) $400
Inlining cast (byte) main::bucket_idx#0 ← (unumber)(number) 0
Inlining cast (byte) main::min_angle#0 ← (unumber)(number) $ff
Inlining cast (word) main::min_offset#0 ← (unumber)(number) $ffff
Inlining cast (byte) main::i#0 ← (unumber)(number) 0
Inlining cast (byte) NUM_BUCKETS#0 ← (unumber)(number) $30
Inlining cast (byte[]) BUCKET_SIZES#0 ← (byte[])(void*~) $3
Inlining cast (word*[]) BUCKETS#0 ← (word*[])(void*~) $5
Inlining cast (byte[]) BUCKET_IDX#0 ← (byte[])(void*~) $7
Inlining cast *((byte[]) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (unumber)(number) 0
Inlining cast *((word*[]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5
Inlining cast *((byte[]) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (unumber)(number) 0
Inlining cast (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0
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*) 53266
Simplifying constant pointer cast (byte*) 53280
Simplifying constant pointer cast (byte*) 55296
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 $f
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 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 0
Simplifying constant integer cast $8000
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Simplifying constant integer cast $ff
Simplifying constant integer cast 0
Simplifying constant integer cast $ff
Simplifying constant integer cast $ffff
Simplifying constant integer cast 0
Simplifying constant integer cast $ffff
Simplifying constant integer cast $3e7
Simplifying constant integer cast $30
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $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 unsigned number type (byte) $f
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
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 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 (byte) 0
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (word) $ffff
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $ffff
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
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 byte in (unumber~) atan2_16::$16 ← (byte) CORDIC_ITERATIONS_16#0 - (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_buckets::$0 ← (byte) NUM_BUCKETS#0 - (byte) 1
Inferred type updated to byte in (unumber~) init_buckets::$3 ← (byte) NUM_BUCKETS#0 - (byte) 1
Inferred type updated to byte in (unumber~) init_buckets::$7 ← (byte) NUM_BUCKETS#0 - (byte) 1
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 [28] (bool~) bsearch16u::$12 ← (signed word) bsearch16u::result#0 != (signed byte) 0 from [27] (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (signed byte) 0
Inversing boolean not [35] (bool~) bsearch16u::$14 ← (signed word) bsearch16u::result#1 <= (signed byte) 0 from [34] (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (signed byte) 0
Inversing boolean not [136] (bool~) atan2_16::$18 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [135] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 == (signed byte) 0
Inversing boolean not [145] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [144] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0
Inversing boolean not [156] (bool~) atan2_16::$20 ← (byte) 0 == (byte) atan2_16::shift#4 from [155] (bool~) atan2_16::$25 ← (byte) 0 != (byte) atan2_16::shift#4
Inversing boolean not [180] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [179] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0
Inversing boolean not [237] (bool~) main::$5 ← (byte) main::bucket_size#0 <= (byte) 0 from [236] (bool~) main::$4 ← (byte) main::bucket_size#0 > (byte) 0
Inversing boolean not [242] (bool~) main::$17 ← (byte) main::bucket_idx#1 != (byte) NUM_BUCKETS#0 from [241] (bool~) main::$16 ← (byte) main::bucket_idx#1 == (byte) NUM_BUCKETS#0
Inversing boolean not [257] (bool~) main::$9 ← *((byte*) main::fill#0) == (byte) FILL_CHAR#0 from [256] (bool~) main::$8 ← *((byte*) main::fill#0) != (byte) FILL_CHAR#0
Inversing boolean not [261] (bool~) main::$14 ← (word) main::min_offset#2 == (word) $ffff from [260] (bool~) main::$13 ← (word) main::min_offset#2 != (word) $ffff
Inversing boolean not [269] (bool~) main::$12 ← *((byte*) main::angle#0) > (byte) main::min_angle#2 from [268] (bool~) main::$11 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) HEAP_TOP#0 = (byte*) heap_head#0 (byte*) heap_head#54 (byte*) heap_head#47 (byte*) heap_head#35 
Alias (byte*) malloc::mem#0 = (byte*~) malloc::$0 
Alias (void*) malloc::return#0 = (void*) malloc::return#9 (void*) malloc::return#1 
Alias (byte*) heap_head#1 = (byte*) heap_head#19 (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 (word) malloc::size#0 = (byte~) init_squares::$0 
Alias (void*) malloc::return#10 = (void*) malloc::return#2 
Alias (byte) NUM_SQUARES#6 = (byte) NUM_SQUARES#7 
Alias (byte*) heap_head#20 = (byte*) heap_head#3 
Alias (byte*) heap_head#21 = (byte*) heap_head#39 (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#54 (byte) NUM_SQUARES#53 (byte) NUM_SQUARES#48 (byte) NUM_SQUARES#46 (byte) NUM_SQUARES#41 (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#17 
Alias (word*) SQUARES#0 = (word*) SQUARES#59 (word*) SQUARES#58 (word*) SQUARES#54 (word*) SQUARES#53 (word*) SQUARES#50 (word*) SQUARES#47 (word*) SQUARES#39 (word*) SQUARES#34 (word*) SQUARES#25 
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#11 = (void*) malloc::return#3 
Alias (byte*) heap_head#22 = (byte*) heap_head#5 
Alias (void*) malloc::return#12 = (void*) malloc::return#4 
Alias (byte*) heap_head#23 = (byte*) heap_head#6 (byte*) heap_head#36 
Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#26 
Alias (byte*) heap_head#24 = (byte*) heap_head#7 (byte*) heap_head#41 
Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#44 (word*) SQUARES#37 
Alias (byte*) heap_head#25 = (byte*) heap_head#8 
Alias (byte) main::bucket_idx#11 = (byte) main::bucket_idx#2 (byte) main::bucket_idx#4 
Alias (byte) NUM_SQUARES#35 = (byte) NUM_SQUARES#39 (byte) NUM_SQUARES#45 
Alias (byte*) heap_head#63 = (byte*) heap_head#68 (byte*) heap_head#75 
Alias (word*) SQUARES#46 = (word*) SQUARES#48 (word*) SQUARES#52 
Alias (byte) main::bucket_size#0 = (byte) main::bucket_size#3 
Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#5 (byte) main::i#6 
Alias (byte) main::min_angle#2 = (byte) main::min_angle#3 (byte) main::min_angle#4 
Alias (byte) main::bucket_size#1 = (byte) main::bucket_size#6 (byte) main::bucket_size#4 (byte) main::bucket_size#5 
Alias (word) main::min_offset#2 = (word) main::min_offset#7 (word) main::min_offset#4 (word) main::min_offset#6 (word) main::min_offset#3 
Alias (byte) main::bucket_idx#12 = (byte) main::bucket_idx#14 (byte) main::bucket_idx#7 (byte) main::bucket_idx#5 (byte) main::bucket_idx#13 (byte) main::bucket_idx#8 
Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#51 (byte) NUM_SQUARES#40 (byte) NUM_SQUARES#34 (byte) NUM_SQUARES#49 (byte) NUM_SQUARES#50 
Alias (byte*) heap_head#55 = (byte*) heap_head#82 (byte*) heap_head#69 (byte*) heap_head#62 (byte*) heap_head#80 (byte*) heap_head#81 
Alias (word*) SQUARES#35 = (word*) SQUARES#57 (word*) SQUARES#49 (word*) SQUARES#45 (word*) SQUARES#55 (word*) SQUARES#56 
Alias (byte*) main::fill#0 = (byte*~) main::$7 
Alias (word) main::offset#0 = (word) main::offset#1 (word) main::offset#2 (word) main::min_offset#1 
Alias (byte*) main::angle#0 = (byte*~) main::$10 (byte*) main::angle#1 
Alias (byte*) main::fill1#0 = (byte*~) main::$15 
Alias (byte) main::bucket_idx#1 = (byte) main::bucket_idx#9 
Alias (byte) NUM_SQUARES#19 = (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#27 
Alias (byte*) heap_head#49 = (byte*) heap_head#56 (byte*) heap_head#57 
Alias (word*) SQUARES#27 = (word*) SQUARES#36 (word*) SQUARES#38 
Alias (byte) NUM_SQUARES#10 = (byte) NUM_SQUARES#20 (byte) NUM_SQUARES#15 (byte) NUM_SQUARES#2 
Alias (byte*) heap_head#26 = (byte*) heap_head#50 (byte*) heap_head#42 (byte*) heap_head#9 
Alias (word*) SQUARES#13 = (word*) SQUARES#28 (word*) SQUARES#22 (word*) SQUARES#4 
Alias (word) malloc::size#3 = (byte~) $2 
Alias (void*) malloc::return#13 = (void*) malloc::return#5 
Alias (byte*) heap_head#10 = (byte*) heap_head#27 
Alias (word) malloc::size#4 = (byte~) $4 
Alias (void*) malloc::return#14 = (void*) malloc::return#6 
Alias (byte*) heap_head#11 = (byte*) heap_head#28 
Alias (word) malloc::size#5 = (byte~) $6 
Alias (void*) malloc::return#15 = (void*) malloc::return#7 
Alias (byte*) heap_head#12 = (byte*) heap_head#29 (byte*) heap_head#46 
Alias (byte*) init_buckets::screen#1 = (byte*) init_buckets::screen#4 (byte*) init_buckets::dist#0 
Alias (byte*) heap_head#64 = (byte*) heap_head#70 
Alias (byte*) heap_head#51 = (byte*) heap_head#58 
Alias (byte*) init_buckets::screen#10 = (byte*) init_buckets::screen#11 
Alias (word) malloc::size#6 = (byte~) init_buckets::$4 
Alias (void*) malloc::return#16 = (void*) malloc::return#8 
Alias (word) init_buckets::i2#2 = (word) init_buckets::i2#3 
Alias (byte*) init_buckets::screen#7 = (byte*) init_buckets::screen#8 (byte*) init_buckets::screen#9 
Alias (byte*) heap_head#13 = (byte*) heap_head#30 (byte*) heap_head#65 
Alias (byte*) init_buckets::screen#2 = (byte*) init_buckets::screen#5 (byte*) init_buckets::dist#2 
Alias (byte*) heap_head#52 = (byte*) heap_head#59 
Alias (byte*) heap_head#14 = (byte*) heap_head#31 (byte*) heap_head#43 
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#52 
Alias (byte*) heap_head#15 = (byte*) heap_head#32 
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#29 = (word*) SQUARES#40 (word*) SQUARES#30 
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#42 = (byte) NUM_SQUARES#47 (byte) NUM_SQUARES#43 
Alias (byte*) heap_head#71 = (byte*) heap_head#77 (byte*) heap_head#72 
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#37 
Alias (byte*) heap_head#60 = (byte*) heap_head#66 
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#31 (word*) SQUARES#24 (word*) SQUARES#32 (word*) SQUARES#33 (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#38 (byte) NUM_SQUARES#21 (byte) NUM_SQUARES#16 (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#16 = (byte*) heap_head#83 (byte*) heap_head#53 (byte*) heap_head#45 (byte*) heap_head#78 (byte*) heap_head#79 (byte*) heap_head#33 
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#22 (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#61 = (byte*) heap_head#67 (byte*) heap_head#73 
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) NUM_SQUARES#12 = (byte) NUM_SQUARES#5 
Alias (byte*) heap_head#17 = (byte*) heap_head#34 
Alias (word*) SQUARES#16 = (word*) SQUARES#7 
Successful SSA optimization Pass2AliasElimination
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::i#2 = (byte) main::i#4 
Alias (byte) main::bucket_size#1 = (byte) main::bucket_size#2 
Alias (byte) main::bucket_idx#10 = (byte) main::bucket_idx#12 
Alias (byte) NUM_SQUARES#24 = (byte) NUM_SQUARES#44 
Alias (byte*) heap_head#55 = (byte*) heap_head#74 
Alias (word*) SQUARES#35 = (word*) SQUARES#51 
Alias (word*) SQUARES#19 = (word*) SQUARES#29 
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#42 
Alias (byte*) heap_head#60 = (byte*) heap_head#71 
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#16 = (byte*) heap_head#61 
Successful SSA optimization Pass2AliasElimination
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#38 (byte*) heap_head#44
Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#1
Identical Phi Values (byte*) heap_head#21 (byte*) heap_head#20
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#22 (byte*) heap_head#1
Identical Phi Values (byte*) heap_head#23 (byte*) heap_head#1
Identical Phi Values (byte) NUM_SQUARES#14 (byte) NUM_SQUARES#0
Identical Phi Values (byte*) heap_head#40 (byte*) heap_head#12
Identical Phi Values (word*) SQUARES#21 (word*) SQUARES#0
Identical Phi Values (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#11
Identical Phi Values (byte*) heap_head#24 (byte*) heap_head#16
Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15
Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#14
Identical Phi Values (byte) main::bucket_idx#11 (byte) main::bucket_idx#6
Identical Phi Values (byte) NUM_SQUARES#35 (byte) NUM_SQUARES#18
Identical Phi Values (byte*) heap_head#63 (byte*) heap_head#48
Identical Phi Values (word*) SQUARES#46 (word*) SQUARES#26
Identical Phi Values (byte) main::bucket_size#1 (byte) main::bucket_size#0
Identical Phi Values (byte) main::bucket_idx#10 (byte) main::bucket_idx#11
Identical Phi Values (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#35
Identical Phi Values (byte*) heap_head#55 (byte*) heap_head#63
Identical Phi Values (word*) SQUARES#35 (word*) SQUARES#46
Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#1
Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#1
Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#1
Identical Phi Values (byte*) init_buckets::screen#6 (byte*) init_buckets::screen#0
Identical Phi Values (byte*) heap_head#76 (byte*) heap_head#24
Identical Phi Values (byte*) init_buckets::screen#1 (byte*) init_buckets::screen#6
Identical Phi Values (byte*) heap_head#64 (byte*) heap_head#76
Identical Phi Values (byte*) heap_head#51 (byte*) heap_head#64
Identical Phi Values (byte*) init_buckets::screen#10 (byte*) init_buckets::screen#1
Identical Phi Values (byte*) init_buckets::screen#7 (byte*) init_buckets::screen#10
Identical Phi Values (byte*) heap_head#13 (byte*) heap_head#1
Identical Phi Values (byte*) init_buckets::screen#2 (byte*) init_buckets::screen#7
Identical Phi Values (byte*) heap_head#52 (byte*) heap_head#13
Identical Phi Values (byte*) init_buckets::screen#3 (byte*) init_buckets::screen#2
Identical Phi Values (byte*) heap_head#14 (byte*) heap_head#52
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#44 (byte*) heap_head#40
Identical Phi Values (word*) SQUARES#23 (word*) SQUARES#21
Identical Phi Values (byte*) init_dist_screen::screen#1 (byte*) init_dist_screen::screen#0
Identical Phi Values (byte*) heap_head#15 (byte*) heap_head#21
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#16 (byte*) heap_head#60
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#17 (byte*) heap_head#26
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) main::bucket_idx#3 (byte) main::bucket_idx#6
Identical Phi Values (byte) NUM_SQUARES#19 (byte) NUM_SQUARES#18
Identical Phi Values (byte*) heap_head#49 (byte*) heap_head#48
Identical Phi Values (word*) SQUARES#27 (word*) SQUARES#26
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#60 (byte*) heap_head#1
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (byte) NUM_SQUARES#18 (byte) NUM_SQUARES#3
Identical Phi Values (byte*) heap_head#48 (byte*) heap_head#1
Identical Phi Values (word*) SQUARES#26 (word*) SQUARES#1
Identical Phi Values (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#18
Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#48
Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#26
Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#1
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) bsearch16u::$5 [17] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7
Simple Condition (bool~) bsearch16u::$12 [29] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9
Simple Condition (bool~) bsearch16u::$0 [32] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@1
Simple Condition (bool~) bsearch16u::$14 [36] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10
Simple Condition (bool~) init_squares::$5 [81] if((byte) init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1
Simple Condition (bool~) atan2_16::$0 [114] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
Simple Condition (bool~) atan2_16::$5 [123] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
Simple Condition (bool~) atan2_16::$18 [137] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16
Simple Condition (bool~) atan2_16::$11 [146] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
Simple Condition (bool~) atan2_16::$19 [149] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19
Simple Condition (bool~) atan2_16::$20 [157] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25
Simple Condition (bool~) atan2_16::$21 [160] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26
Simple Condition (bool~) atan2_16::$22 [177] if((byte) atan2_16::i#1!=rangelast(0,atan2_16::$16)) goto atan2_16::@15
Simple Condition (bool~) atan2_16::$14 [181] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
Simple Condition (bool~) main::$3 [230] if(*((byte*) RASTER#0)!=(byte) $ff) goto main::@4
Simple Condition (bool~) main::$5 [238] if((byte) main::bucket_size#0<=(byte) 0) goto main::@7
Simple Condition (bool~) main::$17 [243] if((byte) main::bucket_idx#1!=(byte) NUM_BUCKETS#0) goto main::@21
Simple Condition (bool~) main::$6 [250] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@9
Simple Condition (bool~) main::$9 [258] if(*((byte*) main::fill#0)==(byte) FILL_CHAR#0) goto main::@11
Simple Condition (bool~) main::$14 [262] if((word) main::min_offset#2==(word) $ffff) goto main::@7
Simple Condition (bool~) main::$12 [270] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@11
Simple Condition (bool~) init_buckets::$1 [326] if((byte) init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1
Simple Condition (bool~) init_buckets::$2 [335] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3
Simple Condition (bool~) init_buckets::$6 [351] if((word) init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5
Simple Condition (bool~) init_buckets::$8 [359] if((byte) init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7
Simple Condition (bool~) init_buckets::$11 [375] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9
Simple Condition (bool~) init_angle_screen::$2 [390] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Simple Condition (bool~) init_angle_screen::$16 [427] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
Simple Condition (bool~) init_dist_screen::$3 [443] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
Simple Condition (bool~) init_dist_screen::$10 [462] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6
Simple Condition (bool~) init_dist_screen::$12 [467] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8
Simple Condition (bool~) init_dist_screen::$21 [473] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [177] if((byte) atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [45] (byte~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD
Constant right-side identified [52] (byte~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) RASTER#0 = (byte*) 53266
Constant (const byte*) BORDERCOL#0 = (byte*) 53280
Constant (const byte*) COLS#0 = (byte*) 55296
Constant (const byte*) HEAP_TOP#0 = (byte*) 40960
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 byte) CORDIC_ITERATIONS_16#0 = $f
Constant (const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2
 }}
Constant (const word) atan2_16::angle#0 = 0
Constant (const byte) atan2_16::i#0 = 0
Constant (const word) malloc::size#1 = $3e8
Constant (const word) malloc::size#2 = $3e8
Constant (const byte*) SCREEN_FILL#0 = (byte*) 1024
Constant (const byte) FILL_CHAR#0 = '*'
Constant (const byte) main::bucket_idx#0 = 0
Constant (const byte) main::min_angle#0 = $ff
Constant (const word) main::min_offset#0 = $ffff
Constant (const byte) main::i#0 = 0
Constant (const byte) NUM_BUCKETS#0 = $30
Constant (const byte) init_buckets::i#0 = 0
Constant (const word) init_buckets::i1#0 = 0
Constant (const word) init_buckets::i2#0 = 0
Constant (const byte) init_buckets::i3#0 = 0
Constant (const word) init_buckets::i4#0 = 0
Constant (const byte) init_angle_screen::y#0 = 0
Constant (const byte) init_angle_screen::x#0 = 0
Constant (const byte) init_angle_screen::xb#0 = $27
Constant (const byte) NUM_SQUARES#3 = $30
Constant (const byte) init_dist_screen::y#0 = 0
Constant (const byte) init_dist_screen::x#0 = 0
Constant (const byte) init_dist_screen::xb#0 = $27
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) bsearch16u::num#2 = NUM_SQUARES#3
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [227] if(true) goto main::@4
if() condition always true - replacing block destination [284] if(true) goto main::@29
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [333] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++
Resolved ranged comparison value [335] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8
Resolved ranged next value [373] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++
Resolved ranged comparison value [375] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8
Resolved ranged next value [425] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++
Resolved ranged comparison value [427] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d
Resolved ranged next value [471] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++
Resolved ranged comparison value [473] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d
Rewriting conditional comparison [390] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Rewriting conditional comparison [462] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6
De-inlining pointer[w] to *(pointer+w)   [340] (word) malloc::size#6 ← *((byte[]) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER
De-inlining pointer[w] to *(pointer+w)   [348] *((word*[]) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$5
De-inlining pointer[w] to *(pointer+w)   [367] (word*) init_buckets::bucket#0 ← *((word*[]) BUCKETS#0 + (word~) init_buckets::$13)
Successful SSA optimization Pass2DeInlineWordDerefIdx
Eliminating unused constant (const byte) NUM_SQUARES#0
Eliminating unused constant (const word*) SQUARES#0
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Successful SSA optimization Pass2LoopHeadConstantIdentification
Successful SSA optimization Pass2LoopHeadConstantIdentification
Successful SSA optimization Pass2LoopHeadConstantIdentification
Adding number conversion cast (unumber) $3e8 in if((word) init_buckets::i1#1!=(number) $3e8) goto init_buckets::@3
Adding number conversion cast (unumber) $3e8 in if((word) init_buckets::i4#1!=(number) $3e8) goto init_buckets::@9
Adding number conversion cast (unumber) $13+1 in if((byte) init_angle_screen::x#2<(byte) $13+(number) 1) goto init_angle_screen::@3
Adding number conversion cast (unumber) 1 in if((byte) init_angle_screen::x#2<(unumber)(byte) $13+(number) 1) goto init_angle_screen::@3
Adding number conversion cast (unumber) $d in if((byte) init_angle_screen::y#1!=(number) $d) goto init_angle_screen::@1
Adding number conversion cast (unumber) $13+1 in if((byte) init_dist_screen::x#2<(byte) $13+(number) 1) goto init_dist_screen::@6
Adding number conversion cast (unumber) 1 in if((byte) init_dist_screen::x#2<(unumber)(byte) $13+(number) 1) goto init_dist_screen::@6
Adding number conversion cast (unumber) $d in if((byte) init_dist_screen::y#1!=(number) $d) goto init_dist_screen::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Simplifying constant integer cast (byte) $13+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (byte~) init_angle_screen::$4
Simplifying constant integer cast (byte~) init_angle_screen::$7
Simplifying constant integer cast $d
Simplifying constant integer cast (byte) $13+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast $d
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $d
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $d
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte) bsearch16u::num#0 = (byte) bsearch16u::num#3 
Alias (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 
Alias (byte) bsearch16u::num#10 = (byte) bsearch16u::num#9 (byte) bsearch16u::num#11 
Alias (word*) bsearch16u::items#10 = (word*) bsearch16u::items#12 
Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#14 (word*) bsearch16u::items#13 
Alias (byte) init_angle_screen::x#1 = (byte) init_angle_screen::x#2 
Alias (byte) init_angle_screen::xb#1 = (byte) init_angle_screen::xb#2 
Alias (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#6 
Alias (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#6 
Alias (byte) init_dist_screen::x#1 = (byte) init_dist_screen::x#2 
Alias (byte) init_dist_screen::xb#1 = (byte) init_dist_screen::xb#2 
Alias (byte) init_dist_screen::x#13 = (byte) init_dist_screen::x#9 (byte) init_dist_screen::x#14 
Alias (byte) init_dist_screen::xb#12 = (byte) init_dist_screen::xb#14 (byte) init_dist_screen::xb#13 
Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#11 (byte) init_dist_screen::x#12 
Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#11 (byte) init_dist_screen::xb#9 
Successful SSA optimization Pass2AliasElimination
Alias (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#13 
Alias (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#12 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) bsearch16u::num#12 (const byte) bsearch16u::num#2
Identical Phi Values (word*) bsearch16u::items#15 (word*) bsearch16u::items#1
Identical Phi Values (byte) init_angle_screen::x#7 (const byte) init_angle_screen::x#0
Identical Phi Values (byte) init_angle_screen::xb#7 (const byte) init_angle_screen::xb#0
Identical Phi Values (byte) init_dist_screen::x#15 (const byte) init_dist_screen::x#0
Identical Phi Values (byte) init_dist_screen::xb#15 (const byte) init_dist_screen::xb#0
Successful SSA optimization Pass2IdenticalPhiElimination
Constant right-side identified [30] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD
Constant right-side identified [36] (byte~) init_squares::$2 ← (const byte) NUM_SQUARES#3 - (byte) 1
Constant right-side identified [65] (byte~) atan2_16::$16 ← (const byte) CORDIC_ITERATIONS_16#0 - (byte) 1
Constant right-side identified [139] (byte*~) main::$20 ← (const byte*) COLS#0 + (word) $3e7
Constant right-side identified [141] (word) malloc::size#3 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE
Constant right-side identified [146] (word) malloc::size#4 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_POINTER
Constant right-side identified [151] (word) malloc::size#5 ← (const byte) NUM_BUCKETS#0 * (const byte) SIZEOF_BYTE
Constant right-side identified [156] (byte~) init_buckets::$0 ← (const byte) NUM_BUCKETS#0 - (byte) 1
Constant right-side identified [166] (byte~) init_buckets::$3 ← (const byte) NUM_BUCKETS#0 - (byte) 1
Constant right-side identified [178] (byte~) init_buckets::$7 ← (const byte) NUM_BUCKETS#0 - (byte) 1
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD
Constant (const byte) init_squares::$2 = NUM_SQUARES#3-1
Constant (const byte) atan2_16::$16 = CORDIC_ITERATIONS_16#0-1
Constant (const byte*) main::$20 = COLS#0+$3e7
Constant (const word) malloc::size#3 = NUM_BUCKETS#0*SIZEOF_BYTE
Constant (const word) malloc::size#4 = NUM_BUCKETS#0*SIZEOF_POINTER
Constant (const word) malloc::size#5 = NUM_BUCKETS#0*SIZEOF_BYTE
Constant (const byte) init_buckets::$0 = NUM_BUCKETS#0-1
Constant (const byte) init_buckets::$3 = NUM_BUCKETS#0-1
Constant (const byte) init_buckets::$7 = NUM_BUCKETS#0-1
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (bsearch16u::@6_1) in block bsearch16u::@8
if() condition always true - replacing block destination [280] if((const byte) bsearch16u::num#2>(byte) 0) goto bsearch16u::@7
if() condition always true - replacing block destination [282] if((const byte) init_angle_screen::x#0<(byte) $13+(byte) 1) goto init_angle_screen::@3
if() condition always true - replacing block destination [284] if((const byte) init_dist_screen::x#0<(byte) $13+(byte) 1) goto init_dist_screen::@6
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [43] init_squares::i#1 ← ++ init_squares::i#2 to ++
Resolved ranged comparison value [44] if(init_squares::i#1!=rangelast(0,init_squares::$2)) goto init_squares::@1 to (const byte) init_squares::$2+(number) 1
Resolved ranged next value [90] atan2_16::i#1 ← ++ atan2_16::i#2 to ++
Resolved ranged comparison value [91] if(atan2_16::i#1==rangelast(0,atan2_16::$16)) goto atan2_16::@17 to (const byte) atan2_16::$16+(number) 1
Resolved ranged next value [159] init_buckets::i#1 ← ++ init_buckets::i#2 to ++
Resolved ranged comparison value [160] if(init_buckets::i#1!=rangelast(0,init_buckets::$0)) goto init_buckets::@1 to (const byte) init_buckets::$0+(number) 1
Resolved ranged next value [176] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++
Resolved ranged comparison value [177] if(init_buckets::i2#1!=rangelast(0,init_buckets::$3)) goto init_buckets::@5 to (const byte) init_buckets::$3+(number) 1
Resolved ranged next value [181] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++
Resolved ranged comparison value [182] if(init_buckets::i3#1!=rangelast(0,init_buckets::$7)) goto init_buckets::@7 to (const byte) init_buckets::$7+(number) 1
Adding number conversion cast (unumber) init_squares::$2+1 in if((byte) init_squares::i#1!=(const byte) init_squares::$2+(number) 1) goto init_squares::@1
Adding number conversion cast (unumber) 1 in if((byte) init_squares::i#1!=(unumber)(const byte) init_squares::$2+(number) 1) goto init_squares::@1
Adding number conversion cast (unumber) atan2_16::$16+1 in if((byte) atan2_16::i#1==(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17
Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) atan2_16::$16+(number) 1) goto atan2_16::@17
Adding number conversion cast (unumber) init_buckets::$0+1 in if((byte) init_buckets::i#1!=(const byte) init_buckets::$0+(number) 1) goto init_buckets::@1
Adding number conversion cast (unumber) 1 in if((byte) init_buckets::i#1!=(unumber)(const byte) init_buckets::$0+(number) 1) goto init_buckets::@1
Adding number conversion cast (unumber) init_buckets::$3+1 in if((word) init_buckets::i2#1!=(const byte) init_buckets::$3+(number) 1) goto init_buckets::@5
Adding number conversion cast (unumber) 1 in if((word) init_buckets::i2#1!=(unumber)(const byte) init_buckets::$3+(number) 1) goto init_buckets::@5
Adding number conversion cast (unumber) init_buckets::$7+1 in if((byte) init_buckets::i3#1!=(const byte) init_buckets::$7+(number) 1) goto init_buckets::@7
Adding number conversion cast (unumber) 1 in if((byte) init_buckets::i3#1!=(unumber)(const byte) init_buckets::$7+(number) 1) goto init_buckets::@7
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const byte) init_squares::$2+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) atan2_16::$16+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) init_buckets::$0+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) init_buckets::$3+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) init_buckets::$7+(unumber)(number) 1
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (word*) bsearch16u::items#11 = (word*) bsearch16u::items#2 
Successful SSA optimization Pass2AliasElimination
Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [10] (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0
Inlining Noop Cast [11] (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0)
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [25] (void*) malloc::return#10 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [90] (void*) malloc::return#11 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [94] (void*) malloc::return#12 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [132] (void*) malloc::return#13 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [136] (void*) malloc::return#14 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [140] (void*) malloc::return#15 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [156] (void*) malloc::return#16 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [27] (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 keeping SQUARES#1
Inlining Noop Cast [92] (byte[]) SCREEN_DIST#0 ← (byte[])(void*~) $0 keeping SCREEN_DIST#0
Inlining Noop Cast [96] (byte[]) SCREEN_ANGLE#0 ← (byte[])(void*~) $1 keeping SCREEN_ANGLE#0
Inlining Noop Cast [134] (byte[]) BUCKET_SIZES#0 ← (byte[])(void*~) $3 keeping BUCKET_SIZES#0
Inlining Noop Cast [138] (word*[]) BUCKETS#0 ← (word*[])(void*~) $5 keeping BUCKETS#0
Inlining Noop Cast [142] (byte[]) BUCKET_IDX#0 ← (byte[])(void*~) $7 keeping BUCKET_IDX#0
Inlining Noop Cast [189] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$5 keeping init_angle_screen::xw#0
Inlining Noop Cast [192] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$8 keeping init_angle_screen::yw#0
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [8] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [32] (byte~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2
Rewriting multiplication to use shift [39] (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
Rewriting division to use shift [48] (word~) sqrt::$1 ← (word~) sqrt::$3 / (const byte) SIZEOF_WORD
Rewriting division to use shift [60] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2
Rewriting multiplication to use shift [74] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [78] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [107] (byte~) main::$21 ← (byte) main::bucket_idx#6 * (const byte) SIZEOF_POINTER
Rewriting multiplication to use shift [115] (byte~) main::$22 ← (byte) main::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [154] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) * (const byte) SIZEOF_POINTER
Rewriting multiplication to use shift [158] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 * (const byte) SIZEOF_POINTER
Rewriting multiplication to use shift [170] (word~) init_buckets::$13 ← (word~) init_buckets::$9 * (const byte) SIZEOF_POINTER
Rewriting multiplication to use shift [174] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [186] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 * (byte) 2
Rewriting multiplication to use shift [190] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 * (byte) 2
Rewriting multiplication to use shift [217] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2
Rewriting multiplication to use shift [228] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 * (byte) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const word) malloc::size#1
Inlining constant with var siblings (const word) malloc::size#2
Inlining constant with var siblings (const word) malloc::size#0
Inlining constant with var siblings (const word) malloc::size#3
Inlining constant with var siblings (const word) malloc::size#4
Inlining constant with var siblings (const word) malloc::size#5
Inlining constant with var siblings (const byte) bsearch16u::num#2
Inlining constant with var siblings (const word) init_squares::sqr#0
Inlining constant with var siblings (const byte) init_squares::i#0
Inlining constant with var siblings (const word) atan2_16::angle#0
Inlining constant with var siblings (const byte) atan2_16::i#0
Inlining constant with var siblings (const byte) main::bucket_idx#0
Inlining constant with var siblings (const byte) main::min_angle#0
Inlining constant with var siblings (const word) main::min_offset#0
Inlining constant with var siblings (const byte) main::i#0
Inlining constant with var siblings (const byte) init_buckets::i#0
Inlining constant with var siblings (const word) init_buckets::i1#0
Inlining constant with var siblings (const word) init_buckets::i2#0
Inlining constant with var siblings (const byte) init_buckets::i3#0
Inlining constant with var siblings (const word) init_buckets::i4#0
Inlining constant with var siblings (const byte) init_angle_screen::y#0
Inlining constant with var siblings (const byte) init_angle_screen::x#0
Inlining constant with var siblings (const byte) init_angle_screen::xb#0
Inlining constant with var siblings (const byte) init_dist_screen::y#0
Inlining constant with var siblings (const byte) init_dist_screen::x#0
Inlining constant with var siblings (const byte) init_dist_screen::xb#0
Constant inlined init_buckets::i1#0 = (word) 0
Constant inlined init_squares::sqr#0 = (byte) 0
Constant inlined main::bucket_idx#0 = (byte) 0
Constant inlined init_angle_screen::y#0 = (byte) 0
Constant inlined init_angle_screen::x#0 = (byte) 0
Constant inlined atan2_16::angle#0 = (byte) 0
Constant inlined init_buckets::i#0 = (byte) 0
Constant inlined init_dist_screen::y#0 = (byte) 0
Constant inlined init_dist_screen::xb#0 = (byte) $27
Constant inlined init_dist_screen::x#0 = (byte) 0
Constant inlined main::i#0 = (byte) 0
Constant inlined atan2_16::$16 = (const byte) CORDIC_ITERATIONS_16#0-(byte) 1
Constant inlined main::min_offset#0 = (word) $ffff
Constant inlined init_buckets::i3#0 = (byte) 0
Constant inlined init_buckets::i2#0 = (word) 0
Constant inlined init_buckets::i4#0 = (word) 0
Constant inlined malloc::size#5 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE
Constant inlined init_buckets::$0 = (const byte) NUM_BUCKETS#0-(byte) 1
Constant inlined malloc::size#4 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER
Constant inlined malloc::size#3 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE
Constant inlined malloc::size#2 = (word) $3e8
Constant inlined main::min_angle#0 = (byte) $ff
Constant inlined bsearch16u::num#2 = (const byte) NUM_SQUARES#3
Constant inlined init_angle_screen::xb#0 = (byte) $27
Constant inlined atan2_16::i#0 = (byte) 0
Constant inlined init_buckets::$7 = (const byte) NUM_BUCKETS#0-(byte) 1
Constant inlined malloc::size#1 = (word) $3e8
Constant inlined main::$20 = (const byte*) COLS#0+(word) $3e7
Constant inlined malloc::size#0 = (const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD
Constant inlined bsearch16u::$17 = (byte) 1*(const byte) SIZEOF_WORD
Constant inlined init_buckets::$3 = (const byte) NUM_BUCKETS#0-(byte) 1
Constant inlined bsearch16u::$18 = (byte) 1*(const byte) SIZEOF_WORD
Constant inlined init_squares::i#0 = (byte) 0
Constant inlined init_squares::$2 = (const byte) NUM_SQUARES#3-(byte) 1
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting bsearch16u::@18(between bsearch16u::@6 and bsearch16u::@7)
Added new block during phi lifting bsearch16u::@19(between bsearch16u::@9 and bsearch16u::@10)
Added new block during phi lifting init_squares::@4(between init_squares::@1 and init_squares::@1)
Added new block during phi lifting atan2_16::@34(between atan2_16::@27 and atan2_16::@15)
Added new block during phi lifting atan2_16::@35(between atan2_16::@15 and atan2_16::@17)
Added new block during phi lifting atan2_16::@36(between atan2_16::@27 and atan2_16::@17)
Added new block during phi lifting atan2_16::@37(between atan2_16::@20 and atan2_16::@25)
Added new block during phi lifting atan2_16::@38(between atan2_16::@17 and atan2_16::@7)
Added new block during phi lifting atan2_16::@39(between atan2_16::@7 and atan2_16::@8)
Added new block during phi lifting main::@37(between main::@15 and main::@11)
Added new block during phi lifting main::@38(between main::@9 and main::@11)
Added new block during phi lifting init_buckets::@12(between init_buckets::@1 and init_buckets::@1)
Added new block during phi lifting init_buckets::@13(between init_buckets::@3 and init_buckets::@3)
Added new block during phi lifting init_buckets::@14(between init_buckets::@11 and init_buckets::@5)
Added new block during phi lifting init_buckets::@15(between init_buckets::@7 and init_buckets::@7)
Added new block during phi lifting init_buckets::@16(between init_buckets::@9 and init_buckets::@9)
Added new block during phi lifting init_angle_screen::@10(between init_angle_screen::@4 and init_angle_screen::@1)
Added new block during phi lifting init_angle_screen::@11(between init_angle_screen::@2 and init_angle_screen::@3)
Added new block during phi lifting init_dist_screen::@23(between init_dist_screen::@7 and init_dist_screen::@1)
Added new block during phi lifting init_dist_screen::@24(between init_dist_screen::@5 and init_dist_screen::@6)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @8
Adding NOP phi() at start of @16
Adding NOP phi() at start of @19
Adding NOP phi() at start of @21
Adding NOP phi() at start of @25
Adding NOP phi() at start of @31
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@36
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@28
Adding NOP phi() at start of init_buckets
Adding NOP phi() at start of init_buckets::@4
Adding NOP phi() at start of init_buckets::@6
Adding NOP phi() at start of init_angle_screen::@2_1
Adding NOP phi() at start of init_dist_screen
Adding NOP phi() at start of init_dist_screen::@5_1
Adding NOP phi() at start of bsearch16u
CALL GRAPH
Calls in [] to malloc:5 malloc:8 malloc:11 malloc:14 malloc:17 main:20 
Calls in [main] to init_dist_screen:25 init_angle_screen:27 init_buckets:29 
Calls in [init_buckets] to malloc:88 
Calls in [init_angle_screen] to atan2_16:140 
Calls in [init_dist_screen] to init_squares:236 sqr:248 sqr:260 sqrt:265 
Calls in [sqrt] to bsearch16u:291 
Calls in [init_squares] to malloc:332 

Created 54 initial phi equivalence classes
Coalesced [7] heap_head#85 ← heap_head#1
Coalesced (already) [10] heap_head#84 ← heap_head#1
Coalesced (already) [13] heap_head#86 ← heap_head#1
Coalesced (already) [16] heap_head#87 ← heap_head#1
Coalesced (already) [45] main::bucket_idx#15 ← main::bucket_idx#6
Coalesced [52] main::bucket_idx#16 ← main::bucket_idx#1
Coalesced [60] main::min_offset#10 ← main::offset#0
Coalesced [61] main::min_angle#8 ← main::min_angle#1
Coalesced [64] main::i#7 ← main::i#1
Not coalescing [65] main::min_offset#8 ← main::min_offset#5
Coalesced [66] main::min_angle#6 ← main::min_angle#5
Not coalescing [67] main::min_offset#9 ← main::min_offset#2
Coalesced (already) [68] main::min_angle#7 ← main::min_angle#2
Not coalescing [69] main::min_offset#11 ← main::min_offset#2
Coalesced (already) [70] main::min_angle#9 ← main::min_angle#2
Not coalescing [76] init_buckets::dist#6 ← init_buckets::screen#0
Coalesced (already) [86] heap_head#88 ← heap_head#1
Coalesced [87] malloc::size#8 ← malloc::size#6
Not coalescing [100] init_buckets::dist#8 ← init_buckets::screen#0
Coalesced [115] init_buckets::dist#9 ← init_buckets::dist#3
Coalesced [116] init_buckets::i4#3 ← init_buckets::i4#1
Coalesced [117] init_buckets::i3#3 ← init_buckets::i3#1
Coalesced [118] init_buckets::i2#4 ← init_buckets::i2#1
Coalesced [119] init_buckets::dist#7 ← init_buckets::dist#1
Coalesced [120] init_buckets::i1#3 ← init_buckets::i1#1
Coalesced [121] init_buckets::i#3 ← init_buckets::i#1
Not coalescing [124] heap_head#1 ← malloc::mem#0
Coalesced [128] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0
Coalesced [129] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0
Coalesced [160] init_angle_screen::y#7 ← init_angle_screen::y#1
Coalesced [161] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1
Coalesced [162] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1
Coalesced [163] init_angle_screen::x#8 ← init_angle_screen::x#1
Coalesced [164] init_angle_screen::xb#8 ← init_angle_screen::xb#1
Coalesced [167] atan2_16::yi#17 ← atan2_16::$2
Coalesced [171] atan2_16::xi#14 ← atan2_16::$7
Coalesced [173] atan2_16::yi#19 ← atan2_16::yi#0
Coalesced [174] atan2_16::xi#16 ← atan2_16::xi#0
Coalesced [177] atan2_16::angle#22 ← atan2_16::angle#12
Coalesced [182] atan2_16::angle#27 ← atan2_16::angle#4
Coalesced [186] atan2_16::return#5 ← atan2_16::angle#5
Coalesced [189] atan2_16::return#6 ← atan2_16::angle#11
Coalesced [190] atan2_16::angle#26 ← atan2_16::angle#1
Not coalescing [191] atan2_16::shift#5 ← atan2_16::i#2
Not coalescing [192] atan2_16::xd#10 ← atan2_16::xi#3
Not coalescing [193] atan2_16::yd#10 ← atan2_16::yi#3
Coalesced [199] atan2_16::yd#13 ← atan2_16::yd#2
Coalesced [200] atan2_16::xd#13 ← atan2_16::xd#2
Coalesced [207] atan2_16::yi#21 ← atan2_16::yi#2
Coalesced [208] atan2_16::angle#25 ← atan2_16::angle#3
Coalesced [209] atan2_16::xi#18 ← atan2_16::xi#2
Coalesced [213] atan2_16::yi#18 ← atan2_16::yi#8
Coalesced [214] atan2_16::xi#15 ← atan2_16::xi#8
Coalesced [215] atan2_16::i#12 ← atan2_16::i#1
Coalesced [216] atan2_16::angle#21 ← atan2_16::angle#13
Coalesced (already) [217] atan2_16::angle#23 ← atan2_16::angle#13
Coalesced [222] atan2_16::yi#20 ← atan2_16::yi#1
Coalesced [223] atan2_16::angle#24 ← atan2_16::angle#2
Coalesced [224] atan2_16::xi#17 ← atan2_16::xi#1
Coalesced [225] atan2_16::yd#12 ← atan2_16::yd#3
Coalesced [226] atan2_16::xd#12 ← atan2_16::xd#3
Coalesced [230] atan2_16::shift#6 ← atan2_16::shift#1
Coalesced [231] atan2_16::xd#11 ← atan2_16::xd#1
Coalesced [232] atan2_16::yd#11 ← atan2_16::yd#1
Not coalescing [233] atan2_16::xi#13 ← atan2_16::x#0
Not coalescing [234] atan2_16::yi#16 ← atan2_16::y#0
Coalesced [238] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0
Coalesced [239] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0
Coalesced [244] init_dist_screen::yd#2 ← init_dist_screen::$5
Coalesced [247] sqr::val#4 ← sqr::val#0
Coalesced [256] init_dist_screen::xd#2 ← init_dist_screen::$14
Coalesced [259] sqr::val#3 ← sqr::val#1
Coalesced [280] init_dist_screen::y#15 ← init_dist_screen::y#1
Coalesced [281] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1
Coalesced [282] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1
Coalesced [283] init_dist_screen::x#16 ← init_dist_screen::x#1
Coalesced [284] init_dist_screen::xb#16 ← init_dist_screen::xb#1
Coalesced [286] init_dist_screen::xd#1 ← init_dist_screen::$16
Coalesced [288] init_dist_screen::yd#1 ← init_dist_screen::$7
Coalesced [299] bsearch16u::items#17 ← bsearch16u::items#1
Coalesced [306] bsearch16u::return#6 ← bsearch16u::pivot#0
Coalesced [312] bsearch16u::num#14 ← bsearch16u::num#1
Coalesced [313] bsearch16u::items#18 ← bsearch16u::items#0
Coalesced [319] bsearch16u::return#9 ← bsearch16u::$2
Coalesced [321] bsearch16u::return#7 ← bsearch16u::return#2
Coalesced [322] bsearch16u::return#8 ← bsearch16u::items#11
Coalesced [323] bsearch16u::num#13 ← bsearch16u::num#0
Not coalescing [324] bsearch16u::items#16 ← bsearch16u::items#11
Coalesced [325] bsearch16u::num#15 ← bsearch16u::num#10
Not coalescing [326] bsearch16u::items#19 ← bsearch16u::items#10
Coalesced (already) [331] heap_head#89 ← heap_head#1
Coalesced [335] init_squares::squares#4 ← init_squares::squares#0
Coalesced [345] init_squares::sqr#3 ← init_squares::sqr#1
Coalesced [346] init_squares::squares#3 ← init_squares::squares#1
Coalesced [347] init_squares::i#3 ← init_squares::i#1
Coalesced down to 45 phi equivalence classes
Culled Empty Block (label) @8
Culled Empty Block (label) @16
Culled Empty Block (label) @19
Culled Empty Block (label) @31
Culled Empty Block (label) main::@36
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@28
Culled Empty Block (label) init_buckets::@4
Culled Empty Block (label) init_buckets::@6
Culled Empty Block (label) init_buckets::@16
Culled Empty Block (label) init_buckets::@15
Culled Empty Block (label) init_buckets::@14
Culled Empty Block (label) init_buckets::@13
Culled Empty Block (label) init_buckets::@12
Culled Empty Block (label) init_angle_screen::@2_1
Culled Empty Block (label) init_angle_screen::@10
Culled Empty Block (label) init_angle_screen::@11
Culled Empty Block (label) atan2_16::@35
Culled Empty Block (label) atan2_16::@39
Culled Empty Block (label) atan2_16::@38
Culled Empty Block (label) atan2_16::@34
Culled Empty Block (label) atan2_16::@36
Culled Empty Block (label) atan2_16::@37
Culled Empty Block (label) init_dist_screen::@5_1
Culled Empty Block (label) init_dist_screen::@23
Culled Empty Block (label) init_dist_screen::@24
Culled Empty Block (label) bsearch16u::@6_1
Culled Empty Block (label) bsearch16u::@13
Culled Empty Block (label) bsearch16u::@1
Culled Empty Block (label) init_squares::@4
Renumbering block @21 to @1
Renumbering block @22 to @2
Renumbering block @25 to @3
Renumbering block @26 to @4
Renumbering block @27 to @5
Renumbering block @28 to @6
Renumbering block @29 to @7
Renumbering block @30 to @8
Renumbering block bsearch16u::@2 to bsearch16u::@1
Renumbering block bsearch16u::@3 to bsearch16u::@2
Renumbering block bsearch16u::@6 to bsearch16u::@3
Renumbering block bsearch16u::@7 to bsearch16u::@4
Renumbering block bsearch16u::@8 to bsearch16u::@5
Renumbering block bsearch16u::@9 to bsearch16u::@6
Renumbering block bsearch16u::@10 to bsearch16u::@7
Renumbering block bsearch16u::@15 to bsearch16u::@8
Renumbering block bsearch16u::@18 to bsearch16u::@9
Renumbering block bsearch16u::@19 to bsearch16u::@10
Renumbering block init_squares::@3 to init_squares::@2
Renumbering block sqrt::@2 to sqrt::@1
Renumbering block atan2_16::@13 to atan2_16::@9
Renumbering block atan2_16::@15 to atan2_16::@10
Renumbering block atan2_16::@16 to atan2_16::@11
Renumbering block atan2_16::@17 to atan2_16::@12
Renumbering block atan2_16::@18 to atan2_16::@13
Renumbering block atan2_16::@19 to atan2_16::@14
Renumbering block atan2_16::@20 to atan2_16::@15
Renumbering block atan2_16::@24 to atan2_16::@16
Renumbering block atan2_16::@25 to atan2_16::@17
Renumbering block atan2_16::@26 to atan2_16::@18
Renumbering block atan2_16::@27 to atan2_16::@19
Renumbering block atan2_16::@30 to atan2_16::@20
Renumbering block atan2_16::@33 to atan2_16::@21
Renumbering block main::@4 to main::@2
Renumbering block main::@5 to main::@3
Renumbering block main::@7 to main::@4
Renumbering block main::@8 to main::@5
Renumbering block main::@9 to main::@6
Renumbering block main::@10 to main::@7
Renumbering block main::@11 to main::@8
Renumbering block main::@15 to main::@9
Renumbering block main::@16 to main::@10
Renumbering block main::@18 to main::@11
Renumbering block main::@21 to main::@12
Renumbering block main::@25 to main::@13
Renumbering block main::@29 to main::@14
Renumbering block main::@34 to main::@15
Renumbering block main::@35 to main::@16
Renumbering block main::@37 to main::@17
Renumbering block main::@38 to main::@18
Renumbering block init_buckets::@5 to init_buckets::@4
Renumbering block init_buckets::@7 to init_buckets::@5
Renumbering block init_buckets::@8 to init_buckets::@6
Renumbering block init_buckets::@9 to init_buckets::@7
Renumbering block init_buckets::@11 to init_buckets::@8
Renumbering block init_angle_screen::@9 to init_angle_screen::@5
Renumbering block init_dist_screen::@19 to init_dist_screen::@11
Renumbering block init_dist_screen::@20 to init_dist_screen::@12
Renumbering block init_dist_screen::@21 to init_dist_screen::@13
Renumbering block init_dist_screen::@22 to init_dist_screen::@14
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of init_buckets
Adding NOP phi() at start of init_dist_screen
Adding NOP phi() at start of bsearch16u
Adding NOP phi() at start of init_squares

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call malloc 
  to:@4
@4: scope:[]  from @1
  [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
  [4] call malloc 
  to:@5
@5: scope:[]  from @4
  [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0
  to:@2
@2: scope:[]  from @5
  [6] phi()
  [7] call malloc 
  to:@6
@6: scope:[]  from @2
  [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0
  [9] call malloc 
  to:@7
@7: scope:[]  from @6
  [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0
  [11] call malloc 
  to:@8
@8: scope:[]  from @7
  [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0
  to:@3
@3: scope:[]  from @8
  [13] phi()
  [14] call main 
  to:@end
@end: scope:[]  from @3
  [15] phi()
main: scope:[main]  from @3
  asm { sei  }
  [17] (byte*) init_dist_screen::screen#0 ← (byte[])(void*) SCREEN_DIST#0
  [18] call init_dist_screen 
  to:main::@15
main::@15: scope:[main]  from main
  [19] (byte*) init_angle_screen::screen#0 ← (byte[])(void*) SCREEN_ANGLE#0
  [20] call init_angle_screen 
  to:main::@16
main::@16: scope:[main]  from main::@15
  [21] (byte*) init_buckets::screen#0 ← (byte[])(void*) SCREEN_DIST#0
  [22] call init_buckets 
  to:main::@1
main::@1: scope:[main]  from main::@11 main::@12 main::@16
  [23] (byte) main::bucket_idx#6 ← phi( main::@11/(byte) main::bucket_idx#6 main::@12/(byte) main::bucket_idx#1 main::@16/(byte) 0 )
  to:main::@2
main::@2: scope:[main]  from main::@1 main::@2
  [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2
  [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
  [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1
  [27] (word[]) main::bucket#0 ← *((word*[])(void*) BUCKETS#0 + (byte~) main::$21)
  [28] (byte) main::bucket_size#0 ← *((byte[])(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6)
  [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4
  to:main::@5
main::@5: scope:[main]  from main::@3 main::@8
  [30] (byte) main::min_angle#2 ← phi( main::@8/(byte) main::min_angle#5 main::@3/(byte) $ff )
  [30] (word) main::min_offset#2 ← phi( main::@8/(word~) main::min_offset#8 main::@3/(word) $ffff )
  [30] (byte) main::i#2 ← phi( main::@8/(byte) main::i#1 main::@3/(byte) 0 )
  [31] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6
  to:main::@7
main::@7: scope:[main]  from main::@5
  [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4
  to:main::@11
main::@11: scope:[main]  from main::@7
  [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2
  [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0
  [35] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
  to:main::@1
main::@4: scope:[main]  from main::@3 main::@7
  [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6
  [37] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@12
  to:main::@13
main::@13: scope:[main]  from main::@4
  [38] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
  to:main::@14
main::@14: scope:[main]  from main::@13 main::@14
  [39] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7)
  to:main::@14
main::@12: scope:[main]  from main::@4
  [40] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
  to:main::@1
main::@6: scope:[main]  from main::@5
  [41] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1
  [42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22)
  [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0
  [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18
  to:main::@9
main::@9: scope:[main]  from main::@6
  [45] (byte*) main::angle#0 ← (byte[])(void*) SCREEN_ANGLE#0 + (word) main::offset#0
  [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17
  to:main::@10
main::@10: scope:[main]  from main::@9
  [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0)
  to:main::@8
main::@8: scope:[main]  from main::@10 main::@17 main::@18
  [48] (byte) main::min_angle#5 ← phi( main::@17/(byte) main::min_angle#2 main::@10/(byte) main::min_angle#1 main::@18/(byte) main::min_angle#2 )
  [48] (word) main::min_offset#5 ← phi( main::@17/(word~) main::min_offset#9 main::@10/(word) main::offset#0 main::@18/(word~) main::min_offset#11 )
  [49] (byte) main::i#1 ← ++ (byte) main::i#2
  [50] (word~) main::min_offset#8 ← (word) main::min_offset#5
  to:main::@5
main::@17: scope:[main]  from main::@9
  [51] (word~) main::min_offset#9 ← (word) main::min_offset#2
  to:main::@8
main::@18: scope:[main]  from main::@6
  [52] (word~) main::min_offset#11 ← (word) main::min_offset#2
  to:main::@8
init_buckets: scope:[init_buckets]  from main::@16
  [53] phi()
  to:init_buckets::@1
init_buckets::@1: scope:[init_buckets]  from init_buckets init_buckets::@1
  [54] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 )
  [55] *((byte[])(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0
  [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2
  [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1
  to:init_buckets::@2
init_buckets::@2: scope:[init_buckets]  from init_buckets::@1
  [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0
  to:init_buckets::@3
init_buckets::@3: scope:[init_buckets]  from init_buckets::@2 init_buckets::@3
  [59] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 )
  [59] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*~) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 )
  [60] *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4))
  [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4
  [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2
  [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3
  to:init_buckets::@4
init_buckets::@4: scope:[init_buckets]  from init_buckets::@3 init_buckets::@8
  [64] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 )
  [65] (byte*~) init_buckets::$15 ← (byte[])(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2
  [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1
  [67] call malloc 
  to:init_buckets::@8
init_buckets::@8: scope:[init_buckets]  from init_buckets::@4
  [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
  [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1
  [70] (word**~) init_buckets::$16 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$12
  [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5
  [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2
  [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4
  to:init_buckets::@5
init_buckets::@5: scope:[init_buckets]  from init_buckets::@5 init_buckets::@8
  [74] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 )
  [75] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0
  [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2
  [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5
  to:init_buckets::@6
init_buckets::@6: scope:[init_buckets]  from init_buckets::@5
  [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0
  to:init_buckets::@7
init_buckets::@7: scope:[init_buckets]  from init_buckets::@6 init_buckets::@7
  [79] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 )
  [79] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*~) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 )
  [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5)
  [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0
  [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1
  [83] (word**~) init_buckets::$17 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$13
  [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17)
  [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0
  [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1
  [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10
  [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
  [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5
  [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2
  [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7
  to:init_buckets::@return
init_buckets::@return: scope:[init_buckets]  from init_buckets::@7
  [92] return 
  to:@return
malloc: scope:[malloc]  from @1 @2 @4 @6 @7 init_buckets::@4 init_squares
  [93] (word) malloc::size#7 ← phi( @1/(word) $3e8 @2/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE @4/(word) $3e8 @6/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER @7/(const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
  [93] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP#0 @2/(byte*) heap_head#1 @4/(byte*) heap_head#1 @6/(byte*) heap_head#1 @7/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 )
  [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7
  [95] (byte*) heap_head#1 ← (byte*) malloc::mem#0
  to:malloc::@return
malloc::@return: scope:[malloc]  from malloc
  [96] return 
  to:@return
init_angle_screen: scope:[init_angle_screen]  from main::@15
  [97] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
  [98] (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
  [99] (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 )
  [99] (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 )
  [99] (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::@3
init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@2
  [100] (byte) init_angle_screen::xb#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#1 init_angle_screen::@1/(byte) $27 )
  [100] (byte) init_angle_screen::x#5 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#1 init_angle_screen::@1/(byte) 0 )
  [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1
  [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
  [103] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0
  [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1
  [105] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0
  [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
  [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
  [108] call atan2_16 
  [109] (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
  [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
  [111] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80
  [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11
  [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0
  [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0
  [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13
  [116] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
  [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14
  [118] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
  [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15
  [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5
  [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5
  to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@5
  [122] if((byte) init_angle_screen::x#1<(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
  [123] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28
  [124] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28
  [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5
  [126] 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
  [127] return 
  to:@return
atan2_16: scope:[atan2_16]  from init_angle_screen::@3
  [128] 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
  [129] (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
  [130] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
  [131] 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
  [132] (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
  [133] (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
  [134] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 )
  [134] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
  [134] (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 )
  [134] (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 )
  [135] 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
  [136] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
  [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
  [138] 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
  [139] (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
  [140] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
  [141] 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
  [142] (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
  [143] (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
  [144] return 
  to:@return
atan2_16::@11: scope:[atan2_16]  from atan2_16::@10
  [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2
  [146] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
  [147] (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
  [148] (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 )
  [148] (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 )
  [148] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
  [149] 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
  [150] 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
  [151] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
  [152] (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
  [153] (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 )
  [153] (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 )
  [154] 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
  [155] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
  [156] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
  [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1
  [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
  to:atan2_16::@19
atan2_16::@19: scope:[atan2_16]  from atan2_16::@18 atan2_16::@20
  [159] (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 )
  [159] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
  [159] (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 )
  [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
  [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12
  to:atan2_16::@10
atan2_16::@18: scope:[atan2_16]  from atan2_16::@17
  [162] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
  [163] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
  [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
  [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
  to:atan2_16::@19
atan2_16::@14: scope:[atan2_16]  from atan2_16::@13
  [166] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
  [167] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
  [168] (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
  [169] (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
  [170] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0
  to:atan2_16::@3
init_dist_screen: scope:[init_dist_screen]  from main
  [171] phi()
  [172] call init_squares 
  to:init_dist_screen::@11
init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen
  [173] (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
  [174] (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 )
  [174] (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 )
  [174] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 )
  [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
  [176] 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
  [177] (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
  [178] (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 )
  [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
  [180] call sqr 
  [181] (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
  [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
  to:init_dist_screen::@6
init_dist_screen::@6: scope:[init_dist_screen]  from init_dist_screen::@12 init_dist_screen::@5
  [183] (byte) init_dist_screen::xb#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::xb#1 init_dist_screen::@12/(byte) $27 )
  [183] (byte) init_dist_screen::x#10 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#1 init_dist_screen::@12/(byte) 0 )
  [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1
  [185] 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
  [186] (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
  [187] (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 )
  [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
  [189] call sqr 
  [190] (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
  [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
  [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
  [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
  [194] call sqrt 
  [195] (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
  [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
  [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0
  [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0
  [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0
  [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0
  [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10
  [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10
  to:init_dist_screen::@5
init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@14
  [203] if((byte) init_dist_screen::x#1<(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
  [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28
  [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28
  [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
  [207] 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
  [208] return 
  to:@return
init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6
  [209] (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
  [210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
  to:init_dist_screen::@4
sqrt: scope:[sqrt]  from init_dist_screen::@13
  [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0
  [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1
  [213] call bsearch16u 
  [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
  to:sqrt::@1
sqrt::@1: scope:[sqrt]  from sqrt
  [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
  [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1
  [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
  [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
  to:sqrt::@return
sqrt::@return: scope:[sqrt]  from sqrt::@1
  [219] return 
  to:@return
bsearch16u: scope:[bsearch16u]  from sqrt
  [220] phi()
  to:bsearch16u::@4
bsearch16u::@4: scope:[bsearch16u]  from bsearch16u bsearch16u::@9
  [221] (word*) bsearch16u::items#10 ← phi( bsearch16u::@9/(word*~) bsearch16u::items#16 bsearch16u/(word*) bsearch16u::items#1 )
  [221] (byte) bsearch16u::num#10 ← phi( bsearch16u::@9/(byte) bsearch16u::num#0 bsearch16u/(const byte) NUM_SQUARES#3 )
  [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1
  [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
  [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16
  [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
  [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
  to:bsearch16u::@return
bsearch16u::@return: scope:[bsearch16u]  from bsearch16u::@2 bsearch16u::@4
  [227] (word*) bsearch16u::return#1 ← phi( bsearch16u::@4/(word*) bsearch16u::pivot#0 bsearch16u::@2/(word*) bsearch16u::return#2 )
  [228] return 
  to:@return
bsearch16u::@6: scope:[bsearch16u]  from bsearch16u::@4
  [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10
  to:bsearch16u::@8
bsearch16u::@8: scope:[bsearch16u]  from bsearch16u::@6
  [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
  [231] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10
  to:bsearch16u::@7
bsearch16u::@7: scope:[bsearch16u]  from bsearch16u::@10 bsearch16u::@8
  [232] (word*) bsearch16u::items#11 ← phi( bsearch16u::@8/(word*) bsearch16u::items#0 bsearch16u::@10/(word*~) bsearch16u::items#19 )
  [232] (byte) bsearch16u::num#5 ← phi( bsearch16u::@8/(byte) bsearch16u::num#1 bsearch16u::@10/(byte) bsearch16u::num#10 )
  [233] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
  to:bsearch16u::@3
bsearch16u::@3: scope:[bsearch16u]  from bsearch16u::@7
  [234] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9
  to:bsearch16u::@5
bsearch16u::@5: scope:[bsearch16u]  from bsearch16u::@3
  [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2
  to:bsearch16u::@1
bsearch16u::@1: scope:[bsearch16u]  from bsearch16u::@5
  [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD
  to:bsearch16u::@2
bsearch16u::@2: scope:[bsearch16u]  from bsearch16u::@1 bsearch16u::@5
  [237] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#11 bsearch16u::@1/(word*~) bsearch16u::$2 )
  to:bsearch16u::@return
bsearch16u::@9: scope:[bsearch16u]  from bsearch16u::@3
  [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11
  to:bsearch16u::@4
bsearch16u::@10: scope:[bsearch16u]  from bsearch16u::@6
  [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10
  to:bsearch16u::@7
sqr: scope:[sqr]  from init_dist_screen::@10 init_dist_screen::@4
  [240] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 )
  [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
  [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0)
  to:sqr::@return
sqr::@return: scope:[sqr]  from sqr
  [243] return 
  to:@return
init_squares: scope:[init_squares]  from init_dist_screen
  [244] phi()
  [245] call malloc 
  to:init_squares::@2
init_squares::@2: scope:[init_squares]  from init_squares
  [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
  [247] (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
  [248] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 )
  [248] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 )
  [248] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 )
  [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
  [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
  [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
  [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
  [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
  [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
  [255] 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
  [256] return 
  to:@return

null depth in calling loop Loop head: init_buckets::@4 tails: init_buckets::@8 blocks: init_buckets::@8 init_buckets::@4  in scope malloc

VARIABLE REGISTER WEIGHTS
(byte*) BORDERCOL
(word*[]) BUCKETS
(void*) BUCKETS#0 0.02531645569620253
(byte[]) BUCKET_IDX
(void*) BUCKET_IDX#0 0.0425531914893617
(byte[]) BUCKET_SIZES
(void*) BUCKET_SIZES#0 0.024691358024691357
(byte*) COLS
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
(byte) CORDIC_ITERATIONS_16
(byte) FILL_CHAR
(byte*) HEAP_TOP
(byte) NUM_BUCKETS
(byte) NUM_SQUARES
(byte*) RASTER
(byte[]) SCREEN_ANGLE
(void*) SCREEN_ANGLE#0 0.045454545454545456
(byte[]) SCREEN_DIST
(void*) SCREEN_DIST#0 0.125
(byte*) SCREEN_FILL
(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::$23 2002.0
(byte~) atan2_16::$24 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#10 429.2857142857143
(word*) bsearch16u::items#11 752.25
(word*~) bsearch16u::items#16 2002.0
(word*~) bsearch16u::items#19 2002.0
(word) bsearch16u::key
(word) bsearch16u::key#0 0.23529411764705882
(byte) bsearch16u::num
(byte) bsearch16u::num#0 1001.0
(byte) bsearch16u::num#1 2002.0
(byte) bsearch16u::num#10 444.8888888888889
(byte) bsearch16u::num#5 3003.0
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0 750.75
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0 1501.5
(word*) bsearch16u::return
(word*) bsearch16u::return#1 335.00000000000006
(word*) bsearch16u::return#2 6.0
(word*) bsearch16u::return#3 4.0
(byte*) heap_head
(byte*) heap_head#1 0.2446808510638298
(byte*) heap_head#18 23.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.040000000000001
(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#5 25.25
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 101.0
(byte) init_angle_screen::xb#5 19.238095238095237
(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_buckets((byte*) init_buckets::screen)
(word~) init_buckets::$10 11.0
(word~) init_buckets::$12 22.0
(word~) init_buckets::$13 22.0
(byte~) init_buckets::$14 22.0
(byte*~) init_buckets::$15 22.0
(word**~) init_buckets::$16 22.0
(word**~) init_buckets::$17 22.0
(void*~) init_buckets::$5 3.6666666666666665
(word~) init_buckets::$9 22.0
(word*) init_buckets::bucket
(word*) init_buckets::bucket#0 7.333333333333333
(byte*) init_buckets::dist
(byte*) init_buckets::dist#1 7.333333333333333
(byte*) init_buckets::dist#3 7.333333333333333
(byte*) init_buckets::dist#4 23.0
(byte*) init_buckets::dist#5 4.6000000000000005
(byte*~) init_buckets::dist#6 4.0
(byte*~) init_buckets::dist#8 4.0
(byte) init_buckets::distance
(byte) init_buckets::distance#0 5.5
(byte) init_buckets::i
(byte) init_buckets::i#1 16.5
(byte) init_buckets::i#2 16.5
(word) init_buckets::i1
(word) init_buckets::i1#1 16.5
(word) init_buckets::i1#2 7.333333333333333
(word) init_buckets::i2
(word) init_buckets::i2#1 16.5
(word) init_buckets::i2#2 5.5
(byte) init_buckets::i3
(byte) init_buckets::i3#1 16.5
(byte) init_buckets::i3#2 16.5
(word) init_buckets::i4
(word) init_buckets::i4#1 16.5
(word) init_buckets::i4#2 2.0
(byte*) init_buckets::screen
(byte*) init_buckets::screen#0 0.42500000000000004
(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#10 26.578947368421055
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0 202.0
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#1 101.0
(byte) init_dist_screen::xb#10 20.2
(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::$21 22.0
(byte~) main::$22 202.0
(byte*) main::angle
(byte*) main::angle#0 151.5
(word[]) main::bucket
(word[]) main::bucket#0 6.588235294117648
(byte) main::bucket_idx
(byte) main::bucket_idx#1 11.0
(byte) main::bucket_idx#6 2.64
(byte) main::bucket_size
(byte) main::bucket_size#0 7.6875
(byte*) main::fill
(byte*) main::fill#0 202.0
(byte*) main::fill1
(byte*) main::fill1#0 22.0
(byte) main::i
(byte) main::i#1 101.0
(byte) main::i#2 33.666666666666664
(byte) main::min_angle
(byte) main::min_angle#1 202.0
(byte) main::min_angle#2 40.4
(byte) main::min_angle#5 134.66666666666666
(word) main::min_offset
(word~) main::min_offset#11 202.0
(word) main::min_offset#2 36.11111111111111
(word) main::min_offset#5 202.0
(word~) main::min_offset#8 202.0
(word~) main::min_offset#9 202.0
(word) main::offset
(word) main::offset#0 67.33333333333333
(void*()) malloc((word) malloc::size)
(byte*) malloc::mem
(byte*) malloc::mem#0 0.4
(void*) malloc::return
(word) malloc::size
(word) malloc::size#6 22.0
(word) malloc::size#7 13.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::bucket_idx#6 main::bucket_idx#1 ]
[ main::i#2 main::i#1 ]
[ main::min_offset#2 main::min_offset#8 ]
[ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
[ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ]
[ init_buckets::i#2 init_buckets::i#1 ]
[ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
[ init_buckets::i1#2 init_buckets::i1#1 ]
[ init_buckets::i2#2 init_buckets::i2#1 ]
[ init_buckets::i3#2 init_buckets::i3#1 ]
[ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
[ init_buckets::i4#2 init_buckets::i4#1 ]
[ heap_head#18 heap_head#1 ]
[ malloc::size#7 malloc::size#6 ]
[ 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#5 init_angle_screen::x#1 ]
[ init_angle_screen::xb#5 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#10 init_dist_screen::x#1 ]
[ init_dist_screen::xb#10 init_dist_screen::xb#1 ]
[ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
[ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ]
[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ]
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 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 ]
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 BUCKET_SIZES#0 to zero page equivalence class [ BUCKET_SIZES#0 ]
Added variable BUCKETS#0 to zero page equivalence class [ BUCKETS#0 ]
Added variable BUCKET_IDX#0 to zero page equivalence class [ BUCKET_IDX#0 ]
Added variable init_angle_screen::screen#0 to zero page equivalence class [ init_angle_screen::screen#0 ]
Added variable init_buckets::screen#0 to zero page equivalence class [ init_buckets::screen#0 ]
Added variable main::$21 to zero page equivalence class [ main::$21 ]
Added variable main::bucket#0 to zero page equivalence class [ main::bucket#0 ]
Added variable main::bucket_size#0 to zero page equivalence class [ main::bucket_size#0 ]
Added variable main::fill1#0 to zero page equivalence class [ main::fill1#0 ]
Added variable main::$22 to zero page equivalence class [ main::$22 ]
Added variable main::fill#0 to zero page equivalence class [ main::fill#0 ]
Added variable main::angle#0 to zero page equivalence class [ main::angle#0 ]
Added variable init_buckets::$15 to zero page equivalence class [ init_buckets::$15 ]
Added variable init_buckets::$5 to zero page equivalence class [ init_buckets::$5 ]
Added variable init_buckets::$12 to zero page equivalence class [ init_buckets::$12 ]
Added variable init_buckets::$16 to zero page equivalence class [ init_buckets::$16 ]
Added variable init_buckets::distance#0 to zero page equivalence class [ init_buckets::distance#0 ]
Added variable init_buckets::$9 to zero page equivalence class [ init_buckets::$9 ]
Added variable init_buckets::$13 to zero page equivalence class [ init_buckets::$13 ]
Added variable init_buckets::$17 to zero page equivalence class [ init_buckets::$17 ]
Added variable init_buckets::bucket#0 to zero page equivalence class [ init_buckets::bucket#0 ]
Added variable init_buckets::$10 to zero page equivalence class [ init_buckets::$10 ]
Added variable init_buckets::$14 to zero page equivalence class [ init_buckets::$14 ]
Added variable malloc::mem#0 to zero page equivalence class [ malloc::mem#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::$24 to zero page equivalence class [ atan2_16::$24 ]
Added variable atan2_16::$23 to zero page equivalence class [ atan2_16::$23 ]
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::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 ]
Complete equivalence classes
[ main::bucket_idx#6 main::bucket_idx#1 ]
[ main::i#2 main::i#1 ]
[ main::min_offset#2 main::min_offset#8 ]
[ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
[ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ]
[ init_buckets::i#2 init_buckets::i#1 ]
[ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
[ init_buckets::i1#2 init_buckets::i1#1 ]
[ init_buckets::i2#2 init_buckets::i2#1 ]
[ init_buckets::i3#2 init_buckets::i3#1 ]
[ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
[ init_buckets::i4#2 init_buckets::i4#1 ]
[ heap_head#18 heap_head#1 ]
[ malloc::size#7 malloc::size#6 ]
[ 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#5 init_angle_screen::x#1 ]
[ init_angle_screen::xb#5 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#10 init_dist_screen::x#1 ]
[ init_dist_screen::xb#10 init_dist_screen::xb#1 ]
[ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
[ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ]
[ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ]
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 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 ]
[ SCREEN_DIST#0 ]
[ SCREEN_ANGLE#0 ]
[ BUCKET_SIZES#0 ]
[ BUCKETS#0 ]
[ BUCKET_IDX#0 ]
[ init_angle_screen::screen#0 ]
[ init_buckets::screen#0 ]
[ main::$21 ]
[ main::bucket#0 ]
[ main::bucket_size#0 ]
[ main::fill1#0 ]
[ main::$22 ]
[ main::fill#0 ]
[ main::angle#0 ]
[ init_buckets::$15 ]
[ init_buckets::$5 ]
[ init_buckets::$12 ]
[ init_buckets::$16 ]
[ init_buckets::distance#0 ]
[ init_buckets::$9 ]
[ init_buckets::$13 ]
[ init_buckets::$17 ]
[ init_buckets::bucket#0 ]
[ init_buckets::$10 ]
[ init_buckets::$14 ]
[ malloc::mem#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::$24 ]
[ atan2_16::$23 ]
[ 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::result#0 ]
[ sqr::$0 ]
[ sqr::return#0 ]
[ SQUARES#1 ]
[ init_squares::$3 ]
[ init_squares::$4 ]
Allocated zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
Allocated zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
Allocated zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ]
Allocated zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Allocated zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ]
Allocated zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ]
Allocated zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
Allocated zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ]
Allocated zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ]
Allocated zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ]
Allocated zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
Allocated zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ]
Allocated zp ZP_WORD:21 [ heap_head#18 heap_head#1 ]
Allocated zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ]
Allocated zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Allocated zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
Allocated zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
Allocated zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ]
Allocated zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ]
Allocated zp ZP_WORD:32 [ 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 ZP_WORD:34 [ 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 ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ]
Allocated zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
Allocated zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ]
Allocated zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Allocated zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Allocated zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
Allocated zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
Allocated zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Allocated zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ]
Allocated zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ]
Allocated zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
Allocated zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ]
Allocated zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ]
Allocated zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ]
Allocated zp ZP_BYTE:60 [ sqr::val#2 sqr::val#1 sqr::val#0 ]
Allocated zp ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ]
Allocated zp ZP_WORD:63 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
Allocated zp ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ]
Allocated zp ZP_WORD:66 [ SCREEN_DIST#0 ]
Allocated zp ZP_WORD:68 [ SCREEN_ANGLE#0 ]
Allocated zp ZP_WORD:70 [ BUCKET_SIZES#0 ]
Allocated zp ZP_WORD:72 [ BUCKETS#0 ]
Allocated zp ZP_WORD:74 [ BUCKET_IDX#0 ]
Allocated zp ZP_WORD:76 [ init_angle_screen::screen#0 ]
Allocated zp ZP_WORD:78 [ init_buckets::screen#0 ]
Allocated zp ZP_BYTE:80 [ main::$21 ]
Allocated zp ZP_WORD:81 [ main::bucket#0 ]
Allocated zp ZP_BYTE:83 [ main::bucket_size#0 ]
Allocated zp ZP_WORD:84 [ main::fill1#0 ]
Allocated zp ZP_BYTE:86 [ main::$22 ]
Allocated zp ZP_WORD:87 [ main::fill#0 ]
Allocated zp ZP_WORD:89 [ main::angle#0 ]
Allocated zp ZP_WORD:91 [ init_buckets::$15 ]
Allocated zp ZP_WORD:93 [ init_buckets::$5 ]
Allocated zp ZP_WORD:95 [ init_buckets::$12 ]
Allocated zp ZP_WORD:97 [ init_buckets::$16 ]
Allocated zp ZP_BYTE:99 [ init_buckets::distance#0 ]
Allocated zp ZP_WORD:100 [ init_buckets::$9 ]
Allocated zp ZP_WORD:102 [ init_buckets::$13 ]
Allocated zp ZP_WORD:104 [ init_buckets::$17 ]
Allocated zp ZP_WORD:106 [ init_buckets::bucket#0 ]
Allocated zp ZP_WORD:108 [ init_buckets::$10 ]
Allocated zp ZP_BYTE:110 [ init_buckets::$14 ]
Allocated zp ZP_WORD:111 [ malloc::mem#0 ]
Allocated zp ZP_BYTE:113 [ init_angle_screen::$3 ]
Allocated zp ZP_BYTE:114 [ init_angle_screen::$4 ]
Allocated zp ZP_WORD:115 [ init_angle_screen::xw#0 ]
Allocated zp ZP_BYTE:117 [ init_angle_screen::$7 ]
Allocated zp ZP_WORD:118 [ init_angle_screen::yw#0 ]
Allocated zp ZP_WORD:120 [ atan2_16::x#0 ]
Allocated zp ZP_WORD:122 [ atan2_16::y#0 ]
Allocated zp ZP_WORD:124 [ atan2_16::return#2 ]
Allocated zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ]
Allocated zp ZP_WORD:128 [ init_angle_screen::$11 ]
Allocated zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ]
Allocated zp ZP_BYTE:131 [ init_angle_screen::$13 ]
Allocated zp ZP_BYTE:132 [ init_angle_screen::$14 ]
Allocated zp ZP_BYTE:133 [ init_angle_screen::$15 ]
Allocated zp ZP_BYTE:134 [ atan2_16::$24 ]
Allocated zp ZP_BYTE:135 [ atan2_16::$23 ]
Allocated zp ZP_BYTE:136 [ init_dist_screen::y2#0 ]
Allocated zp ZP_WORD:137 [ sqr::return#2 ]
Allocated zp ZP_WORD:139 [ init_dist_screen::yds#0 ]
Allocated zp ZP_BYTE:141 [ init_dist_screen::x2#0 ]
Allocated zp ZP_WORD:142 [ sqr::return#3 ]
Allocated zp ZP_WORD:144 [ init_dist_screen::xds#0 ]
Allocated zp ZP_WORD:146 [ init_dist_screen::ds#0 ]
Allocated zp ZP_WORD:148 [ sqrt::val#0 ]
Allocated zp ZP_BYTE:150 [ sqrt::return#2 ]
Allocated zp ZP_BYTE:151 [ init_dist_screen::d#0 ]
Allocated zp ZP_WORD:152 [ bsearch16u::key#0 ]
Allocated zp ZP_WORD:154 [ bsearch16u::return#3 ]
Allocated zp ZP_WORD:156 [ sqrt::found#0 ]
Allocated zp ZP_WORD:158 [ sqrt::$3 ]
Allocated zp ZP_WORD:160 [ sqrt::$1 ]
Allocated zp ZP_BYTE:162 [ sqrt::return#0 ]
Allocated zp ZP_BYTE:163 [ bsearch16u::$6 ]
Allocated zp ZP_BYTE:164 [ bsearch16u::$16 ]
Allocated zp ZP_WORD:165 [ bsearch16u::result#0 ]
Allocated zp ZP_BYTE:167 [ sqr::$0 ]
Allocated zp ZP_WORD:168 [ sqr::return#0 ]
Allocated zp ZP_WORD:170 [ SQUARES#1 ]
Allocated zp ZP_BYTE:172 [ init_squares::$3 ]
Allocated zp ZP_BYTE:173 [ init_squares::$4 ]

INITIAL ASM
Target platform is c64basic
  // File Comments
// Fill screen using a spiral based on distance-to-center / angle-to-center
// Utilizes a bucket sort for identifying the minimum angle/distance
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .const SIZEOF_WORD = 2
  .const SIZEOF_BYTE = 1
  .const SIZEOF_POINTER = 2
  .label RASTER = $d012
  .label BORDERCOL = $d020
  // Color Ram
  .label COLS = $d800
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  // 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 = '*'
  // The number of buckets in our bucket sort
  .const NUM_BUCKETS = $30
  .const NUM_SQUARES = $30
  .label heap_head = $15
  .label SQUARES = $aa
  // Screen containing distance to center
  .label SCREEN_DIST = $42
  // Screen containing angle to center
  .label SCREEN_ANGLE = $44
  // Array containing the bucket size for each of the distance buckets
  .label BUCKET_SIZES = $46
  // Buckets containing screen indices for each distance from the center.
  // BUCKETS[dist] is an array of words containing screen indices.
  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
  .label BUCKETS = $48
  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
  .label BUCKET_IDX = $4a
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call malloc 
  // [93] phi from @1 to malloc [phi:@1->malloc]
malloc_from_b1:
  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  jmp b4
  // @4
b4:
  // [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 
  // [93] phi from @4 to malloc [phi:@4->malloc]
malloc_from_b4:
  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy 
  jsr malloc
  jmp b5
  // @5
b5:
  // [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 @5 to @2 [phi:@5->@2]
b2_from_b5:
  jmp b2
  // @2
b2:
  // [7] call malloc 
  // [93] phi from @2 to malloc [phi:@2->malloc]
malloc_from_b2:
  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy 
  jsr malloc
  jmp b6
  // @6
b6:
  // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z BUCKET_SIZES
  lda.z malloc.mem+1
  sta.z BUCKET_SIZES+1
  // [9] call malloc 
  // [93] phi from @6 to malloc [phi:@6->malloc]
malloc_from_b6:
  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy 
  jsr malloc
  jmp b7
  // @7
b7:
  // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z BUCKETS
  lda.z malloc.mem+1
  sta.z BUCKETS+1
  // [11] call malloc 
  // [93] phi from @7 to malloc [phi:@7->malloc]
malloc_from_b7:
  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy 
  jsr malloc
  jmp b8
  // @8
b8:
  // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z BUCKET_IDX
  lda.z malloc.mem+1
  sta.z BUCKET_IDX+1
  // [13] phi from @8 to @3 [phi:@8->@3]
b3_from_b8:
  jmp b3
  // @3
b3:
  // [14] call main 
  jsr main
  // [15] phi from @3 to @end [phi:@3->@end]
bend_from_b3:
  jmp bend
  // @end
bend:
  // main
main: {
    .label _21 = $50
    .label _22 = $56
    .label bucket = $51
    .label bucket_size = $53
    .label bucket_idx = 2
    .label offset = 7
    .label fill = $57
    .label i = 3
    .label angle = $59
    .label min_angle = 6
    .label fill1 = $54
    .label min_offset = 4
    .label min_offset_5 = 7
    .label min_offset_9 = 7
    .label min_offset_11 = 7
    // asm { sei  }
    sei
    // [17] (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
    // [18] call init_dist_screen 
    // [171] phi from main to init_dist_screen [phi:main->init_dist_screen]
  init_dist_screen_from_main:
    jsr init_dist_screen
    jmp b15
    // main::@15
  b15:
    // [19] (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
    // [20] call init_angle_screen 
    jsr init_angle_screen
    jmp b16
    // main::@16
  b16:
    // [21] (byte*) init_buckets::screen#0 ← (byte[])(void*) SCREEN_DIST#0 -- pbuz1=pbuz2 
    lda.z SCREEN_DIST
    sta.z init_buckets.screen
    lda.z SCREEN_DIST+1
    sta.z init_buckets.screen+1
    // [22] call init_buckets 
    // [53] phi from main::@16 to init_buckets [phi:main::@16->init_buckets]
  init_buckets_from_b16:
    jsr init_buckets
    // [23] phi from main::@16 to main::@1 [phi:main::@16->main::@1]
  b1_from_b16:
    // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z bucket_idx
    jmp b1
    // main::@1
  b1:
    jmp b2
    // main::@2
  b2:
    // [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne b2
    jmp b3
    // main::@3
  b3:
    // [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
    // [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z bucket_idx
    asl
    sta.z _21
    // [27] (word[]) main::bucket#0 ← *((word*[])(void*) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptz2_derefidx_vbuz3 
    ldy.z _21
    lda (BUCKETS),y
    sta.z bucket
    iny
    lda (BUCKETS),y
    sta.z bucket+1
    // [28] (byte) main::bucket_size#0 ← *((byte[])(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 
    ldy.z bucket_idx
    lda (BUCKET_SIZES),y
    sta.z bucket_size
    // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
    lda.z bucket_size
    cmp #0
    beq b4
    // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
  b5_from_b3:
    // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z min_angle
    // [30] phi (word) main::min_offset#2 = (word) $ffff [phi:main::@3->main::@5#1] -- vwuz1=vwuc1 
    lda #<$ffff
    sta.z min_offset
    lda #>$ffff
    sta.z min_offset+1
    // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b5
    // main::@5
  b5:
    // [31] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 -- vbuz1_lt_vbuz2_then_la1 
    lda.z i
    cmp.z bucket_size
    bcc b6
    jmp b7
    // main::@7
  b7:
    // [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 
    lda.z min_offset
    cmp #<$ffff
    bne !+
    lda.z min_offset+1
    cmp #>$ffff
    beq b4
  !:
    jmp b11
    // main::@11
  b11:
    // [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z min_offset
    clc
    adc #<SCREEN_FILL
    sta.z fill1
    lda.z min_offset+1
    adc #>SCREEN_FILL
    sta.z fill1+1
    // [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 
    lda #FILL_CHAR
    ldy #0
    sta (fill1),y
    // [35] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // [23] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1]
  b1_from_b11:
  b1_from_b12:
    // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@11/main::@12->main::@1#0] -- register_copy 
    jmp b1
    // main::@4
  b4:
    // [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
    inc.z bucket_idx
    // [37] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BUCKETS
    cmp.z bucket_idx
    bne b12
    jmp b13
    // main::@13
  b13:
    // [38] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp b14
    // main::@14
  b14:
    // [39] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp b14
    // main::@12
  b12:
    // [40] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp b1_from_b12
    // main::@6
  b6:
    // [41] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _22
    // [42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuz3 
    ldy.z _22
    lda (bucket),y
    sta.z offset
    iny
    lda (bucket),y
    sta.z offset+1
    // [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z offset
    clc
    adc #<SCREEN_FILL
    sta.z fill
    lda.z offset+1
    adc #>SCREEN_FILL
    sta.z fill+1
    // [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
    lda #FILL_CHAR
    ldy #0
    cmp (fill),y
    beq b18
    jmp b9
    // main::@9
  b9:
    // [45] (byte*) main::angle#0 ← (byte[])(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 
    lda.z SCREEN_ANGLE
    clc
    adc.z offset
    sta.z angle
    lda.z SCREEN_ANGLE+1
    adc.z offset+1
    sta.z angle+1
    // [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 
    ldy #0
    lda (angle),y
    cmp.z min_angle
    beq !+
    bcs b17
  !:
    jmp b10
    // main::@10
  b10:
    // [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (angle),y
    sta.z min_angle
    // [48] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8]
  b8_from_b10:
  b8_from_b17:
  b8_from_b18:
    // [48] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy 
    // [48] phi (word) main::min_offset#5 = (word) main::offset#0 [phi:main::@10/main::@17/main::@18->main::@8#1] -- register_copy 
    jmp b8
    // main::@8
  b8:
    // [49] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [50] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
    lda.z min_offset_5
    sta.z min_offset
    lda.z min_offset_5+1
    sta.z min_offset+1
    // [30] phi from main::@8 to main::@5 [phi:main::@8->main::@5]
  b5_from_b8:
    // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy 
    // [30] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy 
    // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy 
    jmp b5
    // main::@17
  b17:
    // [51] (word~) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_9
    lda.z min_offset+1
    sta.z min_offset_9+1
    jmp b8_from_b17
    // main::@18
  b18:
    // [52] (word~) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_11
    lda.z min_offset+1
    sta.z min_offset_11+1
    jmp b8_from_b18
}
  // init_buckets
// Initialize buckets containing indices of chars on the screen with specific distances to the center.
// init_buckets(byte* zeropage($4e) screen)
init_buckets: {
    .label _5 = $5d
    .label _9 = $64
    .label _10 = $6c
    .label _12 = $5f
    .label _13 = $66
    .label _14 = $6e
    .label screen = $4e
    .label i = 9
    .label dist = $a
    .label i1 = $c
    .label i2 = $e
    .label i3 = $10
    .label distance = $63
    .label bucket = $6a
    .label dist_3 = $11
    .label i4 = $13
    .label dist_5 = $11
    .label _15 = $5b
    .label _16 = $61
    .label _17 = $68
    .label dist_8 = $11
    // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
  b1_from_init_buckets:
    // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp b1
  // Init bucket sizes to 0
    // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
  b1_from_b1:
    // [54] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy 
    jmp b1
    // init_buckets::@1
  b1:
    // [55] *((byte[])(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 
    lda #0
    ldy.z i
    sta (BUCKET_SIZES),y
    // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BUCKETS-1+1
    cmp.z i
    bne b1_from_b1
    jmp b2
    // init_buckets::@2
  b2:
    // [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
    lda.z screen
    sta.z dist
    lda.z screen+1
    sta.z dist+1
    // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
  b3_from_b2:
    // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z i1
    lda #>0
    sta.z i1+1
    // [59] phi (byte*) init_buckets::dist#4 = (byte*~) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy 
    jmp b3
    // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
  b3_from_b3:
    // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy 
    // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy 
    jmp b3
    // init_buckets::@3
  b3:
    // [60] *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2 
    ldy #0
    lda (dist),y
    tay
    lda (BUCKET_SIZES),y
    clc
    adc #1
    sta (BUCKET_SIZES),y
    // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
    inc.z dist
    bne !+
    inc.z dist+1
  !:
    // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
    inc.z i1
    bne !+
    inc.z i1+1
  !:
    // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 
    lda.z i1+1
    cmp #>$3e8
    bne b3_from_b3
    lda.z i1
    cmp #<$3e8
    bne b3_from_b3
    // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4]
  b4_from_b3:
    // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z i2
    lda #>0
    sta.z i2+1
    jmp b4
  // Allocate the buckets
    // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4]
  b4_from_b8:
    // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy 
    jmp b4
    // init_buckets::@4
  b4:
    // [65] (byte*~) init_buckets::$15 ← (byte[])(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 
    lda.z BUCKET_SIZES
    clc
    adc.z i2
    sta.z _15
    lda.z BUCKET_SIZES+1
    adc.z i2+1
    sta.z _15+1
    // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz2_rol_1 
    ldy #0
    lda.z _15
    asl
    sta.z malloc.size
    lda #0
    rol
    sta.z malloc.size+1
    // [67] call malloc 
    // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc]
  malloc_from_b4:
    // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy 
    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy 
    jsr malloc
    jmp b8
    // init_buckets::@8
  b8:
    // [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
    lda.z malloc.mem
    sta.z _5
    lda.z malloc.mem+1
    sta.z _5+1
    // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 
    lda.z i2
    asl
    sta.z _12
    lda.z i2+1
    rol
    sta.z _12+1
    // [70] (word**~) init_buckets::$16 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz3 
    lda.z BUCKETS
    clc
    adc.z _12
    sta.z _16
    lda.z BUCKETS+1
    adc.z _12+1
    sta.z _16+1
    // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 
    ldy #0
    lda.z _5
    sta (_16),y
    iny
    lda.z _5+1
    sta (_16),y
    // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
    inc.z i2
    bne !+
    inc.z i2+1
  !:
    // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 
    lda.z i2+1
    cmp #>NUM_BUCKETS-1+1
    bne b4_from_b8
    lda.z i2
    cmp #<NUM_BUCKETS-1+1
    bne b4_from_b8
    // [74] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5]
  b5_from_b8:
    // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i3
    jmp b5
  // Iterate all distances and fill the buckets with indices into the screens
    // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
  b5_from_b5:
    // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy 
    jmp b5
    // init_buckets::@5
  b5:
    // [75] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuz2=vbuc1 
    lda #0
    ldy.z i3
    sta (BUCKET_IDX),y
    // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 
    inc.z i3
    // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BUCKETS-1+1
    cmp.z i3
    bne b5_from_b5
    jmp b6
    // init_buckets::@6
  b6:
    // [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
    lda.z screen
    sta.z dist_8
    lda.z screen+1
    sta.z dist_8+1
    // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7]
  b7_from_b6:
    // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z i4
    lda #>0
    sta.z i4+1
    // [79] phi (byte*) init_buckets::dist#5 = (byte*~) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy 
    jmp b7
    // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7]
  b7_from_b7:
    // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy 
    // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy 
    jmp b7
    // init_buckets::@7
  b7:
    // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (dist_5),y
    sta.z distance
    // [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
    lda.z distance
    sta.z _9
    lda #0
    sta.z _9+1
    // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz2_rol_1 
    lda.z _9
    asl
    sta.z _13
    lda.z _9+1
    rol
    sta.z _13+1
    // [83] (word**~) init_buckets::$17 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz3 
    lda.z BUCKETS
    clc
    adc.z _13
    sta.z _17
    lda.z BUCKETS+1
    adc.z _13+1
    sta.z _17+1
    // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz2 
    ldy #0
    lda (_17),y
    sta.z bucket
    iny
    lda (_17),y
    sta.z bucket+1
    // [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 
    lda.z dist_5
    sec
    sbc.z screen
    sta.z _10
    lda.z dist_5+1
    sbc.z screen+1
    sta.z _10+1
    // [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuz1=pbuz2_derefidx_vbuz3_rol_1 
    ldy.z distance
    lda (BUCKET_IDX),y
    asl
    sta.z _14
    // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuz2=vwuz3 
    ldy.z _14
    lda.z _10
    sta (bucket),y
    iny
    lda.z _10+1
    sta (bucket),y
    // [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 
    ldy.z distance
    lda (BUCKET_IDX),y
    clc
    adc #1
    sta (BUCKET_IDX),y
    // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
    inc.z dist_3
    bne !+
    inc.z dist_3+1
  !:
    // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
    inc.z i4
    bne !+
    inc.z i4+1
  !:
    // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 
    lda.z i4+1
    cmp #>$3e8
    bne b7_from_b7
    lda.z i4
    cmp #<$3e8
    bne b7_from_b7
    jmp breturn
    // init_buckets::@return
  breturn:
    // [92] 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($17) size)
malloc: {
    .label mem = $6f
    .label size = $17
    // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- 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
    // [95] (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:
    // [96] return 
    rts
}
  // 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($4c) screen)
init_angle_screen: {
    .label _3 = $71
    .label _4 = $72
    .label _7 = $75
    .label _11 = $80
    .label _13 = $83
    .label _14 = $84
    .label _15 = $85
    .label screen = $4c
    .label screen_topline = $1a
    .label screen_bottomline = $1c
    .label xw = $73
    .label yw = $76
    .label angle_w = $7e
    .label ang_w = $82
    .label x = $1e
    .label xb = $1f
    .label y = $19
    // [97] (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
    // [98] (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
    // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  b1_from_init_angle_screen:
    // [99] 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 
    // [99] 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 
    // [99] 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
    // [99] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  b1_from_b4:
    // [99] 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 
    // [99] 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 
    // [99] 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:
    // [100] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3]
  b3_from_b1:
    // [100] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [100] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp b3
    // [100] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3]
  b3_from_b2:
    // [100] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy 
    // [100] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy 
    jmp b3
    // init_angle_screen::@3
  b3:
    // [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z x
    asl
    sta.z _3
    // [102] (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
    // [103] (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
    // [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z y
    asl
    sta.z _7
    // [105] (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
    // [106] (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
    // [107] (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
    // [108] call atan2_16 
    jsr atan2_16
    // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 
    lda.z atan2_16.return
    sta.z atan2_16.return_2
    lda.z atan2_16.return+1
    sta.z atan2_16.return_2+1
    jmp b5
    // init_angle_screen::@5
  b5:
    // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 
    lda.z atan2_16.return_2
    sta.z angle_w
    lda.z atan2_16.return_2+1
    sta.z angle_w+1
    // [111] (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
    // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z _11+1
    sta.z ang_w
    // [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [114] (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
    // [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z _13
    ldy.z xb
    sta (screen_topline),y
    // [116] (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
    // [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z _14
    ldy.z x
    sta (screen_topline),y
    // [118] (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
    // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z _15
    ldy.z x
    sta (screen_bottomline),y
    // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 
    dec.z xb
    jmp b2
    // init_angle_screen::@2
  b2:
    // [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc b3_from_b2
    jmp b4
    // init_angle_screen::@4
  b4:
    // [123] (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
    // [124] (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
  !:
    // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [126] 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:
    // [127] return 
    rts
}
  // atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zeropage($78) x, signed word zeropage($7a) y)
atan2_16: {
    .label _2 = $20
    .label _7 = $22
    .label _23 = $87
    .label _24 = $86
    .label yi = $20
    .label xi = $22
    .label angle = $27
    .label xd = $2c
    .label yd = $2a
    .label shift = $29
    .label angle_2 = $25
    .label angle_3 = $25
    .label i = $24
    .label return = $27
    .label x = $78
    .label y = $7a
    .label return_2 = $7c
    .label angle_6 = $25
    .label angle_12 = $25
    .label angle_13 = $25
    // [128] 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:
    // [129] (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
    // [130] 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:
    // [130] 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:
    // [131] 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:
    // [132] (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
    // [133] 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:
    // [133] 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:
    // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  b10_from_b6:
    // [134] phi (word) atan2_16::angle#12 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z angle_12
    lda #>0
    sta.z angle_12+1
    // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [134] 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:
    // [135] 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
    // [136] 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:
    // [136] 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:
    // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
    lda.z angle_6+1
    lsr
    sta.z angle+1
    lda.z angle_6
    ror
    sta.z angle
    // [138] 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:
    // [139] (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
    // [140] 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:
    // [140] 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:
    // [141] 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:
    // [142] (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
    // [143] 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:
    // [143] 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:
    // [144] return 
    rts
    // atan2_16::@11
  b11:
    // [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 
    lda.z i
    sta.z shift
    // [146] (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
    // [147] (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
    // [148] 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:
    // [148] 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 
    // [148] 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 
    // [148] 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:
    // [149] 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:
    // [150] 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:
    // [151] (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
    // [152] (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
    // [153] 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:
    // [153] 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 
    // [153] 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:
    // [154] 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:
    // [155] (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
    // [156] (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
    // [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _24
    // [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 
    ldy.z _24
    sec
    lda.z angle_3
    sbc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle_3
    lda.z angle_3+1
    sbc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle_3+1
    // [159] 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:
    // [159] 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 
    // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [159] 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:
    // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(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
    // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  b10_from_b19:
    // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [134] 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:
    // [162] (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
    // [163] (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
    // [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _23
    // [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 
    ldy.z _23
    clc
    lda.z angle_2
    adc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle_2
    lda.z angle_2+1
    adc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle_2+1
    jmp b19_from_b18
    // atan2_16::@14
  b14:
    // [166] (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
    // [167] (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
    // [168] (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:
    // [169] (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:
    // [170] (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
// Utilizes symmetry around the center
// init_dist_screen(byte* zeropage($2f) screen)
init_dist_screen: {
    .label _5 = $33
    .label _7 = $33
    .label _14 = $36
    .label _16 = $36
    .label screen = $2f
    .label screen_bottomline = $31
    .label y2 = $88
    .label yd = $33
    .label yds = $8b
    .label x2 = $8d
    .label screen_topline = $2f
    .label y = $2e
    .label xd = $36
    .label xds = $90
    .label ds = $92
    .label d = $97
    .label x = $34
    .label xb = $35
    // [172] call init_squares 
    // [244] 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:
    // [173] (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
    // [174] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
  b1_from_b11:
    // [174] 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 
    // [174] 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 
    // [174] 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
    // [174] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
  b1_from_b7:
    // [174] 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 
    // [174] 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 
    // [174] 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:
    // [175] (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
    // [176] 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:
    // [177] (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
    // [178] 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:
    // [178] 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:
    // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 
    lda.z yd
    sta.z sqr.val
    // [180] call sqr 
    // [240] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
  sqr_from_b4:
    // [240] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // [181] (word) sqr::return#2 ← (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 b12
    // init_dist_screen::@12
  b12:
    // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 
    lda.z sqr.return_2
    sta.z yds
    lda.z sqr.return_2+1
    sta.z yds+1
    // [183] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6]
  b6_from_b12:
    // [183] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [183] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp b6
    // [183] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6]
  b6_from_b5:
    // [183] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy 
    // [183] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy 
    jmp b6
    // init_dist_screen::@6
  b6:
    // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z x
    asl
    sta.z x2
    // [185] 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:
    // [186] (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
    // [187] 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:
    // [187] 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:
    // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 
    lda.z xd
    sta.z sqr.val
    // [189] call sqr 
    // [240] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
  sqr_from_b10:
    // [240] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy 
    jsr sqr
    // [190] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda.z sqr.return
    sta.z sqr.return_3
    lda.z sqr.return+1
    sta.z sqr.return_3+1
    jmp b13
    // init_dist_screen::@13
  b13:
    // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 
    lda.z sqr.return_3
    sta.z xds
    lda.z sqr.return_3+1
    sta.z xds+1
    // [192] (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
    // [193] (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
    // [194] call sqrt 
    jsr sqrt
    // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 
    lda.z sqrt.return
    sta.z sqrt.return_2
    jmp b14
    // init_dist_screen::@14
  b14:
    // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 
    lda.z sqrt.return_2
    sta.z d
    // [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z x
    sta (screen_topline),y
    // [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z x
    sta (screen_bottomline),y
    // [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z xb
    sta (screen_topline),y
    // [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z xb
    sta (screen_bottomline),y
    // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 
    dec.z xb
    jmp b5
    // init_dist_screen::@5
  b5:
    // [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc b6_from_b5
    jmp b7
    // init_dist_screen::@7
  b7:
    // [204] (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
  !:
    // [205] (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
    // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [207] 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:
    // [208] return 
    rts
    // init_dist_screen::@8
  b8:
    // [209] (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:
    // [210] (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($94) val)
sqrt: {
    .label _1 = $a0
    .label _3 = $9e
    .label found = $9c
    .label return = $a2
    .label val = $94
    .label return_2 = $96
    // [211] (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
    // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z bsearch16u.items_1
    lda.z SQUARES+1
    sta.z bsearch16u.items_1+1
    // [213] call bsearch16u 
    // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
  bsearch16u_from_sqrt:
    jsr bsearch16u
    // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 
    lda.z bsearch16u.return
    sta.z bsearch16u.return_3
    lda.z bsearch16u.return+1
    sta.z bsearch16u.return_3+1
    jmp b1
    // sqrt::@1
  b1:
    // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 
    lda.z bsearch16u.return_3
    sta.z found
    lda.z bsearch16u.return_3+1
    sta.z found+1
    // [216] (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
    // [217] (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
    // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 
    lda.z _1
    sta.z return
    jmp breturn
    // sqrt::@return
  breturn:
    // [219] 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($98) key, word* zeropage($39) items, byte zeropage($3b) num)
bsearch16u: {
    .label _2 = $39
    .label _6 = $a3
    .label _16 = $a4
    .label pivot = $39
    .label result = $a5
    .label return = $39
    .label num = $3b
    .label items = $39
    .label key = $98
    .label items_1 = $37
    .label return_3 = $9a
    .label items_10 = $37
    .label items_16 = $37
    // [221] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4]
  b4_from_bsearch16u:
    // [221] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy 
    // [221] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuz1=vbuc1 
    lda #NUM_SQUARES
    sta.z num
    jmp b4
    // bsearch16u::@4
  b4:
    // [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuz1=vbuz2_ror_1 
    lda.z num
    lsr
    sta.z _6
    // [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z _6
    asl
    sta.z _16
    // [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 
    lda.z _16
    clc
    adc.z items_10
    sta.z pivot
    lda #0
    adc.z items_10+1
    sta.z pivot+1
    // [225] (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
    // [226] 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
    // [227] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return]
  breturn_from_b2:
  breturn_from_b4:
    // [227] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy 
    jmp breturn
    // bsearch16u::@return
  breturn:
    // [228] return 
    rts
    // bsearch16u::@6
  b6:
    // [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 
    lda.z result+1
    bmi b10
    bne !+
    lda.z result
    beq b10
  !:
    jmp b8
    // bsearch16u::@8
  b8:
    // [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc.z items
    sta.z items
    bcc !+
    inc.z items+1
  !:
    // [231] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuz1=_dec_vbuz1 
    dec.z num
    // [232] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7]
  b7_from_b10:
  b7_from_b8:
    // [232] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy 
    // [232] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy 
    jmp b7
    // bsearch16u::@7
  b7:
    // [233] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 
    lsr.z num
    jmp b3
    // bsearch16u::@3
  b3:
    // [234] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuz1_gt_0_then_la1 
    lda.z num
    bne b9
    jmp b5
    // bsearch16u::@5
  b5:
    // [235] if(*((word*) bsearch16u::items#11)<=(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:
    // [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (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
    // [237] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
  b2_from_b1:
  b2_from_b5:
    // [237] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    jmp b2
    // bsearch16u::@2
  b2:
    jmp breturn_from_b2
    // bsearch16u::@9
  b9:
    // [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 
    lda.z items
    sta.z items_16
    lda.z items+1
    sta.z items_16+1
    // [221] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4]
  b4_from_b9:
    // [221] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy 
    // [221] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy 
    jmp b4
    // bsearch16u::@10
  b10:
    // [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 
    lda.z items_10
    sta.z items
    lda.z items_10+1
    sta.z items+1
    jmp b7_from_b10
}
  // sqr
// Find the square of a byte value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte zeropage($3c) val)
sqr: {
    .label _0 = $a7
    .label return = $a8
    .label val = $3c
    .label return_2 = $89
    .label return_3 = $8e
    // [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z val
    asl
    sta.z _0
    // [242] (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:
    // [243] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label _3 = $ac
    .label _4 = $ad
    .label squares = $3f
    .label sqr = $3d
    .label i = $41
    // [245] call malloc 
    // [93] phi from init_squares to malloc [phi:init_squares->malloc]
  malloc_from_init_squares:
    // [93] phi (word) malloc::size#7 = (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
    lda #>NUM_SQUARES*SIZEOF_WORD
    sta.z malloc.size+1
    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
    jsr malloc
    jmp b2
    // init_squares::@2
  b2:
    // [246] (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
    // [247] (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
    // [248] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
  b1_from_b2:
    // [248] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
    // [248] 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
    // [248] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
  b1_from_b1:
    // [248] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
    // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
    // [248] 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:
    // [249] *((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
    // [250] (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
  !:
    // [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z _3
    // [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuz1=vbuz2_plus_1 
    ldy.z _3
    iny
    sty.z _4
    // [253] (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
  !:
    // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [255] 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:
    // [256] return 
    rts
}
  // File Data
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
CORDIC_ATAN2_ANGLES_16:
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2


REGISTER UPLIFT POTENTIAL REGISTERS
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 [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [17] (byte*) init_dist_screen::screen#0 ← (byte[])(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [19] (byte*) init_angle_screen::screen#0 ← (byte[])(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [21] (byte*) init_buckets::screen#0 ← (byte[])(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
Statement [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a 
Statement [27] (word[]) main::bucket#0 ← *((word*[])(void*) BUCKETS#0 + (byte~) main::$21) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
Statement [28] (byte) main::bucket_size#0 ← *((byte[])(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y 
Statement [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
Statement [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a 
Statement [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y 
Statement [41] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$22 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$22 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:83 [ main::bucket_size#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Statement [42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:83 [ main::bucket_size#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Statement [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a 
Statement [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y 
Statement [45] (byte*) main::angle#0 ← (byte[])(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a 
Statement [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y 
Statement [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y 
Statement [50] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ) always clobbers reg byte a 
Statement [51] (word~) main::min_offset#9 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ) always clobbers reg byte a 
Statement [52] (word~) main::min_offset#11 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ) always clobbers reg byte a 
Statement [55] *((byte[])(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ]
Statement [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a 
Statement [60] *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a 
Statement [65] (byte*~) init_buckets::$15 ← (byte[])(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a 
Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y 
Statement [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a 
Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
Statement [70] (word**~) init_buckets::$16 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a 
Statement [75] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ]
Statement [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a 
Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:99 [ init_buckets::distance#0 ]
Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a 
Statement [83] (word**~) init_buckets::$17 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a 
Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:99 [ init_buckets::distance#0 ]
Statement [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a 
Statement [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a reg byte y 
Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
Statement [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y 
Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a 
Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a 
Statement [95] (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 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [97] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
Statement [98] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
Statement [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ]
Statement [102] (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#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [103] (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#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ]
Statement [104] (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#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [105] (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#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [106] (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#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [107] (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#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [109] (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#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [110] (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#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [111] (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#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [112] (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ]
Statement [114] (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 ZP_BYTE:130 [ init_angle_screen::ang_w#0 ]
Statement [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [116] (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [118] (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#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (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#5 init_angle_screen::xb#5 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y 
Statement [123] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [124] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [131] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [132] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [135] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ]
Statement [137] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [146] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Statement [147] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [151] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [152] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [154] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [155] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [156] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [157] (byte~) atan2_16::$24 ← (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::$24 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$24 ] ) always clobbers reg byte a 
Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [162] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [163] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [164] (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::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [166] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [167] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [169] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [170] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ]
Statement [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a 
Statement [190] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#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#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
Statement [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#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#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ]
Statement [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 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 ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ]
Statement [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y 
Statement [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a 
Statement [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a 
Statement [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
Statement [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
Statement [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
Statement [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 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 ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ]
Statement [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
Statement [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#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 [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [17] (byte*) init_dist_screen::screen#0 ← (byte[])(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [19] (byte*) init_angle_screen::screen#0 ← (byte[])(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [21] (byte*) init_buckets::screen#0 ← (byte[])(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a 
Statement [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a 
Statement [27] (word[]) main::bucket#0 ← *((word*[])(void*) BUCKETS#0 + (byte~) main::$21) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y 
Statement [28] (byte) main::bucket_size#0 ← *((byte[])(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y 
Statement [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
Statement [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a 
Statement [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y 
Statement [41] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$22 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$22 ] ) always clobbers reg byte a 
Statement [42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y 
Statement [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a 
Statement [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y 
Statement [45] (byte*) main::angle#0 ← (byte[])(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a 
Statement [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y 
Statement [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y 
Statement [50] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ) always clobbers reg byte a 
Statement [51] (word~) main::min_offset#9 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ) always clobbers reg byte a 
Statement [52] (word~) main::min_offset#11 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ) always clobbers reg byte a 
Statement [55] *((byte[])(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a 
Statement [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a 
Statement [60] *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a 
Statement [65] (byte*~) init_buckets::$15 ← (byte[])(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a 
Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y 
Statement [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a 
Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
Statement [70] (word**~) init_buckets::$16 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a 
Statement [75] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a 
Statement [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a 
Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a 
Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a 
Statement [83] (word**~) init_buckets::$17 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a 
Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y 
Statement [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a 
Statement [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a reg byte y 
Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
Statement [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y 
Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a 
Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a 
Statement [95] (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 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [97] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
Statement [98] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
Statement [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a 
Statement [102] (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#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [103] (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#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Statement [104] (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#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [105] (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#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [106] (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#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [107] (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#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [109] (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#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [110] (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#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [111] (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#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [112] (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
Statement [114] (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Statement [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [116] (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [118] (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#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (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#5 init_angle_screen::xb#5 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y 
Statement [123] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [124] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [131] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [132] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [135] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [137] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [146] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [147] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [151] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [152] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [154] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [155] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [156] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [157] (byte~) atan2_16::$24 ← (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::$24 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$24 ] ) always clobbers reg byte a 
Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [162] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [163] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [164] (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::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [166] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [167] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [169] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [170] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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 ] ) always clobbers reg byte a 
Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a 
Statement [190] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#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#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
Statement [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#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#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:151 [ init_dist_screen::d#0 ]
Statement [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 ] ) always clobbers reg byte y 
Statement [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a 
Statement [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Statement [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y 
Statement [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a 
Statement [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a 
Statement [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
Statement [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
Statement [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
Statement [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
Statement [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#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 [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] (  [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [17] (byte*) init_dist_screen::screen#0 ← (byte[])(void*) SCREEN_DIST#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [19] (byte*) init_angle_screen::screen#0 ← (byte[])(void*) SCREEN_ANGLE#0 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ( main:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_angle_screen::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [21] (byte*) init_buckets::screen#0 ← (byte[])(void*) SCREEN_DIST#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a 
Statement [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$21 ] ) always clobbers reg byte a 
Statement [27] (word[]) main::bucket#0 ← *((word*[])(void*) BUCKETS#0 + (byte~) main::$21) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y 
Statement [28] (byte) main::bucket_size#0 ← *((byte[])(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 ] ) always clobbers reg byte a reg byte y 
Statement [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
Statement [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a 
Statement [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y 
Statement [41] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$22 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::$22 ] ) always clobbers reg byte a 
Statement [42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y 
Statement [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::fill#0 ] ) always clobbers reg byte a 
Statement [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 ] ) always clobbers reg byte a reg byte y 
Statement [45] (byte*) main::angle#0 ← (byte[])(void*) SCREEN_ANGLE#0 + (word) main::offset#0 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a 
Statement [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_offset#2 main::min_angle#2 main::offset#0 main::angle#0 ] ) always clobbers reg byte a reg byte y 
Statement [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::offset#0 main::min_angle#1 ] ) always clobbers reg byte a reg byte y 
Statement [50] (word~) main::min_offset#8 ← (word) main::min_offset#5 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#1 main::min_offset#8 main::min_angle#5 ] ) always clobbers reg byte a 
Statement [51] (word~) main::min_offset#9 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#9 ] ) always clobbers reg byte a 
Statement [52] (word~) main::min_offset#11 ← (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ( main:14 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 main::bucket_size#0 main::i#2 main::min_angle#2 main::min_offset#11 ] ) always clobbers reg byte a 
Statement [55] *((byte[])(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i#2 heap_head#1 ] ) always clobbers reg byte a 
Statement [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#6 heap_head#1 ] ) always clobbers reg byte a 
Statement [60] *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#4 init_buckets::i1#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
Statement [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#1 init_buckets::i1#1 heap_head#1 ] ) always clobbers reg byte a 
Statement [65] (byte*~) init_buckets::$15 ← (byte[])(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$15 heap_head#1 ] ) always clobbers reg byte a 
Statement [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::size#6 heap_head#1 ] ) always clobbers reg byte a reg byte y 
Statement [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 heap_head#1 ] ) always clobbers reg byte a 
Statement [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
Statement [70] (word**~) init_buckets::$16 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$12 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$5 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
Statement [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ) always clobbers reg byte a reg byte y 
Statement [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#1 heap_head#1 ] ) always clobbers reg byte a 
Statement [75] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i3#2 ] ) always clobbers reg byte a 
Statement [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#8 ] ) always clobbers reg byte a 
Statement [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
Statement [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$9 ] ) always clobbers reg byte a 
Statement [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$13 ] ) always clobbers reg byte a 
Statement [83] (word**~) init_buckets::$17 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$13 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::$17 ] ) always clobbers reg byte a 
Statement [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 ] ) always clobbers reg byte a reg byte y 
Statement [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 ] ) always clobbers reg byte a 
Statement [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 init_buckets::bucket#0 init_buckets::$10 init_buckets::$14 ] ) always clobbers reg byte a reg byte y 
Statement [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 init_buckets::distance#0 ] ) always clobbers reg byte a reg byte y 
Statement [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#5 init_buckets::i4#2 ] ) always clobbers reg byte a reg byte y 
Statement [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ( main:14::init_buckets:22 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::dist#3 init_buckets::i4#1 ] ) always clobbers reg byte a 
Statement [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] malloc:4 [ malloc::mem#0 ] malloc:7 [ malloc::mem#0 ] malloc:9 [ malloc::mem#0 ] malloc:11 [ malloc::mem#0 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 ] ) always clobbers reg byte a 
Statement [95] (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 ] malloc:7 [ malloc::mem#0 heap_head#1 ] malloc:9 [ malloc::mem#0 heap_head#1 ] malloc:11 [ malloc::mem#0 heap_head#1 ] main:14::init_buckets:22::malloc:67 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 heap_head#1 ] main:14::init_dist_screen:18::init_squares:172::malloc:245 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 malloc::mem#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [97] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ) always clobbers reg byte a 
Statement [98] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ) always clobbers reg byte a 
Statement [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$3 ] ) always clobbers reg byte a 
Statement [102] (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#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [103] (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#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Statement [104] (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#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [105] (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#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [106] (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#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [107] (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#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [109] (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#5 init_angle_screen::xb#5 atan2_16::return#2 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [110] (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#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [111] (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#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [112] (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
Statement [114] (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Statement [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [116] (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (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#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [118] (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#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (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#5 init_angle_screen::xb#5 ] ( main:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 ] ) always clobbers reg byte y 
Statement [123] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ) always clobbers reg byte a 
Statement [124] (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:14::init_angle_screen:20 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ) always clobbers reg byte a 
Statement [128] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [129] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [131] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [132] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [135] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [137] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [138] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [139] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [141] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [142] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [146] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [147] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [151] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [152] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [154] 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [155] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [156] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [157] (byte~) atan2_16::$24 ← (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::$24 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$24 ] ) always clobbers reg byte a 
Statement [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [ 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [162] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [163] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 ] ) always clobbers reg byte a 
Statement [164] (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::yi#1 atan2_16::xi#1 atan2_16::$23 ] ( main:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#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 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [ 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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [166] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [167] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 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 [169] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [170] (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:14::init_angle_screen:20::atan2_16:108 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#5 init_angle_screen::xb#5 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [ init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 init_dist_screen::screen_bottomline#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [ heap_head#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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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 ] ) always clobbers reg byte a 
Statement [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 init_dist_screen::$5 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [181] (word) sqr::return#2 ← (word) sqr::return#0 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#2 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [ heap_head#1 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:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a 
Statement [190] (word) sqr::return#3 ← (word) sqr::return#0 [ heap_head#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#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
Statement [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [ heap_head#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#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 [ heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 ] ) always clobbers reg byte y 
Statement [204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_bottomline#11 init_dist_screen::screen_topline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [ heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#1 init_dist_screen::screen_bottomline#1 SQUARES#1 ] ( main:14::init_dist_screen:18 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 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 [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
Statement [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
Statement [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqrt:194 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$6 ] ) always clobbers reg byte a 
Statement [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [225] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Statement [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#10 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [235] if(*((word*) bsearch16u::items#11)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#11 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::items#11 ] ) always clobbers reg byte a reg byte y 
Statement [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 [ bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#0 bsearch16u::items#16 ] ) always clobbers reg byte a 
Statement [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 [ bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ( main:14::init_dist_screen:18::sqrt:194::bsearch16u:213 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 bsearch16u::key#0 bsearch16u::num#10 bsearch16u::items#19 ] ) always clobbers reg byte a 
Statement [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 SQUARES#1 sqr::$0 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
Statement [242] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:14::init_dist_screen:18::sqr:180 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#1 init_dist_screen::y#10 init_dist_screen::screen_topline#11 init_dist_screen::screen_bottomline#11 sqr::return#0 SQUARES#1 ] main:14::init_dist_screen:18::sqr:189 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 heap_head#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#10 init_dist_screen::xb#10 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
Statement [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [247] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::squares#0 ] ) always clobbers reg byte a 
Statement [249] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::squares#2 init_squares::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [250] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 ] ) always clobbers reg byte a 
Statement [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [ heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::sqr#2 init_squares::i#2 init_squares::squares#1 init_squares::$3 ] ) always clobbers reg byte a 
Statement [253] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [ heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ( main:14::init_dist_screen:18::init_squares:172 [ SCREEN_DIST#0 SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_dist_screen::screen#0 heap_head#1 SQUARES#1 init_squares::i#2 init_squares::sqr#1 init_squares::squares#1 ] ) always clobbers reg byte a 
Potential registers zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] : zp ZP_BYTE:2 , reg byte x , 
Potential registers zp ZP_BYTE:3 [ main::i#2 main::i#1 ] : zp ZP_BYTE:3 , reg byte x , 
Potential registers zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] : zp ZP_WORD:4 , 
Potential registers zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] : zp ZP_BYTE:6 , reg byte x , 
Potential registers zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] : zp ZP_WORD:7 , 
Potential registers zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] : zp ZP_WORD:10 , 
Potential registers zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] : zp ZP_WORD:12 , 
Potential registers zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] : zp ZP_WORD:14 , 
Potential registers zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] : zp ZP_BYTE:16 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] : zp ZP_WORD:17 , 
Potential registers zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] : zp ZP_WORD:19 , 
Potential registers zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] : zp ZP_WORD:21 , 
Potential registers zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] : zp ZP_WORD:23 , 
Potential registers zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp ZP_BYTE:25 , reg byte x , 
Potential registers zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp ZP_WORD:26 , 
Potential registers zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp ZP_WORD:28 , 
Potential registers zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] : zp ZP_BYTE:30 , reg byte x , 
Potential registers zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] : zp ZP_BYTE:31 , reg byte x , 
Potential registers zp ZP_WORD:32 [ 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 ZP_WORD:32 , 
Potential registers zp ZP_WORD:34 [ 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 ZP_WORD:34 , 
Potential registers zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] : zp ZP_BYTE:36 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp ZP_WORD:37 , 
Potential registers zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp ZP_WORD:39 , 
Potential registers zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp ZP_BYTE:41 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp ZP_WORD:42 , 
Potential registers zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp ZP_WORD:44 , 
Potential registers zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp ZP_BYTE:46 , reg byte x , 
Potential registers zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] : zp ZP_WORD:47 , 
Potential registers zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] : zp ZP_WORD:49 , 
Potential registers zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp ZP_BYTE:51 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] : zp ZP_BYTE:52 , reg byte x , 
Potential registers zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] : zp ZP_BYTE:53 , reg byte x , 
Potential registers zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] : zp ZP_WORD:55 , 
Potential registers zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] : zp ZP_WORD:57 , 
Potential registers zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] : zp ZP_BYTE:59 , reg byte x , 
Potential registers zp ZP_BYTE:60 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp ZP_WORD:61 , 
Potential registers zp ZP_WORD:63 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp ZP_WORD:63 , 
Potential registers zp ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ] : zp ZP_BYTE:65 , reg byte x , 
Potential registers zp ZP_WORD:66 [ SCREEN_DIST#0 ] : zp ZP_WORD:66 , 
Potential registers zp ZP_WORD:68 [ SCREEN_ANGLE#0 ] : zp ZP_WORD:68 , 
Potential registers zp ZP_WORD:70 [ BUCKET_SIZES#0 ] : zp ZP_WORD:70 , 
Potential registers zp ZP_WORD:72 [ BUCKETS#0 ] : zp ZP_WORD:72 , 
Potential registers zp ZP_WORD:74 [ BUCKET_IDX#0 ] : zp ZP_WORD:74 , 
Potential registers zp ZP_WORD:76 [ init_angle_screen::screen#0 ] : zp ZP_WORD:76 , 
Potential registers zp ZP_WORD:78 [ init_buckets::screen#0 ] : zp ZP_WORD:78 , 
Potential registers zp ZP_BYTE:80 [ main::$21 ] : zp ZP_BYTE:80 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:81 [ main::bucket#0 ] : zp ZP_WORD:81 , 
Potential registers zp ZP_BYTE:83 [ main::bucket_size#0 ] : zp ZP_BYTE:83 , reg byte x , 
Potential registers zp ZP_WORD:84 [ main::fill1#0 ] : zp ZP_WORD:84 , 
Potential registers zp ZP_BYTE:86 [ main::$22 ] : zp ZP_BYTE:86 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:87 [ main::fill#0 ] : zp ZP_WORD:87 , 
Potential registers zp ZP_WORD:89 [ main::angle#0 ] : zp ZP_WORD:89 , 
Potential registers zp ZP_WORD:91 [ init_buckets::$15 ] : zp ZP_WORD:91 , 
Potential registers zp ZP_WORD:93 [ init_buckets::$5 ] : zp ZP_WORD:93 , 
Potential registers zp ZP_WORD:95 [ init_buckets::$12 ] : zp ZP_WORD:95 , 
Potential registers zp ZP_WORD:97 [ init_buckets::$16 ] : zp ZP_WORD:97 , 
Potential registers zp ZP_BYTE:99 [ init_buckets::distance#0 ] : zp ZP_BYTE:99 , reg byte x , 
Potential registers zp ZP_WORD:100 [ init_buckets::$9 ] : zp ZP_WORD:100 , 
Potential registers zp ZP_WORD:102 [ init_buckets::$13 ] : zp ZP_WORD:102 , 
Potential registers zp ZP_WORD:104 [ init_buckets::$17 ] : zp ZP_WORD:104 , 
Potential registers zp ZP_WORD:106 [ init_buckets::bucket#0 ] : zp ZP_WORD:106 , 
Potential registers zp ZP_WORD:108 [ init_buckets::$10 ] : zp ZP_WORD:108 , 
Potential registers zp ZP_BYTE:110 [ init_buckets::$14 ] : zp ZP_BYTE:110 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:111 [ malloc::mem#0 ] : zp ZP_WORD:111 , 
Potential registers zp ZP_BYTE:113 [ init_angle_screen::$3 ] : zp ZP_BYTE:113 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:114 [ init_angle_screen::$4 ] : zp ZP_BYTE:114 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:115 [ init_angle_screen::xw#0 ] : zp ZP_WORD:115 , 
Potential registers zp ZP_BYTE:117 [ init_angle_screen::$7 ] : zp ZP_BYTE:117 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:118 [ init_angle_screen::yw#0 ] : zp ZP_WORD:118 , 
Potential registers zp ZP_WORD:120 [ atan2_16::x#0 ] : zp ZP_WORD:120 , 
Potential registers zp ZP_WORD:122 [ atan2_16::y#0 ] : zp ZP_WORD:122 , 
Potential registers zp ZP_WORD:124 [ atan2_16::return#2 ] : zp ZP_WORD:124 , 
Potential registers zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ] : zp ZP_WORD:126 , 
Potential registers zp ZP_WORD:128 [ init_angle_screen::$11 ] : zp ZP_WORD:128 , 
Potential registers zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] : zp ZP_BYTE:130 , reg byte x , 
Potential registers zp ZP_BYTE:131 [ init_angle_screen::$13 ] : zp ZP_BYTE:131 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:132 [ init_angle_screen::$14 ] : zp ZP_BYTE:132 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:133 [ init_angle_screen::$15 ] : zp ZP_BYTE:133 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:134 [ atan2_16::$24 ] : zp ZP_BYTE:134 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:135 [ atan2_16::$23 ] : zp ZP_BYTE:135 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:136 [ init_dist_screen::y2#0 ] : zp ZP_BYTE:136 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:137 [ sqr::return#2 ] : zp ZP_WORD:137 , 
Potential registers zp ZP_WORD:139 [ init_dist_screen::yds#0 ] : zp ZP_WORD:139 , 
Potential registers zp ZP_BYTE:141 [ init_dist_screen::x2#0 ] : zp ZP_BYTE:141 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:142 [ sqr::return#3 ] : zp ZP_WORD:142 , 
Potential registers zp ZP_WORD:144 [ init_dist_screen::xds#0 ] : zp ZP_WORD:144 , 
Potential registers zp ZP_WORD:146 [ init_dist_screen::ds#0 ] : zp ZP_WORD:146 , 
Potential registers zp ZP_WORD:148 [ sqrt::val#0 ] : zp ZP_WORD:148 , 
Potential registers zp ZP_BYTE:150 [ sqrt::return#2 ] : zp ZP_BYTE:150 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:151 [ init_dist_screen::d#0 ] : zp ZP_BYTE:151 , reg byte a , reg byte x , 
Potential registers zp ZP_WORD:152 [ bsearch16u::key#0 ] : zp ZP_WORD:152 , 
Potential registers zp ZP_WORD:154 [ bsearch16u::return#3 ] : zp ZP_WORD:154 , 
Potential registers zp ZP_WORD:156 [ sqrt::found#0 ] : zp ZP_WORD:156 , 
Potential registers zp ZP_WORD:158 [ sqrt::$3 ] : zp ZP_WORD:158 , 
Potential registers zp ZP_WORD:160 [ sqrt::$1 ] : zp ZP_WORD:160 , 
Potential registers zp ZP_BYTE:162 [ sqrt::return#0 ] : zp ZP_BYTE:162 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:163 [ bsearch16u::$6 ] : zp ZP_BYTE:163 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:164 [ bsearch16u::$16 ] : zp ZP_BYTE:164 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:165 [ bsearch16u::result#0 ] : zp ZP_WORD:165 , 
Potential registers zp ZP_BYTE:167 [ sqr::$0 ] : zp ZP_BYTE:167 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:168 [ sqr::return#0 ] : zp ZP_WORD:168 , 
Potential registers zp ZP_WORD:170 [ SQUARES#1 ] : zp ZP_WORD:170 , 
Potential registers zp ZP_BYTE:172 [ init_squares::$3 ] : zp ZP_BYTE:172 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:173 [ init_squares::$4 ] : zp ZP_BYTE:173 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [atan2_16] 28,670.58: zp ZP_BYTE:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 17,338.67: zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 7,533.33: zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 2,698.28: zp ZP_WORD:32 [ 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 ZP_WORD:34 [ 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 ZP_BYTE:134 [ atan2_16::$24 ] 2,002: zp ZP_BYTE:135 [ atan2_16::$23 ] 1,710.04: zp ZP_BYTE:36 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp ZP_WORD:124 [ atan2_16::return#2 ] 50: zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp ZP_WORD:120 [ atan2_16::x#0 ] 2.72: zp ZP_WORD:122 [ atan2_16::y#0 ] 
Uplift Scope [bsearch16u] 6,450.89: zp ZP_BYTE:59 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] 4,851: zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] 2,433.29: zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] 2,002: zp ZP_BYTE:163 [ bsearch16u::$6 ] 2,002: zp ZP_BYTE:164 [ bsearch16u::$16 ] 1,501.5: zp ZP_WORD:165 [ bsearch16u::result#0 ] 4: zp ZP_WORD:154 [ bsearch16u::return#3 ] 0.24: zp ZP_WORD:152 [ bsearch16u::key#0 ] 
Uplift Scope [init_angle_screen] 202: zp ZP_BYTE:113 [ init_angle_screen::$3 ] 202: zp ZP_BYTE:114 [ init_angle_screen::$4 ] 202: zp ZP_BYTE:117 [ init_angle_screen::$7 ] 202: zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ] 202: zp ZP_WORD:128 [ init_angle_screen::$11 ] 202: zp ZP_BYTE:131 [ init_angle_screen::$13 ] 202: zp ZP_BYTE:132 [ init_angle_screen::$14 ] 202: zp ZP_BYTE:133 [ init_angle_screen::$15 ] 126.25: zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 120.24: zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 84.17: zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] 50.5: zp ZP_WORD:118 [ init_angle_screen::yw#0 ] 33.67: zp ZP_WORD:115 [ init_angle_screen::xw#0 ] 21.23: zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp ZP_WORD:76 [ init_angle_screen::screen#0 ] 
Uplift Scope [main] 673.33: zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] 377.07: zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] 238.11: zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] 202: zp ZP_BYTE:86 [ main::$22 ] 202: zp ZP_WORD:87 [ main::fill#0 ] 151.5: zp ZP_WORD:89 [ main::angle#0 ] 134.67: zp ZP_BYTE:3 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:80 [ main::$21 ] 22: zp ZP_WORD:84 [ main::fill1#0 ] 13.64: zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp ZP_BYTE:83 [ main::bucket_size#0 ] 6.59: zp ZP_WORD:81 [ main::bucket#0 ] 
Uplift Scope [init_dist_screen] 707: zp ZP_BYTE:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 202: zp ZP_BYTE:141 [ init_dist_screen::x2#0 ] 202: zp ZP_WORD:144 [ init_dist_screen::xds#0 ] 202: zp ZP_WORD:146 [ init_dist_screen::ds#0 ] 127.58: zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] 126.25: zp ZP_BYTE:151 [ init_dist_screen::d#0 ] 121.2: zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] 77: zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp ZP_BYTE:136 [ init_dist_screen::y2#0 ] 18.18: zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp ZP_WORD:139 [ init_dist_screen::yds#0 ] 
Uplift Scope [sqr] 338: zp ZP_BYTE:60 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp ZP_WORD:142 [ sqr::return#3 ] 28.5: zp ZP_WORD:168 [ sqr::return#0 ] 22: zp ZP_WORD:137 [ sqr::return#2 ] 4: zp ZP_BYTE:167 [ sqr::$0 ] 
Uplift Scope [init_buckets] 34.33: zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] 33: zp ZP_BYTE:9 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp ZP_BYTE:16 [ init_buckets::i3#2 init_buckets::i3#1 ] 23.83: zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp ZP_WORD:91 [ init_buckets::$15 ] 22: zp ZP_WORD:95 [ init_buckets::$12 ] 22: zp ZP_WORD:97 [ init_buckets::$16 ] 22: zp ZP_WORD:100 [ init_buckets::$9 ] 22: zp ZP_WORD:102 [ init_buckets::$13 ] 22: zp ZP_WORD:104 [ init_buckets::$17 ] 22: zp ZP_BYTE:110 [ init_buckets::$14 ] 18.5: zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] 15.93: zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] 11: zp ZP_WORD:108 [ init_buckets::$10 ] 7.33: zp ZP_WORD:106 [ init_buckets::bucket#0 ] 5.5: zp ZP_BYTE:99 [ init_buckets::distance#0 ] 3.67: zp ZP_WORD:93 [ init_buckets::$5 ] 0.43: zp ZP_WORD:78 [ init_buckets::screen#0 ] 
Uplift Scope [sqrt] 202: zp ZP_BYTE:150 [ sqrt::return#2 ] 103: zp ZP_WORD:148 [ sqrt::val#0 ] 34.33: zp ZP_BYTE:162 [ sqrt::return#0 ] 4: zp ZP_WORD:156 [ sqrt::found#0 ] 4: zp ZP_WORD:158 [ sqrt::$3 ] 2: zp ZP_WORD:160 [ sqrt::$1 ] 
Uplift Scope [init_squares] 25.17: zp ZP_WORD:63 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 22: zp ZP_BYTE:65 [ init_squares::i#2 init_squares::i#1 ] 22: zp ZP_BYTE:172 [ init_squares::$3 ] 22: zp ZP_BYTE:173 [ init_squares::$4 ] 13.93: zp ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ] 
Uplift Scope [malloc] 35: zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] 0.4: zp ZP_WORD:111 [ malloc::mem#0 ] 
Uplift Scope [] 23.24: zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] 0.12: zp ZP_WORD:66 [ SCREEN_DIST#0 ] 0.05: zp ZP_WORD:68 [ SCREEN_ANGLE#0 ] 0.04: zp ZP_WORD:74 [ BUCKET_IDX#0 ] 0.03: zp ZP_WORD:170 [ SQUARES#1 ] 0.03: zp ZP_WORD:72 [ BUCKETS#0 ] 0.02: zp ZP_WORD:70 [ BUCKET_SIZES#0 ] 
Uplift Scope [RADIX] 

Uplifting [atan2_16] best 1281094 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp ZP_WORD:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp ZP_WORD:32 [ 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 ZP_WORD:34 [ 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::$24 ] reg byte a [ atan2_16::$23 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp ZP_WORD:124 [ atan2_16::return#2 ] zp ZP_WORD:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp ZP_WORD:120 [ atan2_16::x#0 ] zp ZP_WORD:122 [ atan2_16::y#0 ] 
Limited combination testing to 100 combinations of 144 possible.
Uplifting [bsearch16u] best 1262094 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ] zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp ZP_WORD:165 [ bsearch16u::result#0 ] zp ZP_WORD:154 [ bsearch16u::return#3 ] zp ZP_WORD:152 [ bsearch16u::key#0 ] 
Uplifting [init_angle_screen] best 1259894 combination reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ] zp ZP_WORD:128 [ init_angle_screen::$11 ] reg byte a [ init_angle_screen::$13 ] zp ZP_BYTE:132 [ init_angle_screen::$14 ] zp ZP_BYTE:133 [ init_angle_screen::$15 ] zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] zp ZP_WORD:118 [ init_angle_screen::yw#0 ] zp ZP_WORD:115 [ init_angle_screen::xw#0 ] zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp ZP_WORD:76 [ init_angle_screen::screen#0 ] 
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [main] best 1258454 combination zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] reg byte a [ main::$22 ] zp ZP_WORD:87 [ main::fill#0 ] zp ZP_WORD:89 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$21 ] zp ZP_WORD:84 [ main::fill1#0 ] zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp ZP_BYTE:83 [ main::bucket_size#0 ] zp ZP_WORD:81 [ main::bucket#0 ] 
Limited combination testing to 100 combinations of 256 possible.
Uplifting [init_dist_screen] best 1255254 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] reg byte a [ init_dist_screen::x2#0 ] zp ZP_WORD:144 [ init_dist_screen::xds#0 ] zp ZP_WORD:146 [ init_dist_screen::ds#0 ] zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] zp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp ZP_BYTE:136 [ init_dist_screen::y2#0 ] zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp ZP_WORD:139 [ init_dist_screen::yds#0 ] 
Limited combination testing to 100 combinations of 6144 possible.
Uplifting [sqr] best 1254917 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp ZP_WORD:142 [ sqr::return#3 ] zp ZP_WORD:168 [ sqr::return#0 ] zp ZP_WORD:137 [ sqr::return#2 ] reg byte a [ sqr::$0 ] 
Uplifting [init_buckets] best 1254637 combination zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] reg byte y [ init_buckets::i#2 init_buckets::i#1 ] reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ] zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp ZP_WORD:91 [ init_buckets::$15 ] zp ZP_WORD:95 [ init_buckets::$12 ] zp ZP_WORD:97 [ init_buckets::$16 ] zp ZP_WORD:100 [ init_buckets::$9 ] zp ZP_WORD:102 [ init_buckets::$13 ] zp ZP_WORD:104 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] zp ZP_WORD:108 [ init_buckets::$10 ] zp ZP_WORD:106 [ init_buckets::bucket#0 ] zp ZP_BYTE:99 [ init_buckets::distance#0 ] zp ZP_WORD:93 [ init_buckets::$5 ] zp ZP_WORD:78 [ init_buckets::screen#0 ] 
Uplifting [sqrt] best 1253734 combination reg byte a [ sqrt::return#2 ] zp ZP_WORD:148 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp ZP_WORD:156 [ sqrt::found#0 ] zp ZP_WORD:158 [ sqrt::$3 ] zp ZP_WORD:160 [ sqrt::$1 ] 
Uplifting [init_squares] best 1253534 combination zp ZP_WORD:63 [ 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 ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ] 
Uplifting [malloc] best 1253534 combination zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] zp ZP_WORD:111 [ malloc::mem#0 ] 
Uplifting [] best 1253534 combination zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] zp ZP_WORD:66 [ SCREEN_DIST#0 ] zp ZP_WORD:68 [ SCREEN_ANGLE#0 ] zp ZP_WORD:74 [ BUCKET_IDX#0 ] zp ZP_WORD:170 [ SQUARES#1 ] zp ZP_WORD:72 [ BUCKETS#0 ] zp ZP_WORD:70 [ BUCKET_SIZES#0 ] 
Uplifting [RADIX] best 1253534 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Uplifting [main] best 1253534 combination zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:132 [ init_angle_screen::$14 ]
Uplifting [init_angle_screen] best 1253134 combination reg byte a [ init_angle_screen::$14 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:133 [ init_angle_screen::$15 ]
Uplifting [init_angle_screen] best 1252534 combination reg byte a [ init_angle_screen::$15 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ]
Uplifting [init_dist_screen] best 1252534 combination zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ]
Uplifting [init_angle_screen] best 1252534 combination zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ]
Uplifting [init_dist_screen] best 1252534 combination zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ]
Uplifting [init_angle_screen] best 1252534 combination zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ]
Uplifting [init_angle_screen] best 1252534 combination zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Uplifting [init_dist_screen] best 1252464 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:136 [ init_dist_screen::y2#0 ]
Uplifting [init_dist_screen] best 1252364 combination reg byte a [ init_dist_screen::y2#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Uplifting [init_angle_screen] best 1252364 combination zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Uplifting [init_dist_screen] best 1252364 combination zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
Uplifting [main] best 1252364 combination zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:83 [ main::bucket_size#0 ]
Uplifting [main] best 1252364 combination zp ZP_BYTE:83 [ main::bucket_size#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:99 [ init_buckets::distance#0 ]
Uplifting [init_buckets] best 1252364 combination zp ZP_BYTE:99 [ init_buckets::distance#0 ] 
Coalescing zero page register [ zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 ] ] with [ zp ZP_WORD:84 [ main::fill1#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 ] ] with [ zp ZP_WORD:91 [ init_buckets::$15 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 ] ] with [ zp ZP_WORD:111 [ malloc::mem#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:76 [ init_angle_screen::screen#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp ZP_WORD:39 [ 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 ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 ] ] with [ zp ZP_WORD:154 [ bsearch16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:66 [ SCREEN_DIST#0 ] ] with [ zp ZP_WORD:78 [ init_buckets::screen#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:95 [ init_buckets::$12 ] ] with [ zp ZP_WORD:97 [ init_buckets::$16 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:100 [ init_buckets::$9 ] ] with [ zp ZP_WORD:102 [ init_buckets::$13 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:104 [ init_buckets::$17 ] ] with [ zp ZP_WORD:106 [ init_buckets::bucket#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:115 [ init_angle_screen::xw#0 ] ] with [ zp ZP_WORD:120 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:118 [ init_angle_screen::yw#0 ] ] with [ zp ZP_WORD:122 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:124 [ atan2_16::return#2 ] ] with [ zp ZP_WORD:126 [ init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:137 [ sqr::return#2 ] ] with [ zp ZP_WORD:139 [ init_dist_screen::yds#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 ] ] with [ zp ZP_WORD:144 [ init_dist_screen::xds#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp ZP_WORD:168 [ sqr::return#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:146 [ init_dist_screen::ds#0 ] ] with [ zp ZP_WORD:148 [ sqrt::val#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:156 [ sqrt::found#0 ] ] with [ zp ZP_WORD:158 [ sqrt::$3 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 ] ] with [ zp ZP_WORD:93 [ init_buckets::$5 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 ] ] with [ zp ZP_WORD:170 [ SQUARES#1 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:37 [ 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 ZP_WORD:124 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 ] ] with [ zp ZP_WORD:156 [ sqrt::found#0 sqrt::$3 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:100 [ init_buckets::$9 init_buckets::$13 ] ] with [ zp ZP_WORD:104 [ init_buckets::$17 init_buckets::bucket#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp ZP_WORD:146 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:37 [ 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 ZP_WORD:128 [ init_angle_screen::$11 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp ZP_WORD:160 [ sqrt::$1 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp ZP_WORD:152 [ bsearch16u::key#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] ] with [ zp ZP_WORD:4 [ main::min_offset#2 main::min_offset#8 main::fill1#0 ] ]
Coalescing zero page register [ zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 ] ] with [ zp ZP_WORD:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] ]
Coalescing zero page register [ zp ZP_WORD:21 [ heap_head#18 heap_head#1 ] ] with [ zp ZP_WORD:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] ]
Coalescing zero page register [ zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp ZP_BYTE:2 [ main::bucket_idx#6 main::bucket_idx#1 ] ]
Coalescing zero page register [ zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp ZP_WORD:14 [ init_buckets::i2#2 init_buckets::i2#1 ] ]
Coalescing zero page register [ zp ZP_WORD:28 [ 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 ZP_WORD:19 [ init_buckets::i4#2 init_buckets::i4#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:30 [ init_angle_screen::x#5 init_angle_screen::x#1 ] ] with [ zp ZP_BYTE:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] ]
Coalescing zero page register [ zp ZP_WORD:32 [ 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 ZP_WORD:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp ZP_BYTE:31 [ init_angle_screen::xb#5 init_angle_screen::xb#1 ] ]
Coalescing zero page register [ zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] ] with [ zp ZP_WORD:34 [ 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 ] ]
Coalescing zero page register [ zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] with [ zp ZP_WORD:37 [ 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 ] ]
Coalescing zero page register [ zp ZP_WORD:55 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 ] ] with [ zp ZP_WORD:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ]
Coalescing zero page register [ zp ZP_WORD:57 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp ZP_WORD:44 [ 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 ZP_WORD:81 [ main::bucket#0 ] ] with [ zp ZP_WORD:61 [ init_squares::sqr#2 init_squares::sqr#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:83 [ main::bucket_size#0 ] ] with [ zp ZP_BYTE:52 [ init_dist_screen::x#10 init_dist_screen::x#1 ] ]
Coalescing zero page register [ zp ZP_WORD:87 [ main::fill#0 ] ] with [ zp ZP_WORD:63 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ]
Coalescing zero page register [ zp ZP_WORD:89 [ main::angle#0 ] ] with [ zp ZP_WORD:66 [ SCREEN_DIST#0 init_buckets::screen#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:99 [ init_buckets::distance#0 ] ] with [ zp ZP_BYTE:53 [ init_dist_screen::xb#10 init_dist_screen::xb#1 ] ]
Coalescing zero page register [ zp ZP_WORD:115 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp ZP_WORD:95 [ init_buckets::$12 init_buckets::$16 ] ]
Coalescing zero page register [ zp ZP_WORD:118 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp ZP_WORD:100 [ init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] ]
Coalescing zero page register [ zp ZP_WORD:137 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp ZP_WORD:108 [ init_buckets::$10 ] ]
Coalescing zero page register [ zp ZP_WORD:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 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 ZP_WORD:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 main::min_offset#2 main::min_offset#8 main::fill1#0 ] ]
Coalescing zero page register [ zp ZP_WORD:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#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::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 ] ] with [ zp ZP_WORD:12 [ init_buckets::i1#2 init_buckets::i1#1 main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] ]
Coalescing zero page register [ zp ZP_WORD:81 [ main::bucket#0 init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp ZP_WORD:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ] ]
Coalescing zero page register [ zp ZP_WORD:87 [ main::fill#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp ZP_WORD:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:99 [ init_buckets::distance#0 init_dist_screen::xb#10 init_dist_screen::xb#1 ] ] with [ zp ZP_BYTE:25 [ init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:130 [ init_angle_screen::ang_w#0 ] ] with [ zp ZP_BYTE:83 [ main::bucket_size#0 init_dist_screen::x#10 init_dist_screen::x#1 ] ]
Coalescing zero page register [ zp ZP_WORD:142 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp ZP_WORD:115 [ init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] ]
Coalescing zero page register [ zp ZP_WORD:165 [ bsearch16u::result#0 ] ] with [ zp ZP_WORD:118 [ init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] ]
Allocated (was zp ZP_WORD:21) zp ZP_WORD:2 [ heap_head#18 heap_head#1 init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
Allocated (was zp ZP_BYTE:30) zp ZP_BYTE:4 [ init_angle_screen::x#5 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Allocated (was zp ZP_WORD:32) zp ZP_WORD:5 [ 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 malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ]
Allocated (was zp ZP_BYTE:46) zp ZP_BYTE:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ]
Allocated (was zp ZP_WORD:47) zp ZP_WORD:8 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 main::min_offset#2 main::min_offset#8 main::fill1#0 ]
Allocated (was zp ZP_WORD:49) zp ZP_WORD:10 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#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::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 init_buckets::i1#2 init_buckets::i1#1 main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ]
Allocated (was zp ZP_WORD:55) zp ZP_WORD:12 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated (was zp ZP_WORD:57) zp ZP_WORD:14 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated (was zp ZP_WORD:68) zp ZP_WORD:16 [ SCREEN_ANGLE#0 ]
Allocated (was zp ZP_WORD:70) zp ZP_WORD:18 [ BUCKET_SIZES#0 ]
Allocated (was zp ZP_WORD:72) zp ZP_WORD:20 [ BUCKETS#0 ]
Allocated (was zp ZP_WORD:74) zp ZP_WORD:22 [ BUCKET_IDX#0 ]
Allocated (was zp ZP_WORD:81) zp ZP_WORD:24 [ main::bucket#0 init_squares::sqr#2 init_squares::sqr#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ]
Allocated (was zp ZP_WORD:87) zp ZP_WORD:26 [ main::fill#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ]
Allocated (was zp ZP_WORD:89) zp ZP_WORD:28 [ main::angle#0 SCREEN_DIST#0 init_buckets::screen#0 ]
Allocated (was zp ZP_BYTE:99) zp ZP_BYTE:30 [ init_buckets::distance#0 init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ]
Allocated (was zp ZP_BYTE:130) zp ZP_BYTE:31 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#10 init_dist_screen::x#1 ]
Allocated (was zp ZP_WORD:137) zp ZP_WORD:32 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 ]
Allocated (was zp ZP_WORD:142) zp ZP_WORD:34 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ]
Allocated (was zp ZP_WORD:165) zp ZP_WORD:36 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// Fill screen using a spiral based on distance-to-center / angle-to-center
// Utilizes a bucket sort for identifying the minimum angle/distance
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .const SIZEOF_WORD = 2
  .const SIZEOF_BYTE = 1
  .const SIZEOF_POINTER = 2
  .label RASTER = $d012
  .label BORDERCOL = $d020
  // Color Ram
  .label COLS = $d800
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  // 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 = '*'
  // The number of buckets in our bucket sort
  .const NUM_BUCKETS = $30
  .const NUM_SQUARES = $30
  .label heap_head = 2
  .label SQUARES = 5
  // Screen containing distance to center
  .label SCREEN_DIST = $1c
  // Screen containing angle to center
  .label SCREEN_ANGLE = $10
  // Array containing the bucket size for each of the distance buckets
  .label BUCKET_SIZES = $12
  // Buckets containing screen indices for each distance from the center.
  // BUCKETS[dist] is an array of words containing screen indices.
  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
  .label BUCKETS = $14
  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
  .label BUCKET_IDX = $16
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call malloc 
  // [93] phi from @1 to malloc [phi:@1->malloc]
malloc_from_b1:
  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  jmp b4
  // @4
b4:
  // [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 
  // [93] phi from @4 to malloc [phi:@4->malloc]
malloc_from_b4:
  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy 
  jsr malloc
  jmp b5
  // @5
b5:
  // [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 @5 to @2 [phi:@5->@2]
b2_from_b5:
  jmp b2
  // @2
b2:
  // [7] call malloc 
  // [93] phi from @2 to malloc [phi:@2->malloc]
malloc_from_b2:
  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy 
  jsr malloc
  jmp b6
  // @6
b6:
  // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z BUCKET_SIZES
  lda.z malloc.mem+1
  sta.z BUCKET_SIZES+1
  // [9] call malloc 
  // [93] phi from @6 to malloc [phi:@6->malloc]
malloc_from_b6:
  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy 
  jsr malloc
  jmp b7
  // @7
b7:
  // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z BUCKETS
  lda.z malloc.mem+1
  sta.z BUCKETS+1
  // [11] call malloc 
  // [93] phi from @7 to malloc [phi:@7->malloc]
malloc_from_b7:
  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy 
  jsr malloc
  jmp b8
  // @8
b8:
  // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z BUCKET_IDX
  lda.z malloc.mem+1
  sta.z BUCKET_IDX+1
  // [13] phi from @8 to @3 [phi:@8->@3]
b3_from_b8:
  jmp b3
  // @3
b3:
  // [14] call main 
  jsr main
  // [15] phi from @3 to @end [phi:@3->@end]
bend_from_b3:
  jmp bend
  // @end
bend:
  // main
main: {
    .label bucket = $18
    .label bucket_size = $1f
    .label bucket_idx = $1e
    .label offset = $a
    .label fill = $1a
    .label angle = $1c
    .label min_angle = 4
    .label fill1 = 8
    .label min_offset = 8
    .label min_offset_5 = $a
    .label min_offset_9 = $a
    .label min_offset_11 = $a
    // asm { sei  }
    sei
    // [17] (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
    // [18] call init_dist_screen 
    // [171] phi from main to init_dist_screen [phi:main->init_dist_screen]
  init_dist_screen_from_main:
    jsr init_dist_screen
    jmp b15
    // main::@15
  b15:
    // [19] (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
    // [20] call init_angle_screen 
    jsr init_angle_screen
    jmp b16
    // main::@16
  b16:
    // [21] (byte*) init_buckets::screen#0 ← (byte[])(void*) SCREEN_DIST#0
    // [22] call init_buckets 
    // [53] phi from main::@16 to init_buckets [phi:main::@16->init_buckets]
  init_buckets_from_b16:
    jsr init_buckets
    // [23] phi from main::@16 to main::@1 [phi:main::@16->main::@1]
  b1_from_b16:
    // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z bucket_idx
    jmp b1
    // main::@1
  b1:
    jmp b2
    // main::@2
  b2:
    // [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne b2
    jmp b3
    // main::@3
  b3:
    // [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
    // [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z bucket_idx
    asl
    // [27] (word[]) main::bucket#0 ← *((word*[])(void*) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptz2_derefidx_vbuaa 
    tay
    lda (BUCKETS),y
    sta.z bucket
    iny
    lda (BUCKETS),y
    sta.z bucket+1
    // [28] (byte) main::bucket_size#0 ← *((byte[])(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 
    ldy.z bucket_idx
    lda (BUCKET_SIZES),y
    sta.z bucket_size
    // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
    lda.z bucket_size
    cmp #0
    beq b4
    // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
  b5_from_b3:
    // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z min_angle
    // [30] phi (word) main::min_offset#2 = (word) $ffff [phi:main::@3->main::@5#1] -- vwuz1=vwuc1 
    lda #<$ffff
    sta.z min_offset
    lda #>$ffff
    sta.z min_offset+1
    // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 
    ldx #0
    jmp b5
    // main::@5
  b5:
    // [31] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 -- vbuxx_lt_vbuz1_then_la1 
    cpx.z bucket_size
    bcc b6
    jmp b7
    // main::@7
  b7:
    // [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 
    lda.z min_offset
    cmp #<$ffff
    bne !+
    lda.z min_offset+1
    cmp #>$ffff
    beq b4
  !:
    jmp b11
    // main::@11
  b11:
    // [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z fill1
    adc #<SCREEN_FILL
    sta.z fill1
    lda.z fill1+1
    adc #>SCREEN_FILL
    sta.z fill1+1
    // [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 
    lda #FILL_CHAR
    ldy #0
    sta (fill1),y
    // [35] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // [23] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1]
  b1_from_b11:
  b1_from_b12:
    // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@11/main::@12->main::@1#0] -- register_copy 
    jmp b1
    // main::@4
  b4:
    // [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
    inc.z bucket_idx
    // [37] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BUCKETS
    cmp.z bucket_idx
    bne b12
    jmp b13
    // main::@13
  b13:
    // [38] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp b14
    // main::@14
  b14:
    // [39] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp b14
    // main::@12
  b12:
    // [40] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp b1_from_b12
    // main::@6
  b6:
    // [41] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa 
    tay
    lda (bucket),y
    sta.z offset
    iny
    lda (bucket),y
    sta.z offset+1
    // [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z offset
    clc
    adc #<SCREEN_FILL
    sta.z fill
    lda.z offset+1
    adc #>SCREEN_FILL
    sta.z fill+1
    // [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
    lda #FILL_CHAR
    ldy #0
    cmp (fill),y
    beq b18
    jmp b9
    // main::@9
  b9:
    // [45] (byte*) main::angle#0 ← (byte[])(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 
    lda.z SCREEN_ANGLE
    clc
    adc.z offset
    sta.z angle
    lda.z SCREEN_ANGLE+1
    adc.z offset+1
    sta.z angle+1
    // [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 
    ldy #0
    lda (angle),y
    cmp.z min_angle
    beq !+
    bcs b17
  !:
    jmp b10
    // main::@10
  b10:
    // [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (angle),y
    sta.z min_angle
    // [48] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8]
  b8_from_b10:
  b8_from_b17:
  b8_from_b18:
    // [48] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy 
    // [48] phi (word) main::min_offset#5 = (word) main::offset#0 [phi:main::@10/main::@17/main::@18->main::@8#1] -- register_copy 
    jmp b8
    // main::@8
  b8:
    // [49] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [50] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
    lda.z min_offset_5
    sta.z min_offset
    lda.z min_offset_5+1
    sta.z min_offset+1
    // [30] phi from main::@8 to main::@5 [phi:main::@8->main::@5]
  b5_from_b8:
    // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy 
    // [30] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy 
    // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy 
    jmp b5
    // main::@17
  b17:
    // [51] (word~) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_9
    lda.z min_offset+1
    sta.z min_offset_9+1
    jmp b8_from_b17
    // main::@18
  b18:
    // [52] (word~) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_11
    lda.z min_offset+1
    sta.z min_offset_11+1
    jmp b8_from_b18
}
  // init_buckets
// Initialize buckets containing indices of chars on the screen with specific distances to the center.
// init_buckets(byte* zeropage($1c) screen)
init_buckets: {
    .label _5 = 5
    .label _9 = $24
    .label _10 = $20
    .label _12 = $22
    .label _13 = $24
    .label screen = $1c
    .label dist = 8
    .label i1 = $a
    .label i2 = $18
    .label distance = $1e
    .label bucket = $24
    .label dist_3 = 2
    .label i4 = $1a
    .label dist_5 = 2
    .label _15 = 5
    .label _16 = $22
    .label _17 = $24
    .label dist_8 = 2
    // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
  b1_from_init_buckets:
    // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 
    ldy #0
    jmp b1
  // Init bucket sizes to 0
    // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
  b1_from_b1:
    // [54] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy 
    jmp b1
    // init_buckets::@1
  b1:
    // [55] *((byte[])(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
    lda #0
    sta (BUCKET_SIZES),y
    // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy 
    iny
    // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 
    cpy #NUM_BUCKETS-1+1
    bne b1_from_b1
    jmp b2
    // init_buckets::@2
  b2:
    // [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
    lda.z screen
    sta.z dist
    lda.z screen+1
    sta.z dist+1
    // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
  b3_from_b2:
    // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z i1
    lda #>0
    sta.z i1+1
    // [59] phi (byte*) init_buckets::dist#4 = (byte*~) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy 
    jmp b3
    // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
  b3_from_b3:
    // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy 
    // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy 
    jmp b3
    // init_buckets::@3
  b3:
    // [60] *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2 
    ldy #0
    lda (dist),y
    tay
    lda (BUCKET_SIZES),y
    clc
    adc #1
    sta (BUCKET_SIZES),y
    // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
    inc.z dist
    bne !+
    inc.z dist+1
  !:
    // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
    inc.z i1
    bne !+
    inc.z i1+1
  !:
    // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 
    lda.z i1+1
    cmp #>$3e8
    bne b3_from_b3
    lda.z i1
    cmp #<$3e8
    bne b3_from_b3
    // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4]
  b4_from_b3:
    // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z i2
    lda #>0
    sta.z i2+1
    jmp b4
  // Allocate the buckets
    // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4]
  b4_from_b8:
    // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy 
    jmp b4
    // init_buckets::@4
  b4:
    // [65] (byte*~) init_buckets::$15 ← (byte[])(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 
    lda.z BUCKET_SIZES
    clc
    adc.z i2
    sta.z _15
    lda.z BUCKET_SIZES+1
    adc.z i2+1
    sta.z _15+1
    // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 
    ldy #0
    lda (malloc.size),y
    asl
    sta.z malloc.size
    lda #0
    rol
    sta.z malloc.size+1
    // [67] call malloc 
    // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc]
  malloc_from_b4:
    // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy 
    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy 
    jsr malloc
    jmp b8
    // init_buckets::@8
  b8:
    // [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
    // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 
    lda.z i2
    asl
    sta.z _12
    lda.z i2+1
    rol
    sta.z _12+1
    // [70] (word**~) init_buckets::$16 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 
    lda.z _16
    clc
    adc.z BUCKETS
    sta.z _16
    lda.z _16+1
    adc.z BUCKETS+1
    sta.z _16+1
    // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 
    ldy #0
    lda.z _5
    sta (_16),y
    iny
    lda.z _5+1
    sta (_16),y
    // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
    inc.z i2
    bne !+
    inc.z i2+1
  !:
    // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 
    lda.z i2+1
    cmp #>NUM_BUCKETS-1+1
    bne b4_from_b8
    lda.z i2
    cmp #<NUM_BUCKETS-1+1
    bne b4_from_b8
    // [74] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5]
  b5_from_b8:
    // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 
    ldy #0
    jmp b5
  // Iterate all distances and fill the buckets with indices into the screens
    // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
  b5_from_b5:
    // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy 
    jmp b5
    // init_buckets::@5
  b5:
    // [75] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
    lda #0
    sta (BUCKET_IDX),y
    // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy 
    iny
    // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 
    cpy #NUM_BUCKETS-1+1
    bne b5_from_b5
    jmp b6
    // init_buckets::@6
  b6:
    // [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
    lda.z screen
    sta.z dist_8
    lda.z screen+1
    sta.z dist_8+1
    // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7]
  b7_from_b6:
    // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z i4
    lda #>0
    sta.z i4+1
    // [79] phi (byte*) init_buckets::dist#5 = (byte*~) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy 
    jmp b7
    // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7]
  b7_from_b7:
    // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy 
    // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy 
    jmp b7
    // init_buckets::@7
  b7:
    // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (dist_5),y
    sta.z distance
    // [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
    lda.z distance
    sta.z _9
    lda #0
    sta.z _9+1
    // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z _13
    rol.z _13+1
    // [83] (word**~) init_buckets::$17 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 
    lda.z _17
    clc
    adc.z BUCKETS
    sta.z _17
    lda.z _17+1
    adc.z BUCKETS+1
    sta.z _17+1
    // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 
    ldy #0
    lda (bucket),y
    pha
    iny
    lda (bucket),y
    sta.z bucket+1
    pla
    sta.z bucket
    // [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 
    lda.z dist_5
    sec
    sbc.z screen
    sta.z _10
    lda.z dist_5+1
    sbc.z screen+1
    sta.z _10+1
    // [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 
    ldy.z distance
    lda (BUCKET_IDX),y
    asl
    // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 
    tay
    lda.z _10
    sta (bucket),y
    iny
    lda.z _10+1
    sta (bucket),y
    // [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 
    ldy.z distance
    lda (BUCKET_IDX),y
    clc
    adc #1
    sta (BUCKET_IDX),y
    // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
    inc.z dist_3
    bne !+
    inc.z dist_3+1
  !:
    // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
    inc.z i4
    bne !+
    inc.z i4+1
  !:
    // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 
    lda.z i4+1
    cmp #>$3e8
    bne b7_from_b7
    lda.z i4
    cmp #<$3e8
    bne b7_from_b7
    jmp breturn
    // init_buckets::@return
  breturn:
    // [92] 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(5) size)
malloc: {
    .label mem = 5
    .label size = 5
    // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- 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
    // [95] (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:
    // [96] return 
    rts
}
  // 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($1a) screen)
init_angle_screen: {
    .label _11 = $a
    .label screen = $1a
    .label screen_topline = $18
    .label screen_bottomline = $1a
    .label xw = $22
    .label yw = $24
    .label angle_w = $a
    .label ang_w = $1f
    .label x = 4
    .label xb = 7
    .label y = $1e
    // [97] (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
    // [98] (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
    // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  b1_from_init_angle_screen:
    // [99] 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 
    // [99] 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 
    // [99] 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
    // [99] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  b1_from_b4:
    // [99] 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 
    // [99] 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 
    // [99] 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:
    // [100] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3]
  b3_from_b1:
    // [100] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [100] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp b3
    // [100] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3]
  b3_from_b2:
    // [100] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy 
    // [100] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy 
    jmp b3
    // init_angle_screen::@3
  b3:
    // [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // [102] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [103] (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
    // [104] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // [105] (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
    // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [108] call atan2_16 
    jsr atan2_16
    // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    jmp b5
    // init_angle_screen::@5
  b5:
    // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // [111] (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
  !:
    // [112] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z _11+1
    sta.z ang_w
    // [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [114] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
    lda.z ang_w
    eor #$ff
    clc
    adc #1
    // [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // [116] (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
    // [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // [118] (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
    // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_bottomline),y
    // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 
    dec.z xb
    jmp b2
    // init_angle_screen::@2
  b2:
    // [122] if((byte) init_angle_screen::x#1<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc b3_from_b2
    jmp b4
    // init_angle_screen::@4
  b4:
    // [123] (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
    // [124] (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
  !:
    // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [126] 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:
    // [127] return 
    rts
}
  // atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zeropage($22) x, signed word zeropage($24) y)
atan2_16: {
    .label _2 = 5
    .label _7 = 8
    .label yi = 5
    .label xi = 8
    .label angle = $a
    .label xd = $e
    .label yd = $c
    .label return = $a
    .label x = $22
    .label y = $24
    // [128] 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:
    // [129] (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
    // [130] 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:
    // [130] 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:
    // [131] 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:
    // [132] (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
    // [133] 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:
    // [133] 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:
    // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  b10_from_b6:
    // [134] 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
    // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    ldx #0
    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [134] 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:
    // [135] 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
    // [136] 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:
    // [136] 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:
    // [137] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z angle+1
    ror.z angle
    // [138] 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:
    // [139] (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
    // [140] 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:
    // [140] 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:
    // [141] 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:
    // [142] (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
    // [143] 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:
    // [143] 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:
    // [144] return 
    rts
    // atan2_16::@11
  b11:
    // [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [146] (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
    // [147] (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
    // [148] 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:
    // [148] 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 
    // [148] 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 
    // [148] 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:
    // [149] 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:
    // [150] 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:
    // [151] (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
    // [152] (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
    // [153] 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:
    // [153] 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 
    // [153] 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:
    // [154] 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:
    // [155] (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
    // [156] (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
    // [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- 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
    // [159] 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:
    // [159] 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 
    // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [159] 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:
    // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
    cpx #CORDIC_ITERATIONS_16-1+1
    beq b12_from_b19
    // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  b10_from_b19:
    // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [134] 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:
    // [162] (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
    // [163] (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
    // [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- 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:
    // [166] (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
    // [167] (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
    // [168] (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:
    // [169] (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:
    // [170] (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
// Utilizes symmetry around the center
// init_dist_screen(byte* zeropage(8) screen)
init_dist_screen: {
    .label screen = 8
    .label screen_bottomline = $a
    .label yds = $20
    .label screen_topline = 8
    .label y = 7
    .label xds = $22
    .label ds = $22
    .label x = $1f
    .label xb = $1e
    // [172] call init_squares 
    // [244] 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:
    // [173] (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
    // [174] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
  b1_from_b11:
    // [174] 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 
    // [174] 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 
    // [174] 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
    // [174] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
  b1_from_b7:
    // [174] 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 
    // [174] 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 
    // [174] 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:
    // [175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // [176] 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:
    // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$18+1
    // [178] 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:
    // [178] 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:
    // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
    // [180] call sqr 
    // [240] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
  sqr_from_b4:
    // [240] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // [181] (word) sqr::return#2 ← (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 b12
    // init_dist_screen::@12
  b12:
    // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
    // [183] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6]
  b6_from_b12:
    // [183] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [183] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp b6
    // [183] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6]
  b6_from_b5:
    // [183] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy 
    // [183] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy 
    jmp b6
    // init_dist_screen::@6
  b6:
    // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // [185] 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:
    // [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [187] 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:
    // [187] 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:
    // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
    // [189] call sqr 
    // [240] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
  sqr_from_b10:
    // [240] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy 
    jsr sqr
    // [190] (word) sqr::return#3 ← (word) sqr::return#0
    jmp b13
    // init_dist_screen::@13
  b13:
    // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
    // [192] (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
    // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
    // [194] call sqrt 
    jsr sqrt
    // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0
    jmp b14
    // init_dist_screen::@14
  b14:
    // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
    // [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_bottomline),y
    // [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_bottomline),y
    // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 
    dec.z xb
    jmp b5
    // init_dist_screen::@5
  b5:
    // [203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc b6_from_b5
    jmp b7
    // init_dist_screen::@7
  b7:
    // [204] (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
  !:
    // [205] (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
    // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [207] 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:
    // [208] return 
    rts
    // init_dist_screen::@8
  b8:
    // [209] (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:
    // [210] (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($22) val)
sqrt: {
    .label _1 = $e
    .label _3 = $e
    .label found = $e
    .label val = $22
    // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0
    // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z bsearch16u.items_1
    lda.z SQUARES+1
    sta.z bsearch16u.items_1+1
    // [213] call bsearch16u 
    // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
  bsearch16u_from_sqrt:
    jsr bsearch16u
    // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
    jmp b1
    // sqrt::@1
  b1:
    // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
    // [216] (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
    // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z _1+1
    ror.z _1
    // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
    lda.z _1
    jmp breturn
    // sqrt::@return
  breturn:
    // [219] 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($22) key, word* zeropage($e) items, byte register(X) num)
bsearch16u: {
    .label _2 = $e
    .label pivot = $e
    .label result = $24
    .label return = $e
    .label items = $e
    .label key = $22
    .label items_1 = $c
    .label items_10 = $c
    .label items_16 = $c
    // [221] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4]
  b4_from_bsearch16u:
    // [221] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy 
    // [221] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 
    ldx #NUM_SQUARES
    jmp b4
    // bsearch16u::@4
  b4:
    // [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
    txa
    lsr
    // [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
    clc
    adc.z items_10
    sta.z pivot
    lda #0
    adc.z items_10+1
    sta.z pivot+1
    // [225] (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
    // [226] 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
    // [227] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return]
  breturn_from_b2:
  breturn_from_b4:
    // [227] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy 
    jmp breturn
    // bsearch16u::@return
  breturn:
    // [228] return 
    rts
    // bsearch16u::@6
  b6:
    // [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 
    lda.z result+1
    bmi b10
    bne !+
    lda.z result
    beq b10
  !:
    jmp b8
    // bsearch16u::@8
  b8:
    // [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc.z items
    sta.z items
    bcc !+
    inc.z items+1
  !:
    // [231] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx 
    dex
    // [232] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7]
  b7_from_b10:
  b7_from_b8:
    // [232] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy 
    // [232] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy 
    jmp b7
    // bsearch16u::@7
  b7:
    // [233] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
    txa
    lsr
    tax
    jmp b3
    // bsearch16u::@3
  b3:
    // [234] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 
    cpx #0
    bne b9
    jmp b5
    // bsearch16u::@5
  b5:
    // [235] if(*((word*) bsearch16u::items#11)<=(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:
    // [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (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
    // [237] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
  b2_from_b1:
  b2_from_b5:
    // [237] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    jmp b2
    // bsearch16u::@2
  b2:
    jmp breturn_from_b2
    // bsearch16u::@9
  b9:
    // [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 
    lda.z items
    sta.z items_16
    lda.z items+1
    sta.z items_16+1
    // [221] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4]
  b4_from_b9:
    // [221] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy 
    // [221] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy 
    jmp b4
    // bsearch16u::@10
  b10:
    // [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 
    lda.z items_10
    sta.z items
    lda.z items_10+1
    sta.z items+1
    jmp b7_from_b10
}
  // 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 = $22
    .label return_2 = $20
    // [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [242] (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:
    // [243] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label squares = $1a
    .label sqr = $18
    // [245] call malloc 
    // [93] phi from init_squares to malloc [phi:init_squares->malloc]
  malloc_from_init_squares:
    // [93] phi (word) malloc::size#7 = (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
    lda #>NUM_SQUARES*SIZEOF_WORD
    sta.z malloc.size+1
    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
    jsr malloc
    jmp b2
    // init_squares::@2
  b2:
    // [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
    // [247] (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
    // [248] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
  b1_from_b2:
    // [248] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
    // [248] 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
    // [248] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
  b1_from_b1:
    // [248] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
    // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
    // [248] 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:
    // [249] *((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
    // [250] (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
  !:
    // [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
    clc
    adc #1
    // [253] (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
  !:
    // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [255] 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:
    // [256] return 
    rts
}
  // File Data
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
CORDIC_ATAN2_ANGLES_16:
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2


ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b2
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp b8
Removing instruction jmp b3
Removing instruction jmp bend
Removing instruction jmp b15
Removing instruction jmp b16
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b7
Removing instruction jmp b11
Removing instruction jmp b13
Removing instruction jmp b14
Removing instruction jmp b9
Removing instruction jmp b10
Removing instruction jmp b8
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b8
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp b10
Removing instruction jmp b12
Removing instruction jmp b21
Removing instruction jmp b7
Removing instruction jmp b9
Removing instruction jmp b8
Removing instruction jmp breturn
Removing instruction jmp b13
Removing instruction jmp b15
Removing instruction jmp b16
Removing instruction jmp b17
Removing instruction jmp b20
Removing instruction jmp b19
Removing instruction jmp b11
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b12
Removing instruction jmp b6
Removing instruction jmp b9
Removing instruction jmp b10
Removing instruction jmp b13
Removing instruction jmp b14
Removing instruction jmp b5
Removing instruction jmp b7
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b4
Removing instruction jmp breturn
Removing instruction jmp b8
Removing instruction jmp b7
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda.z bucket_size
Removing instruction lda #>0
Removing instruction lda #>0
Replacing instruction lda #0 with TYA
Removing instruction lda #>0
Removing instruction lda.z distance
Replacing instruction lda #0 with TYA
Removing instruction ldy #0
Removing instruction ldy #0
Removing instruction lda.z ang_w
Removing instruction lda.z ang_w
Removing instruction ldy.z xb
Removing instruction ldy.z x
Removing instruction lda #>0
Replacing instruction ldx #0 with TAX
Removing instruction 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 b1 with b2
Replacing label b8_from_b17 with b8
Replacing label b8_from_b18 with b8
Replacing label b1_from_b1 with b1
Replacing label b3_from_b3 with b3
Replacing label b3_from_b3 with b3
Replacing label b4_from_b8 with b4
Replacing label b4_from_b8 with b4
Replacing label b5_from_b5 with b5
Replacing label b7_from_b7 with b7
Replacing label b7_from_b7 with b7
Replacing label b3_from_b2 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 b6_from_b5 with b6
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_b2 with breturn
Replacing label b7_from_b10 with b7
Replacing label b1_from_b1 with b1
Removing instruction b1_from_bbegin:
Removing instruction b1:
Removing instruction malloc_from_b1:
Removing instruction b2_from_b5:
Removing instruction malloc_from_b2:
Removing instruction b3_from_b8:
Removing instruction bend_from_b3:
Removing instruction init_buckets_from_b16:
Removing instruction b1:
Removing instruction b1_from_b11:
Removing instruction b8_from_b10:
Removing instruction b8_from_b17:
Removing instruction b8_from_b18:
Removing instruction b1_from_b1:
Removing instruction b3_from_b3:
Removing instruction b4_from_b8:
Removing instruction b5_from_b5:
Removing instruction b7_from_b7:
Removing instruction b1_from_b4:
Removing instruction b3_from_b1:
Removing instruction b3_from_b2:
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 b6_from_b12:
Removing instruction b6_from_b5:
Removing instruction b10_from_b8:
Removing instruction b10_from_b9:
Removing instruction sqr_from_b10:
Removing instruction breturn_from_b2:
Removing instruction breturn_from_b4:
Removing instruction b7_from_b10:
Removing instruction b7_from_b8:
Removing instruction b2_from_b1:
Removing instruction b2_from_b5:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b4:
Removing instruction malloc_from_b4:
Removing instruction b5:
Removing instruction b2:
Removing instruction b6:
Removing instruction malloc_from_b6:
Removing instruction b7:
Removing instruction malloc_from_b7:
Removing instruction b8:
Removing instruction b3:
Removing instruction bend:
Removing instruction init_dist_screen_from_main:
Removing instruction b15:
Removing instruction b16:
Removing instruction b1_from_b16:
Removing instruction b3:
Removing instruction b5_from_b3:
Removing instruction b7:
Removing instruction b11:
Removing instruction b13:
Removing instruction b9:
Removing instruction b10:
Removing instruction b5_from_b8:
Removing instruction b1_from_init_buckets:
Removing instruction b2:
Removing instruction b3_from_b2:
Removing instruction b4_from_b3:
Removing instruction malloc_from_b4:
Removing instruction b8:
Removing instruction b5_from_b8:
Removing instruction b6:
Removing instruction b7_from_b6:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction b1_from_init_angle_screen:
Removing instruction b5:
Removing instruction b2:
Removing instruction b4:
Removing instruction breturn:
Removing instruction b2:
Removing instruction b5:
Removing instruction b21:
Removing instruction b9:
Removing instruction b15:
Removing instruction b16:
Removing instruction b20:
Removing instruction b10_from_b19:
Removing instruction init_squares_from_init_dist_screen:
Removing instruction b11:
Removing instruction b1_from_b11:
Removing instruction b3:
Removing instruction b12:
Removing instruction b9:
Removing instruction b13:
Removing instruction b14:
Removing instruction b5:
Removing instruction b7:
Removing instruction breturn:
Removing instruction bsearch16u_from_sqrt:
Removing instruction b1:
Removing instruction breturn:
Removing instruction b4_from_bsearch16u:
Removing instruction b8:
Removing instruction b3:
Removing instruction b5:
Removing instruction b1:
Removing instruction b4_from_b9:
Removing instruction breturn:
Removing instruction malloc_from_init_squares:
Removing instruction b2:
Removing instruction b1_from_b2:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Skipping double jump to b2 in jmp b1_from_b12
Skipping double jump to breturn in beq b2
Skipping double jump to breturn in bcc b2
Replacing jump to rts with rts in jmp breturn
Succesful ASM optimization Pass5DoubleJumpElimination
Relabelling long label b1_from_b12 to b1
Succesful ASM optimization Pass5RelabelLongLabels
Adding RTS to root block 
Succesful ASM optimization Pass5AddMainRts
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b7
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp b6
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction b1:
Removing instruction b2:
Succesful ASM optimization Pass5UnusedLabelElimination
Fixing long branch [652] beq b12 to bne
Fixing long branch [546] bpl b1 to bmi
Fixing long branch [558] bpl b4 to bmi

FINAL SYMBOL TABLE
(label) @1
(label) @2
(label) @3
(label) @4
(label) @5
(label) @6
(label) @7
(label) @8
(label) @begin
(label) @end
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280
(word*[]) BUCKETS
(void*) BUCKETS#0 BUCKETS zp ZP_WORD:20 0.02531645569620253
(byte[]) BUCKET_IDX
(void*) BUCKET_IDX#0 BUCKET_IDX zp ZP_WORD:22 0.0425531914893617
(byte[]) BUCKET_SIZES
(void*) BUCKET_SIZES#0 BUCKET_SIZES zp ZP_WORD:18 0.024691358024691357
(byte*) COLS
(const byte*) COLS#0 COLS = (byte*) 55296
(word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16
(const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 CORDIC_ATAN2_ANGLES_16 = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2
 }}
(byte) CORDIC_ITERATIONS_16
(const byte) CORDIC_ITERATIONS_16#0 CORDIC_ITERATIONS_16 = (byte) $f
(byte) FILL_CHAR
(const byte) FILL_CHAR#0 FILL_CHAR = (byte) '*'
(byte*) HEAP_TOP
(const byte*) HEAP_TOP#0 HEAP_TOP = (byte*) 40960
(byte) NUM_BUCKETS
(const byte) NUM_BUCKETS#0 NUM_BUCKETS = (byte) $30
(byte) NUM_SQUARES
(const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30
(const byte) RADIX::BINARY BINARY = (number) 2
(const byte) RADIX::DECIMAL DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL OCTAL = (number) 8
(byte*) RASTER
(const byte*) RASTER#0 RASTER = (byte*) 53266
(byte[]) SCREEN_ANGLE
(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp ZP_WORD:16 0.045454545454545456
(byte[]) SCREEN_DIST
(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:28 0.125
(byte*) SCREEN_FILL
(const byte*) SCREEN_FILL#0 SCREEN_FILL = (byte*) 1024
(const byte) SIZEOF_BYTE SIZEOF_BYTE = (byte) 1
(const byte) SIZEOF_POINTER SIZEOF_POINTER = (byte) 2
(const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2
(word*) SQUARES
(void*) SQUARES#1 SQUARES zp ZP_WORD:5 0.03225806451612903
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 $2 zp ZP_WORD:5 4.0
(byte~) atan2_16::$23 reg byte a 2002.0
(byte~) atan2_16::$24 reg byte a 2002.0
(signed word~) atan2_16::$7 $7 zp ZP_WORD:8 4.0
(label) atan2_16::@1
(label) atan2_16::@10
(label) atan2_16::@11
(label) atan2_16::@12
(label) atan2_16::@13
(label) atan2_16::@14
(label) atan2_16::@15
(label) atan2_16::@16
(label) atan2_16::@17
(label) atan2_16::@18
(label) atan2_16::@19
(label) atan2_16::@2
(label) atan2_16::@20
(label) atan2_16::@21
(label) atan2_16::@3
(label) atan2_16::@4
(label) atan2_16::@5
(label) atan2_16::@6
(label) atan2_16::@7
(label) atan2_16::@8
(label) atan2_16::@9
(label) atan2_16::@return
(word) atan2_16::angle
(word) atan2_16::angle#1 angle zp ZP_WORD:10 3.0
(word) atan2_16::angle#11 angle zp ZP_WORD:10 4.0
(word) atan2_16::angle#12 angle zp ZP_WORD:10 190.66666666666666
(word) atan2_16::angle#13 angle zp ZP_WORD:10 1334.6666666666667
(word) atan2_16::angle#2 angle zp ZP_WORD:10 2002.0
(word) atan2_16::angle#3 angle zp ZP_WORD:10 2002.0
(word) atan2_16::angle#4 angle zp ZP_WORD:10 4.0
(word) atan2_16::angle#5 angle zp ZP_WORD:10 4.0
(word) atan2_16::angle#6 angle zp ZP_WORD:10 2004.0
(byte) atan2_16::i
(byte) atan2_16::i#1 reg byte x 1501.5
(byte) atan2_16::i#2 reg byte x 208.54166666666669
(word) atan2_16::return
(word) atan2_16::return#0 return zp ZP_WORD:10 34.99999999999999
(word) atan2_16::return#2 return zp ZP_WORD:10 202.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 reg byte y 20002.0
(byte) atan2_16::shift#2 reg byte y 8001.25
(byte~) atan2_16::shift#5 reg byte y 667.3333333333334
(signed word) atan2_16::x
(signed word) atan2_16::x#0 x zp ZP_WORD:34 2.8684210526315796
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 xd zp ZP_WORD:14 6667.333333333333
(signed word~) atan2_16::xd#10 xd zp ZP_WORD:14 1001.0
(signed word) atan2_16::xd#2 xd zp ZP_WORD:14 1001.0
(signed word) atan2_16::xd#3 xd zp ZP_WORD:14 7668.333333333332
(signed word) atan2_16::xd#5 xd zp ZP_WORD:14 1001.0
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 xi zp ZP_WORD:8 6.0
(signed word) atan2_16::xi#1 xi zp ZP_WORD:8 500.5
(signed word~) atan2_16::xi#13 xi zp ZP_WORD:8 4.0
(signed word) atan2_16::xi#2 xi zp ZP_WORD:8 500.5
(signed word) atan2_16::xi#3 xi zp ZP_WORD:8 267.0666666666667
(signed word) atan2_16::xi#8 xi zp ZP_WORD:8 1001.0
(signed word) atan2_16::y
(signed word) atan2_16::y#0 y zp ZP_WORD:36 2.724999999999999
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 yd zp ZP_WORD:12 10001.0
(signed word~) atan2_16::yd#10 yd zp ZP_WORD:12 2002.0
(signed word) atan2_16::yd#2 yd zp ZP_WORD:12 2002.0
(signed word) atan2_16::yd#3 yd zp ZP_WORD:12 4601.0
(signed word) atan2_16::yd#5 yd zp ZP_WORD:12 2002.0
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 yi zp ZP_WORD:5 1.2000000000000002
(signed word) atan2_16::yi#1 yi zp ZP_WORD:5 667.3333333333334
(signed word~) atan2_16::yi#16 yi zp ZP_WORD:5 4.0
(signed word) atan2_16::yi#2 yi zp ZP_WORD:5 667.3333333333334
(signed word) atan2_16::yi#3 yi zp ZP_WORD:5 353.4117647058823
(signed word) atan2_16::yi#8 yi zp ZP_WORD:5 1001.0
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(byte~) bsearch16u::$16 reg byte a 2002.0
(word*~) bsearch16u::$2 $2 zp ZP_WORD:14 4.0
(byte~) bsearch16u::$6 reg byte a 2002.0
(label) bsearch16u::@1
(label) bsearch16u::@10
(label) bsearch16u::@2
(label) bsearch16u::@3
(label) bsearch16u::@4
(label) bsearch16u::@5
(label) bsearch16u::@6
(label) bsearch16u::@7
(label) bsearch16u::@8
(label) bsearch16u::@9
(label) bsearch16u::@return
(word*) bsearch16u::items
(word*) bsearch16u::items#0 items zp ZP_WORD:14 1001.0
(word*) bsearch16u::items#1 items#1 zp ZP_WORD:12 2.0
(word*) bsearch16u::items#10 items#10 zp ZP_WORD:12 429.2857142857143
(word*) bsearch16u::items#11 items zp ZP_WORD:14 752.25
(word*~) bsearch16u::items#16 items#16 zp ZP_WORD:12 2002.0
(word*~) bsearch16u::items#19 items zp ZP_WORD:14 2002.0
(word) bsearch16u::key
(word) bsearch16u::key#0 key zp ZP_WORD:34 0.23529411764705882
(byte) bsearch16u::num
(byte) bsearch16u::num#0 reg byte x 1001.0
(byte) bsearch16u::num#1 reg byte x 2002.0
(byte) bsearch16u::num#10 reg byte x 444.8888888888889
(byte) bsearch16u::num#5 reg byte x 3003.0
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0 pivot zp ZP_WORD:14 750.75
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0 result zp ZP_WORD:36 1501.5
(word*) bsearch16u::return
(word*) bsearch16u::return#1 return zp ZP_WORD:14 335.00000000000006
(word*) bsearch16u::return#2 return zp ZP_WORD:14 6.0
(word*) bsearch16u::return#3 return zp ZP_WORD:14 4.0
(byte*) heap_head
(byte*) heap_head#1 heap_head zp ZP_WORD:2 0.2446808510638298
(byte*) heap_head#18 heap_head zp ZP_WORD:2 23.0
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(word~) init_angle_screen::$11 $11 zp ZP_WORD:10 202.0
(byte~) init_angle_screen::$13 reg byte a 202.0
(byte~) init_angle_screen::$14 reg byte a 202.0
(byte~) init_angle_screen::$15 reg byte a 202.0
(byte~) init_angle_screen::$3 reg byte a 202.0
(byte~) init_angle_screen::$4 reg byte a 202.0
(byte~) init_angle_screen::$7 reg byte a 202.0
(label) init_angle_screen::@1
(label) init_angle_screen::@2
(label) init_angle_screen::@3
(label) init_angle_screen::@4
(label) init_angle_screen::@5
(label) init_angle_screen::@return
(byte) init_angle_screen::ang_w
(byte) init_angle_screen::ang_w#0 ang_w zp ZP_BYTE:31 84.16666666666666
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0 angle_w zp ZP_WORD:10 202.0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0 screen zp ZP_WORD:26 3.0
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:26 4.0
(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:26 7.333333333333333
(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp ZP_WORD:26 9.040000000000001
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0 screen_topline zp ZP_WORD:24 2.0
(byte*) init_angle_screen::screen_topline#1 screen_topline zp ZP_WORD:24 5.5
(byte*) init_angle_screen::screen_topline#6 screen_topline zp ZP_WORD:24 9.416666666666666
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 x zp ZP_BYTE:4 101.0
(byte) init_angle_screen::x#5 x zp ZP_BYTE:4 25.25
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 xb zp ZP_BYTE:7 101.0
(byte) init_angle_screen::xb#5 xb zp ZP_BYTE:7 19.238095238095237
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 xw zp ZP_WORD:34 33.666666666666664
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 y zp ZP_BYTE:30 16.5
(byte) init_angle_screen::y#5 y zp ZP_BYTE:30 4.730769230769231
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 yw zp ZP_WORD:36 50.5
(void()) init_buckets((byte*) init_buckets::screen)
(word~) init_buckets::$10 $10 zp ZP_WORD:32 11.0
(word~) init_buckets::$12 $12 zp ZP_WORD:34 22.0
(word~) init_buckets::$13 $13 zp ZP_WORD:36 22.0
(byte~) init_buckets::$14 reg byte a 22.0
(byte*~) init_buckets::$15 $15 zp ZP_WORD:5 22.0
(word**~) init_buckets::$16 $16 zp ZP_WORD:34 22.0
(word**~) init_buckets::$17 $17 zp ZP_WORD:36 22.0
(void*~) init_buckets::$5 $5 zp ZP_WORD:5 3.6666666666666665
(word~) init_buckets::$9 $9 zp ZP_WORD:36 22.0
(label) init_buckets::@1
(label) init_buckets::@2
(label) init_buckets::@3
(label) init_buckets::@4
(label) init_buckets::@5
(label) init_buckets::@6
(label) init_buckets::@7
(label) init_buckets::@8
(label) init_buckets::@return
(word*) init_buckets::bucket
(word*) init_buckets::bucket#0 bucket zp ZP_WORD:36 7.333333333333333
(byte*) init_buckets::dist
(byte*) init_buckets::dist#1 dist zp ZP_WORD:8 7.333333333333333
(byte*) init_buckets::dist#3 dist#3 zp ZP_WORD:2 7.333333333333333
(byte*) init_buckets::dist#4 dist zp ZP_WORD:8 23.0
(byte*) init_buckets::dist#5 dist#5 zp ZP_WORD:2 4.6000000000000005
(byte*~) init_buckets::dist#6 dist zp ZP_WORD:8 4.0
(byte*~) init_buckets::dist#8 dist#8 zp ZP_WORD:2 4.0
(byte) init_buckets::distance
(byte) init_buckets::distance#0 distance zp ZP_BYTE:30 5.5
(byte) init_buckets::i
(byte) init_buckets::i#1 reg byte y 16.5
(byte) init_buckets::i#2 reg byte y 16.5
(word) init_buckets::i1
(word) init_buckets::i1#1 i1 zp ZP_WORD:10 16.5
(word) init_buckets::i1#2 i1 zp ZP_WORD:10 7.333333333333333
(word) init_buckets::i2
(word) init_buckets::i2#1 i2 zp ZP_WORD:24 16.5
(word) init_buckets::i2#2 i2 zp ZP_WORD:24 5.5
(byte) init_buckets::i3
(byte) init_buckets::i3#1 reg byte y 16.5
(byte) init_buckets::i3#2 reg byte y 16.5
(word) init_buckets::i4
(word) init_buckets::i4#1 i4 zp ZP_WORD:26 16.5
(word) init_buckets::i4#2 i4 zp ZP_WORD:26 2.0
(byte*) init_buckets::screen
(byte*) init_buckets::screen#0 screen zp ZP_WORD:28 0.42500000000000004
(void()) init_dist_screen((byte*) init_dist_screen::screen)
(byte~) init_dist_screen::$14 reg byte a 202.0
(byte~) init_dist_screen::$16 reg byte a 202.0
(byte~) init_dist_screen::$5 reg byte a 22.0
(byte~) init_dist_screen::$7 reg byte a 22.0
(label) init_dist_screen::@1
(label) init_dist_screen::@10
(label) init_dist_screen::@11
(label) init_dist_screen::@12
(label) init_dist_screen::@13
(label) init_dist_screen::@14
(label) init_dist_screen::@2
(label) init_dist_screen::@3
(label) init_dist_screen::@4
(label) init_dist_screen::@5
(label) init_dist_screen::@6
(label) init_dist_screen::@7
(label) init_dist_screen::@8
(label) init_dist_screen::@9
(label) init_dist_screen::@return
(byte) init_dist_screen::d
(byte) init_dist_screen::d#0 reg byte a 126.25
(word) init_dist_screen::ds
(word) init_dist_screen::ds#0 ds zp ZP_WORD:34 202.0
(byte*) init_dist_screen::screen
(byte*) init_dist_screen::screen#0 screen zp ZP_WORD:8 1.5
(byte*) init_dist_screen::screen_bottomline
(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp ZP_WORD:10 4.0
(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp ZP_WORD:10 7.333333333333333
(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp ZP_WORD:10 6.848484848484849
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#1 screen_topline zp ZP_WORD:8 5.5
(byte*) init_dist_screen::screen_topline#11 screen_topline zp ZP_WORD:8 7.0625
(byte) init_dist_screen::x
(byte) init_dist_screen::x#1 x zp ZP_BYTE:31 101.0
(byte) init_dist_screen::x#10 x zp ZP_BYTE:31 26.578947368421055
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0 reg byte a 202.0
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#1 xb zp ZP_BYTE:30 101.0
(byte) init_dist_screen::xb#10 xb zp ZP_BYTE:30 20.2
(byte) init_dist_screen::xd
(byte) init_dist_screen::xd#0 reg byte a 303.0
(word) init_dist_screen::xds
(word) init_dist_screen::xds#0 xds zp ZP_WORD:34 202.0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#1 y zp ZP_BYTE:7 16.5
(byte) init_dist_screen::y#10 y zp ZP_BYTE:7 0.9705882352941178
(byte) init_dist_screen::y2
(byte) init_dist_screen::y2#0 reg byte a 22.0
(byte) init_dist_screen::yd
(byte) init_dist_screen::yd#0 reg byte a 33.0
(word) init_dist_screen::yds
(word) init_dist_screen::yds#0 yds zp ZP_WORD:32 4.869565217391305
(void()) init_squares()
(byte~) init_squares::$3 reg byte a 22.0
(byte~) init_squares::$4 reg byte a 22.0
(label) init_squares::@1
(label) init_squares::@2
(label) init_squares::@return
(byte) init_squares::i
(byte) init_squares::i#1 reg byte x 16.5
(byte) init_squares::i#2 reg byte x 5.5
(word) init_squares::sqr
(word) init_squares::sqr#1 sqr zp ZP_WORD:24 7.333333333333333
(word) init_squares::sqr#2 sqr zp ZP_WORD:24 6.6000000000000005
(word*) init_squares::squares
(word*) init_squares::squares#0 squares zp ZP_WORD:26 4.0
(word*) init_squares::squares#1 squares zp ZP_WORD:26 3.6666666666666665
(word*) init_squares::squares#2 squares zp ZP_WORD:26 17.5
(void()) main()
(byte~) main::$21 reg byte a 22.0
(byte~) main::$22 reg byte a 202.0
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@17
(label) main::@18
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(byte*) main::angle
(byte*) main::angle#0 angle zp ZP_WORD:28 151.5
(word[]) main::bucket
(word[]) main::bucket#0 bucket zp ZP_WORD:24 6.588235294117648
(byte) main::bucket_idx
(byte) main::bucket_idx#1 bucket_idx zp ZP_BYTE:30 11.0
(byte) main::bucket_idx#6 bucket_idx zp ZP_BYTE:30 2.64
(byte) main::bucket_size
(byte) main::bucket_size#0 bucket_size zp ZP_BYTE:31 7.6875
(byte*) main::fill
(byte*) main::fill#0 fill zp ZP_WORD:26 202.0
(byte*) main::fill1
(byte*) main::fill1#0 fill1 zp ZP_WORD:8 22.0
(byte) main::i
(byte) main::i#1 reg byte x 101.0
(byte) main::i#2 reg byte x 33.666666666666664
(byte) main::min_angle
(byte) main::min_angle#1 min_angle zp ZP_BYTE:4 202.0
(byte) main::min_angle#2 min_angle zp ZP_BYTE:4 40.4
(byte) main::min_angle#5 min_angle zp ZP_BYTE:4 134.66666666666666
(word) main::min_offset
(word~) main::min_offset#11 min_offset#11 zp ZP_WORD:10 202.0
(word) main::min_offset#2 min_offset zp ZP_WORD:8 36.11111111111111
(word) main::min_offset#5 min_offset#5 zp ZP_WORD:10 202.0
(word~) main::min_offset#8 min_offset zp ZP_WORD:8 202.0
(word~) main::min_offset#9 min_offset#9 zp ZP_WORD:10 202.0
(word) main::offset
(word) main::offset#0 offset zp ZP_WORD:10 67.33333333333333
(void*()) malloc((word) malloc::size)
(label) malloc::@return
(byte*) malloc::mem
(byte*) malloc::mem#0 mem zp ZP_WORD:5 0.4
(void*) malloc::return
(word) malloc::size
(word) malloc::size#6 size zp ZP_WORD:5 22.0
(word) malloc::size#7 size zp ZP_WORD:5 13.0
(word()) sqr((byte) sqr::val)
(byte~) sqr::$0 reg byte a 4.0
(label) sqr::@return
(word) sqr::return
(word) sqr::return#0 return zp ZP_WORD:34 28.5
(word) sqr::return#2 return#2 zp ZP_WORD:32 22.0
(word) sqr::return#3 return zp ZP_WORD:34 202.0
(byte) sqr::val
(byte) sqr::val#0 reg byte a 22.0
(byte) sqr::val#1 reg byte a 202.0
(byte) sqr::val#2 reg byte a 114.0
(byte()) sqrt((word) sqrt::val)
(word~) sqrt::$1 $1 zp ZP_WORD:14 2.0
(word~) sqrt::$3 $3 zp ZP_WORD:14 4.0
(label) sqrt::@1
(label) sqrt::@return
(word*) sqrt::found
(word*) sqrt::found#0 found zp ZP_WORD:14 4.0
(byte) sqrt::return
(byte) sqrt::return#0 reg byte a 34.33333333333333
(byte) sqrt::return#2 reg byte a 202.0
(byte) sqrt::sq
(word) sqrt::val
(word) sqrt::val#0 val zp ZP_WORD:34 103.0

reg byte x [ main::i#2 main::i#1 ]
reg byte y [ init_buckets::i#2 init_buckets::i#1 ]
reg byte y [ init_buckets::i3#2 init_buckets::i3#1 ]
zp ZP_WORD:2 [ heap_head#18 heap_head#1 init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
zp ZP_BYTE:4 [ init_angle_screen::x#5 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
zp ZP_WORD:5 [ 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 malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$5 SQUARES#1 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp ZP_BYTE:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#5 init_angle_screen::xb#1 ]
zp ZP_WORD:8 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 main::min_offset#2 main::min_offset#8 main::fill1#0 ]
zp ZP_WORD:10 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#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::return#2 init_angle_screen::angle_w#0 init_angle_screen::$11 init_buckets::i1#2 init_buckets::i1#1 main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ]
reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
zp ZP_WORD:12 [ bsearch16u::items#10 bsearch16u::items#16 bsearch16u::items#1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp ZP_WORD:14 [ bsearch16u::return#1 bsearch16u::pivot#0 bsearch16u::return#2 bsearch16u::items#11 bsearch16u::items#0 bsearch16u::items#19 bsearch16u::$2 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#10 bsearch16u::num#0 ]
reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ]
reg byte x [ init_squares::i#2 init_squares::i#1 ]
zp ZP_WORD:16 [ SCREEN_ANGLE#0 ]
zp ZP_WORD:18 [ BUCKET_SIZES#0 ]
zp ZP_WORD:20 [ BUCKETS#0 ]
zp ZP_WORD:22 [ BUCKET_IDX#0 ]
reg byte a [ main::$21 ]
zp ZP_WORD:24 [ main::bucket#0 init_squares::sqr#2 init_squares::sqr#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 init_buckets::i2#2 init_buckets::i2#1 ]
reg byte a [ main::$22 ]
zp ZP_WORD:26 [ main::fill#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 init_buckets::i4#2 init_buckets::i4#1 ]
zp ZP_WORD:28 [ main::angle#0 SCREEN_DIST#0 init_buckets::screen#0 ]
zp ZP_BYTE:30 [ init_buckets::distance#0 init_dist_screen::xb#10 init_dist_screen::xb#1 init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ]
reg byte a [ init_buckets::$14 ]
reg byte a [ init_angle_screen::$3 ]
reg byte a [ init_angle_screen::$4 ]
reg byte a [ init_angle_screen::$7 ]
zp ZP_BYTE:31 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#10 init_dist_screen::x#1 ]
reg byte a [ init_angle_screen::$13 ]
reg byte a [ init_angle_screen::$14 ]
reg byte a [ init_angle_screen::$15 ]
reg byte a [ atan2_16::$24 ]
reg byte a [ atan2_16::$23 ]
reg byte a [ init_dist_screen::y2#0 ]
zp ZP_WORD:32 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$10 ]
reg byte a [ init_dist_screen::x2#0 ]
zp ZP_WORD:34 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ]
reg byte a [ sqrt::return#2 ]
reg byte a [ init_dist_screen::d#0 ]
reg byte a [ sqrt::return#0 ]
reg byte a [ bsearch16u::$6 ]
reg byte a [ bsearch16u::$16 ]
zp ZP_WORD:36 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$9 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ]
reg byte a [ sqr::$0 ]
reg byte a [ init_squares::$3 ]
reg byte a [ init_squares::$4 ]


FINAL ASSEMBLER
Score: 1142626

  // File Comments
// Fill screen using a spiral based on distance-to-center / angle-to-center
// Utilizes a bucket sort for identifying the minimum angle/distance
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .const SIZEOF_WORD = 2
  .const SIZEOF_BYTE = 1
  .const SIZEOF_POINTER = 2
  .label RASTER = $d012
  .label BORDERCOL = $d020
  // Color Ram
  .label COLS = $d800
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  // 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 = '*'
  // The number of buckets in our bucket sort
  .const NUM_BUCKETS = $30
  .const NUM_SQUARES = $30
  .label heap_head = 2
  .label SQUARES = 5
  // Screen containing distance to center
  .label SCREEN_DIST = $1c
  // Screen containing angle to center
  .label SCREEN_ANGLE = $10
  // Array containing the bucket size for each of the distance buckets
  .label BUCKET_SIZES = $12
  // Buckets containing screen indices for each distance from the center.
  // BUCKETS[dist] is an array of words containing screen indices.
  // The size of the array BUCKETS[dist] is BUCKET_SIZES[dist]
  .label BUCKETS = $14
  // Current index into each bucket. Used while populating the buckets. (After population the end the values will be equal to the bucket sizes)
  .label BUCKET_IDX = $16
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
  // malloc(1000)
  // [2] call malloc 
  // [93] phi from @1 to malloc [phi:@1->malloc]
  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@1->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP#0 [phi:@1->malloc#1] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  // @4
  // 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 
  // [93] phi from @4 to malloc [phi:@4->malloc]
  // [93] phi (word) malloc::size#7 = (word) $3e8 [phi:@4->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy 
  jsr malloc
  // @5
  // 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 @5 to @2 [phi:@5->@2]
  // @2
  // malloc(NUM_BUCKETS*sizeof(byte))
  // [7] call malloc 
  // [93] phi from @2 to malloc [phi:@2->malloc]
  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@2->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@2->malloc#1] -- register_copy 
  jsr malloc
  // @6
  // malloc(NUM_BUCKETS*sizeof(byte))
  // [8] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z BUCKET_SIZES
  lda.z malloc.mem+1
  sta.z BUCKET_SIZES+1
  // malloc(NUM_BUCKETS*sizeof(word*))
  // [9] call malloc 
  // [93] phi from @6 to malloc [phi:@6->malloc]
  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_POINTER [phi:@6->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy 
  jsr malloc
  // @7
  // malloc(NUM_BUCKETS*sizeof(word*))
  // [10] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z BUCKETS
  lda.z malloc.mem+1
  sta.z BUCKETS+1
  // malloc(NUM_BUCKETS*sizeof(byte))
  // [11] call malloc 
  // [93] phi from @7 to malloc [phi:@7->malloc]
  // [93] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS#0*(const byte) SIZEOF_BYTE [phi:@7->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@7->malloc#1] -- register_copy 
  jsr malloc
  // @8
  // malloc(NUM_BUCKETS*sizeof(byte))
  // [12] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z BUCKET_IDX
  lda.z malloc.mem+1
  sta.z BUCKET_IDX+1
  // [13] phi from @8 to @3 [phi:@8->@3]
  // @3
  // [14] call main 
  jsr main
  rts
  // [15] phi from @3 to @end [phi:@3->@end]
  // @end
  // main
main: {
    .label bucket = $18
    .label bucket_size = $1f
    .label bucket_idx = $1e
    .label offset = $a
    .label fill = $1a
    .label angle = $1c
    .label min_angle = 4
    .label fill1 = 8
    .label min_offset = 8
    .label min_offset_5 = $a
    .label min_offset_9 = $a
    .label min_offset_11 = $a
    // asm
    // asm { sei  }
    sei
    // init_dist_screen(SCREEN_DIST)
    // [17] (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
    // [18] call init_dist_screen 
    // [171] phi from main to init_dist_screen [phi:main->init_dist_screen]
    jsr init_dist_screen
    // main::@15
    // init_angle_screen(SCREEN_ANGLE)
    // [19] (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
    // [20] call init_angle_screen 
    jsr init_angle_screen
    // main::@16
    // init_buckets(SCREEN_DIST)
    // [21] (byte*) init_buckets::screen#0 ← (byte[])(void*) SCREEN_DIST#0
    // [22] call init_buckets 
    // [53] phi from main::@16 to init_buckets [phi:main::@16->init_buckets]
    jsr init_buckets
    // [23] phi from main::@16 to main::@1 [phi:main::@16->main::@1]
    // [23] phi (byte) main::bucket_idx#6 = (byte) 0 [phi:main::@16->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z bucket_idx
    // main::@1
    // main::@2
  b2:
    // while (*RASTER!=0xff)
    // [24] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne b2
    // main::@3
    // (*BORDERCOL)++;
    // [25] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
    // bucket = BUCKETS[bucket_idx]
    // [26] (byte~) main::$21 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z bucket_idx
    asl
    // [27] (word[]) main::bucket#0 ← *((word*[])(void*) BUCKETS#0 + (byte~) main::$21) -- pwuz1=pptz2_derefidx_vbuaa 
    tay
    lda (BUCKETS),y
    sta.z bucket
    iny
    lda (BUCKETS),y
    sta.z bucket+1
    // bucket_size = BUCKET_SIZES[bucket_idx]
    // [28] (byte) main::bucket_size#0 ← *((byte[])(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6) -- vbuz1=pbuz2_derefidx_vbuz3 
    ldy.z bucket_idx
    lda (BUCKET_SIZES),y
    sta.z bucket_size
    // if(bucket_size>0)
    // [29] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
    cmp #0
    beq b4
    // [30] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
    // [30] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z min_angle
    // [30] phi (word) main::min_offset#2 = (word) $ffff [phi:main::@3->main::@5#1] -- vwuz1=vwuc1 
    lda #<$ffff
    sta.z min_offset
    lda #>$ffff
    sta.z min_offset+1
    // [30] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 
    ldx #0
    // main::@5
  b5:
    // for( byte i=0;i<bucket_size;i++)
    // [31] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6 -- vbuxx_lt_vbuz1_then_la1 
    cpx.z bucket_size
    bcc b6
    // main::@7
    // if(min_offset!=0xffff)
    // [32] if((word) main::min_offset#2==(word) $ffff) goto main::@4 -- vwuz1_eq_vwuc1_then_la1 
    lda.z min_offset
    cmp #<$ffff
    bne !+
    lda.z min_offset+1
    cmp #>$ffff
    beq b4
  !:
    // main::@11
    // fill = SCREEN_FILL+min_offset
    // [33] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL#0 + (word) main::min_offset#2 -- pbuz1=pbuc1_plus_vwuz1 
    clc
    lda.z fill1
    adc #<SCREEN_FILL
    sta.z fill1
    lda.z fill1+1
    adc #>SCREEN_FILL
    sta.z fill1+1
    // *fill = FILL_CHAR
    // [34] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR#0 -- _deref_pbuz1=vbuc1 
    lda #FILL_CHAR
    ldy #0
    sta (fill1),y
    // (*BORDERCOL)--;
    // [35] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // [23] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1]
    // [23] phi (byte) main::bucket_idx#6 = (byte) main::bucket_idx#6 [phi:main::@11/main::@12->main::@1#0] -- register_copy 
    jmp b2
    // main::@4
  b4:
    // bucket_idx++;
    // [36] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
    inc.z bucket_idx
    // if(bucket_idx==NUM_BUCKETS)
    // [37] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS#0) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BUCKETS
    cmp.z bucket_idx
    bne b12
    // main::@13
    // (*BORDERCOL)--;
    // [38] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // main::@14
  b14:
    // (*(COLS+999))++;
    // [39] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp b14
    // main::@12
  b12:
    // (*BORDERCOL)--;
    // [40] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp b2
    // main::@6
  b6:
    // offset = bucket[i]
    // [41] (byte~) main::$22 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [42] (word) main::offset#0 ← *((word[]) main::bucket#0 + (byte~) main::$22) -- vwuz1=pwuz2_derefidx_vbuaa 
    tay
    lda (bucket),y
    sta.z offset
    iny
    lda (bucket),y
    sta.z offset+1
    // fill = SCREEN_FILL+offset
    // [43] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL#0 + (word) main::offset#0 -- pbuz1=pbuc1_plus_vwuz2 
    lda.z offset
    clc
    adc #<SCREEN_FILL
    sta.z fill
    lda.z offset+1
    adc #>SCREEN_FILL
    sta.z fill+1
    // if(*fill!=FILL_CHAR)
    // [44] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR#0) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
    lda #FILL_CHAR
    ldy #0
    cmp (fill),y
    beq b18
    // main::@9
    // angle = SCREEN_ANGLE+offset
    // [45] (byte*) main::angle#0 ← (byte[])(void*) SCREEN_ANGLE#0 + (word) main::offset#0 -- pbuz1=pbuz2_plus_vwuz3 
    lda.z SCREEN_ANGLE
    clc
    adc.z offset
    sta.z angle
    lda.z SCREEN_ANGLE+1
    adc.z offset+1
    sta.z angle+1
    // if(*angle<=min_angle)
    // [46] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17 -- _deref_pbuz1_gt_vbuz2_then_la1 
    lda (angle),y
    cmp.z min_angle
    beq !+
    bcs b17
  !:
    // main::@10
    // min_angle = *angle
    // [47] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (angle),y
    sta.z min_angle
    // [48] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8]
    // [48] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy 
    // [48] phi (word) main::min_offset#5 = (word) main::offset#0 [phi:main::@10/main::@17/main::@18->main::@8#1] -- register_copy 
    // main::@8
  b8:
    // for( byte i=0;i<bucket_size;i++)
    // [49] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [50] (word~) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
    lda.z min_offset_5
    sta.z min_offset
    lda.z min_offset_5+1
    sta.z min_offset+1
    // [30] phi from main::@8 to main::@5 [phi:main::@8->main::@5]
    // [30] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy 
    // [30] phi (word) main::min_offset#2 = (word~) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy 
    // [30] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy 
    jmp b5
    // main::@17
  b17:
    // [51] (word~) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_9
    lda.z min_offset+1
    sta.z min_offset_9+1
    jmp b8
    // main::@18
  b18:
    // [52] (word~) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_11
    lda.z min_offset+1
    sta.z min_offset_11+1
    jmp b8
}
  // init_buckets
// Initialize buckets containing indices of chars on the screen with specific distances to the center.
// init_buckets(byte* zeropage($1c) screen)
init_buckets: {
    .label _5 = 5
    .label _9 = $24
    .label _10 = $20
    .label _12 = $22
    .label _13 = $24
    .label screen = $1c
    .label dist = 8
    .label i1 = $a
    .label i2 = $18
    .label distance = $1e
    .label bucket = $24
    .label dist_3 = 2
    .label i4 = $1a
    .label dist_5 = 2
    .label _15 = 5
    .label _16 = $22
    .label _17 = $24
    .label dist_8 = 2
    // [54] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
    // [54] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 
    ldy #0
  // Init bucket sizes to 0
    // [54] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
    // [54] phi (byte) init_buckets::i#2 = (byte) init_buckets::i#1 [phi:init_buckets::@1->init_buckets::@1#0] -- register_copy 
    // init_buckets::@1
  b1:
    // BUCKET_SIZES[i]=0
    // [55] *((byte[])(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
    lda #0
    sta (BUCKET_SIZES),y
    // for(byte i:0..NUM_BUCKETS-1)
    // [56] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy 
    iny
    // [57] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 
    cpy #NUM_BUCKETS-1+1
    bne b1
    // init_buckets::@2
    // [58] (byte*~) init_buckets::dist#6 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
    lda.z screen
    sta.z dist
    lda.z screen+1
    sta.z dist+1
    // [59] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
    // [59] phi (word) init_buckets::i1#2 = (word) 0 [phi:init_buckets::@2->init_buckets::@3#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z i1
    sta.z i1+1
    // [59] phi (byte*) init_buckets::dist#4 = (byte*~) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy 
    // [59] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
    // [59] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy 
    // [59] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#1 [phi:init_buckets::@3->init_buckets::@3#1] -- register_copy 
    // init_buckets::@3
  b3:
    // BUCKET_SIZES[*dist]++;
    // [60] *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte[])(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) -- pbuz1_derefidx__deref_pbuz2=_inc_pbuz1_derefidx__deref_pbuz2 
    ldy #0
    lda (dist),y
    tay
    lda (BUCKET_SIZES),y
    clc
    adc #1
    sta (BUCKET_SIZES),y
    // dist++;
    // [61] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
    inc.z dist
    bne !+
    inc.z dist+1
  !:
    // for( word i:0..999)
    // [62] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
    inc.z i1
    bne !+
    inc.z i1+1
  !:
    // [63] if((word) init_buckets::i1#1!=(word) $3e8) goto init_buckets::@3 -- vwuz1_neq_vwuc1_then_la1 
    lda.z i1+1
    cmp #>$3e8
    bne b3
    lda.z i1
    cmp #<$3e8
    bne b3
    // [64] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4]
    // [64] phi (word) init_buckets::i2#2 = (word) 0 [phi:init_buckets::@3->init_buckets::@4#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z i2
    sta.z i2+1
  // Allocate the buckets
    // [64] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4]
    // [64] phi (word) init_buckets::i2#2 = (word) init_buckets::i2#1 [phi:init_buckets::@8->init_buckets::@4#0] -- register_copy 
    // init_buckets::@4
  b4:
    // malloc(BUCKET_SIZES[i]*sizeof(byte*))
    // [65] (byte*~) init_buckets::$15 ← (byte[])(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2 -- pbuz1=pbuz2_plus_vwuz3 
    lda.z BUCKET_SIZES
    clc
    adc.z i2
    sta.z _15
    lda.z BUCKET_SIZES+1
    adc.z i2+1
    sta.z _15+1
    // [66] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1 -- vwuz1=_deref_pbuz1_rol_1 
    ldy #0
    lda (malloc.size),y
    asl
    sta.z malloc.size
    tya
    rol
    sta.z malloc.size+1
    // [67] call malloc 
    // [93] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc]
    // [93] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy 
    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_buckets::@4->malloc#1] -- register_copy 
    jsr malloc
    // init_buckets::@8
    // malloc(BUCKET_SIZES[i]*sizeof(byte*))
    // [68] (void*~) init_buckets::$5 ← (void*)(byte*) malloc::mem#0
    // BUCKETS[i] = malloc(BUCKET_SIZES[i]*sizeof(byte*))
    // [69] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1 -- vwuz1=vwuz2_rol_1 
    lda.z i2
    asl
    sta.z _12
    lda.z i2+1
    rol
    sta.z _12+1
    // [70] (word**~) init_buckets::$16 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$12 -- pptz1=pptz2_plus_vwuz1 
    lda.z _16
    clc
    adc.z BUCKETS
    sta.z _16
    lda.z _16+1
    adc.z BUCKETS+1
    sta.z _16+1
    // [71] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$5 -- _deref_pptz1=pwuz2 
    ldy #0
    lda.z _5
    sta (_16),y
    iny
    lda.z _5+1
    sta (_16),y
    // for( word i:0..NUM_BUCKETS-1)
    // [72] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
    inc.z i2
    bne !+
    inc.z i2+1
  !:
    // [73] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@4 -- vwuz1_neq_vwuc1_then_la1 
    lda.z i2+1
    cmp #>NUM_BUCKETS-1+1
    bne b4
    lda.z i2
    cmp #<NUM_BUCKETS-1+1
    bne b4
    // [74] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5]
    // [74] phi (byte) init_buckets::i3#2 = (byte) 0 [phi:init_buckets::@8->init_buckets::@5#0] -- vbuyy=vbuc1 
    ldy #0
  // Iterate all distances and fill the buckets with indices into the screens
    // [74] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
    // [74] phi (byte) init_buckets::i3#2 = (byte) init_buckets::i3#1 [phi:init_buckets::@5->init_buckets::@5#0] -- register_copy 
    // init_buckets::@5
  b5:
    // BUCKET_IDX[i]=0
    // [75] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
    lda #0
    sta (BUCKET_IDX),y
    // for(byte i:0..NUM_BUCKETS-1)
    // [76] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy 
    iny
    // [77] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS#0-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 
    cpy #NUM_BUCKETS-1+1
    bne b5
    // init_buckets::@6
    // [78] (byte*~) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
    lda.z screen
    sta.z dist_8
    lda.z screen+1
    sta.z dist_8+1
    // [79] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7]
    // [79] phi (word) init_buckets::i4#2 = (word) 0 [phi:init_buckets::@6->init_buckets::@7#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z i4
    sta.z i4+1
    // [79] phi (byte*) init_buckets::dist#5 = (byte*~) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy 
    // [79] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7]
    // [79] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy 
    // [79] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#3 [phi:init_buckets::@7->init_buckets::@7#1] -- register_copy 
    // init_buckets::@7
  b7:
    // distance = *dist
    // [80] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (dist_5),y
    sta.z distance
    // (word)distance
    // [81] (word~) init_buckets::$9 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
    sta.z _9
    tya
    sta.z _9+1
    // bucket = BUCKETS[(word)distance]
    // [82] (word~) init_buckets::$13 ← (word~) init_buckets::$9 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z _13
    rol.z _13+1
    // [83] (word**~) init_buckets::$17 ← (word*[])(void*) BUCKETS#0 + (word~) init_buckets::$13 -- pptz1=pptz2_plus_vwuz1 
    lda.z _17
    clc
    adc.z BUCKETS
    sta.z _17
    lda.z _17+1
    adc.z BUCKETS+1
    sta.z _17+1
    // [84] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17) -- pwuz1=_deref_pptz1 
    lda (bucket),y
    pha
    iny
    lda (bucket),y
    sta.z bucket+1
    pla
    sta.z bucket
    // dist-screen
    // [85] (word~) init_buckets::$10 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 
    lda.z dist_5
    sec
    sbc.z screen
    sta.z _10
    lda.z dist_5+1
    sbc.z screen+1
    sta.z _10+1
    // bucket[BUCKET_IDX[distance]] = dist-screen
    // [86] (byte~) init_buckets::$14 ← *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1 -- vbuaa=pbuz1_derefidx_vbuz2_rol_1 
    ldy.z distance
    lda (BUCKET_IDX),y
    asl
    // [87] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$10 -- pwuz1_derefidx_vbuaa=vwuz2 
    tay
    lda.z _10
    sta (bucket),y
    iny
    lda.z _10+1
    sta (bucket),y
    // BUCKET_IDX[distance]++;
    // [88] *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte[])(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) -- pbuz1_derefidx_vbuz2=_inc_pbuz1_derefidx_vbuz2 
    ldy.z distance
    lda (BUCKET_IDX),y
    clc
    adc #1
    sta (BUCKET_IDX),y
    // *dist++;
    // [89] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
    inc.z dist_3
    bne !+
    inc.z dist_3+1
  !:
    // for(word i:0..999)
    // [90] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
    inc.z i4
    bne !+
    inc.z i4+1
  !:
    // [91] if((word) init_buckets::i4#1!=(word) $3e8) goto init_buckets::@7 -- vwuz1_neq_vwuc1_then_la1 
    lda.z i4+1
    cmp #>$3e8
    bne b7
    lda.z i4
    cmp #<$3e8
    bne b7
    // init_buckets::@return
    // }
    // [92] 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(5) size)
malloc: {
    .label mem = 5
    .label size = 5
    // mem = heap_head-size
    // [94] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7 -- 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
    // [95] (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
    // }
    // [96] return 
    rts
}
  // 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($1a) screen)
init_angle_screen: {
    .label _11 = $a
    .label screen = $1a
    .label screen_topline = $18
    .label screen_bottomline = $1a
    .label xw = $22
    .label yw = $24
    .label angle_w = $a
    .label ang_w = $1f
    .label x = 4
    .label xb = 7
    .label y = $1e
    // screen_topline = screen+40*12
    // [97] (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
    // [98] (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
    // [99] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
    // [99] 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 
    // [99] 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 
    // [99] 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
    // [99] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
    // [99] 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 
    // [99] 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 
    // [99] 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:
    // [100] phi from init_angle_screen::@1 to init_angle_screen::@3 [phi:init_angle_screen::@1->init_angle_screen::@3]
    // [100] phi (byte) init_angle_screen::xb#5 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@3#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [100] phi (byte) init_angle_screen::x#5 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@3#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    // [100] phi from init_angle_screen::@2 to init_angle_screen::@3 [phi:init_angle_screen::@2->init_angle_screen::@3]
    // [100] phi (byte) init_angle_screen::xb#5 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@2->init_angle_screen::@3#0] -- register_copy 
    // [100] phi (byte) init_angle_screen::x#5 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@2->init_angle_screen::@3#1] -- register_copy 
    // init_angle_screen::@3
  b3:
    // x*2
    // [101] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // 39-x*2
    // [102] (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 }
    // [103] (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
    // [104] (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 }
    // [105] (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)
    // [106] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [107] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [108] call atan2_16 
    jsr atan2_16
    // [109] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    // init_angle_screen::@5
    // angle_w = atan2_16(xw, yw)
    // [110] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // angle_w+0x0080
    // [111] (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)
    // [112] (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
    // [113] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#5) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    ldy.z xb
    sta (screen_bottomline),y
    // -ang_w
    // [114] (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
    // [115] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#5) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_topline),y
    // 0x80+ang_w
    // [116] (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
    // [117] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // 0x80-ang_w
    // [118] (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
    // [119] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#5) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [120] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#5 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [121] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#5 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // init_angle_screen::@2
    // [122] if((byte) init_angle_screen::x#1<(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
    // [123] (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
    // [124] (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)
    // [125] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [126] 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
    // }
    // [127] return 
    rts
}
  // atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zeropage($22) x, signed word zeropage($24) y)
atan2_16: {
    .label _2 = 5
    .label _7 = 8
    .label yi = 5
    .label xi = 8
    .label angle = $a
    .label xd = $e
    .label yd = $c
    .label return = $a
    .label x = $22
    .label y = $24
    // (y>=0)?y:-y
    // [128] 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
    // [129] (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
    // [130] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
    // [130] 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
    // [131] 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
    // [132] (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
    // [133] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
    // [133] 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:
    // [134] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
    // [134] 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
    // [134] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    tax
    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [134] 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)
    // [135] 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
    // [136] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
    // [136] 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
    // [137] (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)
    // [138] 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
    // [139] (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
    // [140] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
    // [140] 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)
    // [141] 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
    // [142] (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
    // [143] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
    // [143] 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
    // }
    // [144] return 
    rts
    // atan2_16::@11
  b11:
    // [145] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [146] (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
    // [147] (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
    // [148] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
    // [148] 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 
    // [148] 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 
    // [148] 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)
    // [149] 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)
    // [150] 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
    // [151] (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
    // [152] (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
    // [153] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
    // [153] 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 
    // [153] 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)
    // [154] 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
    // [155] (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
    // [156] (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]
    // [157] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [158] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) -- 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
    // [159] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
    // [159] 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 
    // [159] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [159] 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)
    // [160] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [161] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
    cpx #CORDIC_ITERATIONS_16-1+1
    bne !b12+
    jmp b12
  !b12:
    // [134] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
    // [134] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [134] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [134] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [134] 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
    // [162] (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
    // [163] (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]
    // [164] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [165] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) -- 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
    // [166] (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
    // [167] (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
    // [168] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 
    dey
    dey
    jmp b13
    // atan2_16::@4
  b4:
    // [169] (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:
    // [170] (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
// Utilizes symmetry around the center
// init_dist_screen(byte* zeropage(8) screen)
init_dist_screen: {
    .label screen = 8
    .label screen_bottomline = $a
    .label yds = $20
    .label screen_topline = 8
    .label y = 7
    .label xds = $22
    .label ds = $22
    .label x = $1f
    .label xb = $1e
    // init_squares()
    // [172] call init_squares 
    // [244] 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
    // [173] (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
    // [174] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
    // [174] 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 
    // [174] 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 
    // [174] 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
    // [174] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
    // [174] 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 
    // [174] 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 
    // [174] 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
    // [175] (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)
    // [176] 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
    // [177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$18+1
    // [178] 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]
    // [178] 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)
    // [179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
    // [180] call sqr 
    // [240] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
    // [240] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // sqr(yd)
    // [181] (word) sqr::return#2 ← (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
    // init_dist_screen::@12
    // yds = sqr(yd)
    // [182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
    // [183] phi from init_dist_screen::@12 to init_dist_screen::@6 [phi:init_dist_screen::@12->init_dist_screen::@6]
    // [183] phi (byte) init_dist_screen::xb#10 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@6#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [183] phi (byte) init_dist_screen::x#10 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@6#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    // [183] phi from init_dist_screen::@5 to init_dist_screen::@6 [phi:init_dist_screen::@5->init_dist_screen::@6]
    // [183] phi (byte) init_dist_screen::xb#10 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@5->init_dist_screen::@6#0] -- register_copy 
    // [183] phi (byte) init_dist_screen::x#10 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@5->init_dist_screen::@6#1] -- register_copy 
    // init_dist_screen::@6
  b6:
    // x2 = x*2
    // [184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // (x2>=39)?(x2-39):(39-x2)
    // [185] 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
    // [186] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [187] 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]
    // [187] 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)
    // [188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
    // [189] call sqr 
    // [240] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
    // [240] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy 
    jsr sqr
    // sqr(xd)
    // [190] (word) sqr::return#3 ← (word) sqr::return#0
    // init_dist_screen::@13
    // xds = sqr(xd)
    // [191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
    // ds = xds+yds
    // [192] (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)
    // [193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
    // [194] call sqrt 
    jsr sqrt
    // [195] (byte) sqrt::return#2 ← (byte) sqrt::return#0
    // init_dist_screen::@14
    // d = sqrt(ds)
    // [196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
    // screen_topline[x] = d
    // [197] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // screen_bottomline[x] = d
    // [198] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // screen_topline[xb] = d
    // [199] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // screen_bottomline[xb] = d
    // [200] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#10) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#10 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#10 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // init_dist_screen::@5
    // [203] if((byte) init_dist_screen::x#1<(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
    // [204] (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
    // [205] (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)
    // [206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [207] 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
    // }
    // [208] return 
    rts
    // init_dist_screen::@8
  b8:
    // (x2>=39)?(x2-39):(39-x2)
    // [209] (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)
    // [210] (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($22) val)
sqrt: {
    .label _1 = $e
    .label _3 = $e
    .label found = $e
    .label val = $22
    // bsearch16u(val, SQUARES, NUM_SQUARES)
    // [211] (word) bsearch16u::key#0 ← (word) sqrt::val#0
    // [212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z bsearch16u.items_1
    lda.z SQUARES+1
    sta.z bsearch16u.items_1+1
    // [213] call bsearch16u 
    // [220] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
    jsr bsearch16u
    // bsearch16u(val, SQUARES, NUM_SQUARES)
    // [214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
    // sqrt::@1
    // found = bsearch16u(val, SQUARES, NUM_SQUARES)
    // [215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
    // found-SQUARES
    // [216] (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
    // [217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z _1+1
    ror.z _1
    // (byte)(found-SQUARES)
    // [218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
    lda.z _1
    // sqrt::@return
    // }
    // [219] 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($22) key, word* zeropage($e) items, byte register(X) num)
bsearch16u: {
    .label _2 = $e
    .label pivot = $e
    .label result = $24
    .label return = $e
    .label items = $e
    .label key = $22
    .label items_1 = $c
    .label items_10 = $c
    .label items_16 = $c
    // [221] phi from bsearch16u to bsearch16u::@4 [phi:bsearch16u->bsearch16u::@4]
    // [221] phi (word*) bsearch16u::items#10 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@4#0] -- register_copy 
    // [221] phi (byte) bsearch16u::num#10 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@4#1] -- vbuxx=vbuc1 
    ldx #NUM_SQUARES
    // bsearch16u::@4
  b4:
    // num >> 1
    // [222] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#10 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
    txa
    lsr
    // items + (num >> 1)
    // [223] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [224] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#10 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
    clc
    adc.z items_10
    sta.z pivot
    lda #0
    adc.z items_10+1
    sta.z pivot+1
    // result = (signed int)key-(signed int)*pivot
    // [225] (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)
    // [226] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    bne b6
    lda.z result
    bne b6
    // [227] phi from bsearch16u::@2 bsearch16u::@4 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return]
    // [227] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@4->bsearch16u::@return#0] -- register_copy 
    // bsearch16u::@return
  breturn:
    // }
    // [228] return 
    rts
    // bsearch16u::@6
  b6:
    // if (result > 0)
    // [229] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10 -- vwsz1_le_0_then_la1 
    lda.z result+1
    bmi b10
    bne !+
    lda.z result
    beq b10
  !:
    // bsearch16u::@8
    // items = pivot+1
    // [230] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc.z items
    sta.z items
    bcc !+
    inc.z items+1
  !:
    // num--;
    // [231] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#10 -- vbuxx=_dec_vbuxx 
    dex
    // [232] phi from bsearch16u::@10 bsearch16u::@8 to bsearch16u::@7 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7]
    // [232] phi (word*) bsearch16u::items#11 = (word*~) bsearch16u::items#19 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#0] -- register_copy 
    // [232] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#10 [phi:bsearch16u::@10/bsearch16u::@8->bsearch16u::@7#1] -- register_copy 
    // bsearch16u::@7
  b7:
    // num >>= 1
    // [233] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
    txa
    lsr
    tax
    // bsearch16u::@3
    // while (num > 0)
    // [234] if((byte) bsearch16u::num#0>(byte) 0) goto bsearch16u::@9 -- vbuxx_gt_0_then_la1 
    cpx #0
    bne b9
    // bsearch16u::@5
    // *items<=key?items:items-1
    // [235] if(*((word*) bsearch16u::items#11)<=(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 breturn
  !:
    bcc breturn
    // bsearch16u::@1
    // [236] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#11 - (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
    // [237] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
    // [237] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    // bsearch16u::@2
    rts
    // bsearch16u::@9
  b9:
    // [238] (word*~) bsearch16u::items#16 ← (word*) bsearch16u::items#11 -- pwuz1=pwuz2 
    lda.z items
    sta.z items_16
    lda.z items+1
    sta.z items_16+1
    // [221] phi from bsearch16u::@9 to bsearch16u::@4 [phi:bsearch16u::@9->bsearch16u::@4]
    // [221] phi (word*) bsearch16u::items#10 = (word*~) bsearch16u::items#16 [phi:bsearch16u::@9->bsearch16u::@4#0] -- register_copy 
    // [221] phi (byte) bsearch16u::num#10 = (byte) bsearch16u::num#0 [phi:bsearch16u::@9->bsearch16u::@4#1] -- register_copy 
    jmp b4
    // bsearch16u::@10
  b10:
    // [239] (word*~) bsearch16u::items#19 ← (word*) bsearch16u::items#10 -- pwuz1=pwuz2 
    lda.z items_10
    sta.z items
    lda.z items_10+1
    sta.z items+1
    jmp b7
}
  // 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 = $22
    .label return_2 = $20
    // return SQUARES[val];
    // [241] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [242] (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
    // }
    // [243] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label squares = $1a
    .label sqr = $18
    // malloc(NUM_SQUARES*sizeof(word))
    // [245] call malloc 
    // [93] phi from init_squares to malloc [phi:init_squares->malloc]
    // [93] phi (word) malloc::size#7 = (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
    lda #>NUM_SQUARES*SIZEOF_WORD
    sta.z malloc.size+1
    // [93] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
    jsr malloc
    // init_squares::@2
    // malloc(NUM_SQUARES*sizeof(word))
    // [246] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
    // squares = SQUARES
    // [247] (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
    // [248] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
    // [248] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@2->init_squares::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
    // [248] 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
    // [248] phi from init_squares::@1 to init_squares::@1 [phi:init_squares::@1->init_squares::@1]
    // [248] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@1->init_squares::@1#0] -- register_copy 
    // [248] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@1->init_squares::@1#1] -- register_copy 
    // [248] 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
    // [249] *((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;
    // [250] (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
    // [251] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // i*2+1
    // [252] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 -- vbuaa=vbuaa_plus_1 
    clc
    adc #1
    // sqr += i*2+1
    // [253] (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)
    // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [255] 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
    // }
    // [256] return 
    rts
}
  // File Data
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
CORDIC_ATAN2_ANGLES_16:
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2


