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 *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte) atan2_16::i)
Fixing pointer array-indexing *((const word*) 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::$7)
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 condition *((byte*) strlen::str)
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) @8
Culled Empty Block (label) malloc::@1
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
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) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) init_squares::@4
Culled Empty Block (label) init_squares::@3
Culled Empty Block (label) init_squares::@5
Culled Empty Block (label) init_squares::@6
Culled Empty Block (label) @18
Culled Empty Block (label) sqr::@1
Culled Empty Block (label) @19
Culled Empty Block (label) sqrt::@1
Culled Empty Block (label) @20
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) @21
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) @23
Culled Empty Block (label) init_buckets::@10
Culled Empty Block (label) @24
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) @25
Culled Empty Block (label) init_dist_screen::@17
Culled Empty Block (label) init_dist_screen::@18
Culled Empty Block (label) init_dist_screen::@11
Culled Empty Block (label) init_dist_screen::@12
Culled Empty Block (label) init_dist_screen::@13
Culled Empty Block (label) init_dist_screen::@14
Culled Empty Block (label) init_dist_screen::@15
Culled Empty Block (label) init_dist_screen::@16

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@9
@9: scope:[]  from @begin
  (byte*) heap_head#0 ← (const byte*) HEAP_TOP
  to:@17

(void*()) malloc((word) malloc::size)
malloc: scope:[malloc]  from @22 @27 @28 @29 @30 init_buckets::@5 init_squares
  (word) malloc::size#7 ← phi( @22/(word) malloc::size#1 @27/(word) malloc::size#2 @28/(word) malloc::size#3 @29/(word) malloc::size#4 @30/(word) malloc::size#5 init_buckets::@5/(word) malloc::size#6 init_squares/(word) malloc::size#0 )
  (byte*) heap_head#18 ← phi( @22/(byte*) heap_head#35 @27/(byte*) heap_head#5 @28/(byte*) heap_head#6 @29/(byte*) heap_head#7 @30/(byte*) heap_head#8 init_buckets::@5/(byte*) heap_head#36 init_squares/(byte*) heap_head#37 )
  (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

(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
bsearch16u: scope:[bsearch16u]  from sqrt
  (word) bsearch16u::key#4 ← phi( sqrt/(word) bsearch16u::key#0 )
  (word*) bsearch16u::items#7 ← phi( sqrt/(word*) bsearch16u::items#1 )
  (byte) bsearch16u::num#7 ← phi( sqrt/(byte) bsearch16u::num#2 )
  to:bsearch16u::@6
bsearch16u::@6: scope:[bsearch16u]  from bsearch16u bsearch16u::@10
  (word) bsearch16u::key#3 ← phi( bsearch16u/(word) bsearch16u::key#4 bsearch16u::@10/(word) bsearch16u::key#5 )
  (word*) bsearch16u::items#6 ← phi( bsearch16u/(word*) bsearch16u::items#7 bsearch16u::@10/(word*) bsearch16u::items#8 )
  (byte) bsearch16u::num#3 ← phi( bsearch16u/(byte) bsearch16u::num#7 bsearch16u::@10/(byte) bsearch16u::num#0 )
  (bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0
  if((bool~) bsearch16u::$5) goto bsearch16u::@7
  to:bsearch16u::@8
bsearch16u::@7: scope:[bsearch16u]  from bsearch16u::@6
  (word) bsearch16u::key#1 ← phi( bsearch16u::@6/(word) bsearch16u::key#3 )
  (word*) bsearch16u::items#2 ← phi( bsearch16u::@6/(word*) bsearch16u::items#6 )
  (byte) bsearch16u::num#4 ← phi( bsearch16u::@6/(byte) bsearch16u::num#3 )
  (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1
  (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD
  (word*~) bsearch16u::$7 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
  (word*) bsearch16u::pivot#0 ← (word*~) bsearch16u::$7
  (signed word~) bsearch16u::$8 ← ((signed word)) (word) bsearch16u::key#1
  (signed word~) bsearch16u::$9 ← ((signed word)) *((word*) bsearch16u::pivot#0)
  (signed word~) bsearch16u::$10 ← (signed word~) bsearch16u::$8 - (signed word~) bsearch16u::$9
  (signed word) bsearch16u::result#0 ← (signed word~) bsearch16u::$10
  (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (number) 0
  (bool~) bsearch16u::$12 ← ! (bool~) bsearch16u::$11
  if((bool~) bsearch16u::$12) goto bsearch16u::@9
  to:bsearch16u::@13
bsearch16u::@8: scope:[bsearch16u]  from bsearch16u::@6
  (word) bsearch16u::key#2 ← phi( bsearch16u::@6/(word) bsearch16u::key#3 )
  (word*) bsearch16u::items#3 ← phi( bsearch16u::@6/(word*) bsearch16u::items#6 )
  (bool~) bsearch16u::$0 ← *((word*) bsearch16u::items#3) <= (word) bsearch16u::key#2
  if((bool~) bsearch16u::$0) goto bsearch16u::@1
  to:bsearch16u::@2
bsearch16u::@9: scope:[bsearch16u]  from bsearch16u::@7
  (word) bsearch16u::key#7 ← phi( bsearch16u::@7/(word) bsearch16u::key#1 )
  (word*) bsearch16u::items#9 ← phi( bsearch16u::@7/(word*) bsearch16u::items#2 )
  (word*) bsearch16u::pivot#3 ← phi( bsearch16u::@7/(word*) bsearch16u::pivot#0 )
  (byte) bsearch16u::num#8 ← phi( bsearch16u::@7/(byte) bsearch16u::num#4 )
  (signed word) bsearch16u::result#1 ← phi( bsearch16u::@7/(signed word) bsearch16u::result#0 )
  (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (number) 0
  (bool~) bsearch16u::$14 ← ! (bool~) bsearch16u::$13
  if((bool~) bsearch16u::$14) goto bsearch16u::@10
  to:bsearch16u::@15
bsearch16u::@13: scope:[bsearch16u]  from bsearch16u::@7
  (word*) bsearch16u::pivot#1 ← phi( bsearch16u::@7/(word*) bsearch16u::pivot#0 )
  (word*) bsearch16u::return#0 ← (word*) bsearch16u::pivot#1
  to:bsearch16u::@return
bsearch16u::@return: scope:[bsearch16u]  from bsearch16u::@13 bsearch16u::@3
  (word*) bsearch16u::return#4 ← phi( bsearch16u::@13/(word*) bsearch16u::return#0 bsearch16u::@3/(word*) bsearch16u::return#2 )
  (word*) bsearch16u::return#1 ← (word*) bsearch16u::return#4
  return 
  to:@return
bsearch16u::@10: scope:[bsearch16u]  from bsearch16u::@15 bsearch16u::@9
  (word) bsearch16u::key#5 ← phi( bsearch16u::@15/(word) bsearch16u::key#6 bsearch16u::@9/(word) bsearch16u::key#7 )
  (word*) bsearch16u::items#8 ← phi( bsearch16u::@15/(word*) bsearch16u::items#0 bsearch16u::@9/(word*) bsearch16u::items#9 )
  (byte) bsearch16u::num#5 ← phi( bsearch16u::@15/(byte) bsearch16u::num#1 bsearch16u::@9/(byte) bsearch16u::num#8 )
  (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (number) 1
  to:bsearch16u::@6
bsearch16u::@15: scope:[bsearch16u]  from bsearch16u::@9
  (word) bsearch16u::key#6 ← phi( bsearch16u::@9/(word) bsearch16u::key#7 )
  (byte) bsearch16u::num#6 ← phi( bsearch16u::@9/(byte) bsearch16u::num#8 )
  (word*) bsearch16u::pivot#2 ← phi( bsearch16u::@9/(word*) bsearch16u::pivot#3 )
  (number~) bsearch16u::$17 ← (number) 1 * (const byte) SIZEOF_WORD
  (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot#2 + (number~) bsearch16u::$17
  (word*) bsearch16u::items#0 ← (word*~) bsearch16u::$15
  (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#6
  to:bsearch16u::@10
bsearch16u::@1: scope:[bsearch16u]  from bsearch16u::@8
  (word*) bsearch16u::items#4 ← phi( bsearch16u::@8/(word*) bsearch16u::items#3 )
  (word*~) bsearch16u::$3 ← (word*) bsearch16u::items#4
  to:bsearch16u::@3
bsearch16u::@2: scope:[bsearch16u]  from bsearch16u::@8
  (word*) bsearch16u::items#5 ← phi( bsearch16u::@8/(word*) bsearch16u::items#3 )
  (number~) bsearch16u::$18 ← (number) 1 * (const byte) SIZEOF_WORD
  (word*~) bsearch16u::$1 ← (word*) bsearch16u::items#5 - (number~) bsearch16u::$18
  (word*~) bsearch16u::$2 ← (word*~) bsearch16u::$1
  to:bsearch16u::@3
bsearch16u::@3: scope:[bsearch16u]  from bsearch16u::@1 bsearch16u::@2
  (word*~) bsearch16u::$4 ← phi( bsearch16u::@1/(word*~) bsearch16u::$3 bsearch16u::@2/(word*~) bsearch16u::$2 )
  (word*) bsearch16u::return#2 ← (word*~) bsearch16u::$4
  to:bsearch16u::@return
@17: scope:[]  from @9
  (byte*) heap_head#47 ← phi( @9/(byte*) heap_head#0 )
  (byte) NUM_SQUARES#0 ← (byte) $ff
  (word*) SQUARES#0 ← (word*) 0
  to:@22

(void()) init_squares()
init_squares: scope:[init_squares]  from init_dist_screen
  (byte*) heap_head#37 ← phi( init_dist_screen/(byte*) heap_head#43 )
  (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::@7
init_squares::@7: scope:[init_squares]  from init_squares
  (byte) NUM_SQUARES#14 ← 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 ← (word) 0
  (byte) init_squares::i#0 ← (byte) 0
  to:init_squares::@1
init_squares::@1: scope:[init_squares]  from init_squares::@2 init_squares::@7
  (word*) SQUARES#17 ← phi( init_squares::@2/(word*) SQUARES#26 init_squares::@7/(word*) SQUARES#1 )
  (byte*) heap_head#38 ← phi( init_squares::@2/(byte*) heap_head#46 init_squares::@7/(byte*) heap_head#3 )
  (word*) init_squares::squares#3 ← phi( init_squares::@2/(word*) init_squares::squares#1 init_squares::@7/(word*) init_squares::squares#0 )
  (word) init_squares::sqr#3 ← phi( init_squares::@2/(word) init_squares::sqr#1 init_squares::@7/(word) init_squares::sqr#0 )
  (byte) NUM_SQUARES#7 ← phi( init_squares::@2/(byte) NUM_SQUARES#13 init_squares::@7/(byte) NUM_SQUARES#14 )
  (byte) init_squares::i#2 ← phi( init_squares::@2/(byte) init_squares::i#1 init_squares::@7/(byte) init_squares::i#0 )
  (bool~) init_squares::$2 ← (byte) init_squares::i#2 < (byte) NUM_SQUARES#7
  if((bool~) init_squares::$2) goto init_squares::@2
  to:init_squares::@return
init_squares::@2: scope:[init_squares]  from init_squares::@1
  (word*) SQUARES#26 ← phi( init_squares::@1/(word*) SQUARES#17 )
  (byte*) heap_head#46 ← phi( init_squares::@1/(byte*) heap_head#38 )
  (byte) NUM_SQUARES#13 ← phi( init_squares::@1/(byte) NUM_SQUARES#7 )
  (byte) init_squares::i#3 ← phi( init_squares::@1/(byte) init_squares::i#2 )
  (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#3 )
  (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#3 )
  *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
  (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
  (number~) init_squares::$3 ← (byte) init_squares::i#3 * (number) 2
  (number~) init_squares::$4 ← (number~) init_squares::$3 + (number) 1
  (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (number~) init_squares::$4
  (byte) init_squares::i#1 ← ++ (byte) init_squares::i#3
  to:init_squares::@1
init_squares::@return: scope:[init_squares]  from init_squares::@1
  (word*) SQUARES#8 ← phi( init_squares::@1/(word*) SQUARES#17 )
  (byte*) heap_head#21 ← phi( init_squares::@1/(byte*) heap_head#38 )
  (byte*) heap_head#4 ← (byte*) heap_head#21
  (word*) SQUARES#2 ← (word*) SQUARES#8
  return 
  to:@return

(word()) sqr((byte) sqr::val)
sqr: scope:[sqr]  from init_dist_screen::@10 init_dist_screen::@4
  (word*) SQUARES#9 ← phi( init_dist_screen::@10/(word*) SQUARES#18 init_dist_screen::@4/(word*) SQUARES#19 )
  (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 )
  (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
  (word) sqr::return#0 ← *((word*) SQUARES#9 + (byte~) sqr::$0)
  to:sqr::@return
sqr::@return: scope:[sqr]  from sqr
  (word) sqr::return#4 ← phi( sqr/(word) sqr::return#0 )
  (word) sqr::return#1 ← (word) sqr::return#4
  return 
  to:@return

(byte()) sqrt((word) sqrt::val)
sqrt: scope:[sqrt]  from init_dist_screen::@21
  (byte) NUM_SQUARES#8 ← phi( init_dist_screen::@21/(byte) NUM_SQUARES#15 )
  (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

(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
atan2_16: scope:[atan2_16]  from init_angle_screen::@3
  (signed word) atan2_16::x#9 ← phi( init_angle_screen::@3/(signed word) atan2_16::x#0 )
  (signed word) atan2_16::y#1 ← phi( init_angle_screen::@3/(signed word) atan2_16::y#0 )
  (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
  if((bool~) atan2_16::$0) goto atan2_16::@1
  to:atan2_16::@2
atan2_16::@1: scope:[atan2_16]  from atan2_16
  (signed word) atan2_16::x#5 ← phi( atan2_16/(signed word) atan2_16::x#9 )
  (signed word) atan2_16::y#2 ← phi( atan2_16/(signed word) atan2_16::y#1 )
  (signed word~) atan2_16::$3 ← (signed word) atan2_16::y#2
  to:atan2_16::@3
atan2_16::@2: scope:[atan2_16]  from atan2_16
  (signed word) atan2_16::x#6 ← phi( atan2_16/(signed word) atan2_16::x#9 )
  (signed word) atan2_16::y#3 ← phi( atan2_16/(signed word) atan2_16::y#1 )
  (signed word~) atan2_16::$1 ← - (signed word) atan2_16::y#3
  (signed word~) atan2_16::$2 ← (signed word~) atan2_16::$1
  to:atan2_16::@3
atan2_16::@3: scope:[atan2_16]  from atan2_16::@1 atan2_16::@2
  (signed word) atan2_16::y#15 ← phi( atan2_16::@1/(signed word) atan2_16::y#2 atan2_16::@2/(signed word) atan2_16::y#3 )
  (signed word) atan2_16::x#1 ← phi( atan2_16::@1/(signed word) atan2_16::x#5 atan2_16::@2/(signed word) atan2_16::x#6 )
  (signed word~) atan2_16::$4 ← phi( atan2_16::@1/(signed word~) atan2_16::$3 atan2_16::@2/(signed word~) atan2_16::$2 )
  (signed word) atan2_16::yi#0 ← (signed word~) atan2_16::$4
  (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
  if((bool~) atan2_16::$5) goto atan2_16::@4
  to:atan2_16::@5
atan2_16::@4: scope:[atan2_16]  from atan2_16::@3
  (signed word) atan2_16::y#12 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
  (signed word) atan2_16::yi#12 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
  (signed word) atan2_16::x#2 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
  (signed word~) atan2_16::$8 ← (signed word) atan2_16::x#2
  to:atan2_16::@6
atan2_16::@5: scope:[atan2_16]  from atan2_16::@3
  (signed word) atan2_16::y#13 ← phi( atan2_16::@3/(signed word) atan2_16::y#15 )
  (signed word) atan2_16::yi#13 ← phi( atan2_16::@3/(signed word) atan2_16::yi#0 )
  (signed word) atan2_16::x#3 ← phi( atan2_16::@3/(signed word) atan2_16::x#1 )
  (signed word~) atan2_16::$6 ← - (signed word) atan2_16::x#3
  (signed word~) atan2_16::$7 ← (signed word~) atan2_16::$6
  to:atan2_16::@6
atan2_16::@6: scope:[atan2_16]  from atan2_16::@4 atan2_16::@5
  (signed word) atan2_16::y#9 ← phi( atan2_16::@4/(signed word) atan2_16::y#12 atan2_16::@5/(signed word) atan2_16::y#13 )
  (signed word) atan2_16::x#10 ← phi( atan2_16::@4/(signed word) atan2_16::x#2 atan2_16::@5/(signed word) atan2_16::x#3 )
  (signed word) atan2_16::yi#9 ← phi( atan2_16::@4/(signed word) atan2_16::yi#12 atan2_16::@5/(signed word) atan2_16::yi#13 )
  (signed word~) atan2_16::$9 ← phi( atan2_16::@4/(signed word~) atan2_16::$8 atan2_16::@5/(signed word~) atan2_16::$7 )
  (signed word) atan2_16::xi#0 ← (signed word~) atan2_16::$9
  (word) atan2_16::angle#0 ← (word) 0
  (byte) atan2_16::i#0 ← (byte) 0
  to:atan2_16::@15
atan2_16::@15: scope:[atan2_16]  from atan2_16::@27 atan2_16::@6
  (signed word) atan2_16::y#7 ← phi( atan2_16::@27/(signed word) atan2_16::y#8 atan2_16::@6/(signed word) atan2_16::y#9 )
  (signed word) atan2_16::x#7 ← phi( atan2_16::@27/(signed word) atan2_16::x#8 atan2_16::@6/(signed word) atan2_16::x#10 )
  (word) atan2_16::angle#12 ← phi( atan2_16::@27/(word) atan2_16::angle#13 atan2_16::@6/(word) atan2_16::angle#0 )
  (byte) atan2_16::i#6 ← phi( atan2_16::@27/(byte) atan2_16::i#1 atan2_16::@6/(byte) atan2_16::i#0 )
  (signed word) atan2_16::xi#6 ← phi( atan2_16::@27/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 )
  (signed word) atan2_16::yi#3 ← phi( atan2_16::@27/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#9 )
  (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0
  (bool~) atan2_16::$17 ← ! (bool~) atan2_16::$16
  if((bool~) atan2_16::$17) goto atan2_16::@16
  to:atan2_16::@17
atan2_16::@16: scope:[atan2_16]  from atan2_16::@15
  (signed word) atan2_16::y#19 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 )
  (signed word) atan2_16::x#17 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 )
  (word) atan2_16::angle#19 ← phi( atan2_16::@15/(word) atan2_16::angle#12 )
  (byte) atan2_16::i#2 ← phi( atan2_16::@15/(byte) atan2_16::i#6 )
  (signed word) atan2_16::yi#4 ← phi( atan2_16::@15/(signed word) atan2_16::yi#3 )
  (signed word) atan2_16::xi#3 ← phi( atan2_16::@15/(signed word) atan2_16::xi#6 )
  (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3
  (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#4
  (byte) atan2_16::shift#0 ← (byte) atan2_16::i#2
  to:atan2_16::@18
atan2_16::@17: scope:[atan2_16]  from atan2_16::@15 atan2_16::@27
  (signed word) atan2_16::y#5 ← phi( atan2_16::@15/(signed word) atan2_16::y#7 atan2_16::@27/(signed word) atan2_16::y#8 )
  (signed word) atan2_16::x#4 ← phi( atan2_16::@15/(signed word) atan2_16::x#7 atan2_16::@27/(signed word) atan2_16::x#8 )
  (word) atan2_16::angle#6 ← phi( atan2_16::@15/(word) atan2_16::angle#12 atan2_16::@27/(word) atan2_16::angle#13 )
  (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
  (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
  (bool~) atan2_16::$11 ← ! (bool~) atan2_16::$10
  if((bool~) atan2_16::$11) goto atan2_16::@7
  to:atan2_16::@33
atan2_16::@18: scope:[atan2_16]  from atan2_16::@16 atan2_16::@19
  (signed word) atan2_16::y#18 ← phi( atan2_16::@16/(signed word) atan2_16::y#19 atan2_16::@19/(signed word) atan2_16::y#20 )
  (signed word) atan2_16::x#16 ← phi( atan2_16::@16/(signed word) atan2_16::x#17 atan2_16::@19/(signed word) atan2_16::x#18 )
  (word) atan2_16::angle#18 ← phi( atan2_16::@16/(word) atan2_16::angle#19 atan2_16::@19/(word) atan2_16::angle#20 )
  (byte) atan2_16::i#10 ← phi( atan2_16::@16/(byte) atan2_16::i#2 atan2_16::@19/(byte) atan2_16::i#11 )
  (signed word) atan2_16::xi#11 ← phi( atan2_16::@16/(signed word) atan2_16::xi#3 atan2_16::@19/(signed word) atan2_16::xi#12 )
  (signed word) atan2_16::yi#14 ← phi( atan2_16::@16/(signed word) atan2_16::yi#4 atan2_16::@19/(signed word) atan2_16::yi#15 )
  (signed word) atan2_16::yd#7 ← phi( atan2_16::@16/(signed word) atan2_16::yd#0 atan2_16::@19/(signed word) atan2_16::yd#1 )
  (signed word) atan2_16::xd#7 ← phi( atan2_16::@16/(signed word) atan2_16::xd#0 atan2_16::@19/(signed word) atan2_16::xd#1 )
  (byte) atan2_16::shift#2 ← phi( atan2_16::@16/(byte) atan2_16::shift#0 atan2_16::@19/(byte) atan2_16::shift#1 )
  (bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2
  if((bool~) atan2_16::$18) goto atan2_16::@19
  to:atan2_16::@20
atan2_16::@19: scope:[atan2_16]  from atan2_16::@18
  (signed word) atan2_16::y#20 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 )
  (signed word) atan2_16::x#18 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 )
  (word) atan2_16::angle#20 ← phi( atan2_16::@18/(word) atan2_16::angle#18 )
  (byte) atan2_16::i#11 ← phi( atan2_16::@18/(byte) atan2_16::i#10 )
  (signed word) atan2_16::xi#12 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 )
  (signed word) atan2_16::yi#15 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 )
  (byte) atan2_16::shift#3 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 )
  (signed word) atan2_16::yd#3 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 )
  (signed word) atan2_16::xd#3 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 )
  (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
  (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
  (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
  to:atan2_16::@18
atan2_16::@20: scope:[atan2_16]  from atan2_16::@18
  (signed word) atan2_16::y#16 ← phi( atan2_16::@18/(signed word) atan2_16::y#18 )
  (signed word) atan2_16::x#14 ← phi( atan2_16::@18/(signed word) atan2_16::x#16 )
  (word) atan2_16::angle#16 ← phi( atan2_16::@18/(word) atan2_16::angle#18 )
  (byte) atan2_16::i#8 ← phi( atan2_16::@18/(byte) atan2_16::i#10 )
  (signed word) atan2_16::xi#9 ← phi( atan2_16::@18/(signed word) atan2_16::xi#11 )
  (signed word) atan2_16::yd#8 ← phi( atan2_16::@18/(signed word) atan2_16::yd#7 )
  (signed word) atan2_16::xd#8 ← phi( atan2_16::@18/(signed word) atan2_16::xd#7 )
  (signed word) atan2_16::yi#10 ← phi( atan2_16::@18/(signed word) atan2_16::yi#14 )
  (byte) atan2_16::shift#4 ← phi( atan2_16::@18/(byte) atan2_16::shift#2 )
  (bool~) atan2_16::$24 ← (number) 0 != (byte) atan2_16::shift#4
  (bool~) atan2_16::$19 ← ! (bool~) atan2_16::$24
  if((bool~) atan2_16::$19) goto atan2_16::@25
  to:atan2_16::@24
atan2_16::@25: scope:[atan2_16]  from atan2_16::@20 atan2_16::@24
  (signed word) atan2_16::y#14 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 atan2_16::@24/(signed word) atan2_16::y#17 )
  (signed word) atan2_16::x#13 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 atan2_16::@24/(signed word) atan2_16::x#15 )
  (word) atan2_16::angle#14 ← phi( atan2_16::@20/(word) atan2_16::angle#16 atan2_16::@24/(word) atan2_16::angle#17 )
  (byte) atan2_16::i#7 ← phi( atan2_16::@20/(byte) atan2_16::i#8 atan2_16::@24/(byte) atan2_16::i#9 )
  (signed word) atan2_16::xd#9 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 atan2_16::@24/(signed word) atan2_16::xd#2 )
  (signed word) atan2_16::yd#9 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 atan2_16::@24/(signed word) atan2_16::yd#2 )
  (signed word) atan2_16::xi#7 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 atan2_16::@24/(signed word) atan2_16::xi#10 )
  (signed word) atan2_16::yi#5 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 atan2_16::@24/(signed word) atan2_16::yi#11 )
  (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#5 >= (number) 0
  if((bool~) atan2_16::$20) goto atan2_16::@26
  to:atan2_16::@30
atan2_16::@24: scope:[atan2_16]  from atan2_16::@20
  (signed word) atan2_16::y#17 ← phi( atan2_16::@20/(signed word) atan2_16::y#16 )
  (signed word) atan2_16::x#15 ← phi( atan2_16::@20/(signed word) atan2_16::x#14 )
  (word) atan2_16::angle#17 ← phi( atan2_16::@20/(word) atan2_16::angle#16 )
  (byte) atan2_16::i#9 ← phi( atan2_16::@20/(byte) atan2_16::i#8 )
  (signed word) atan2_16::xi#10 ← phi( atan2_16::@20/(signed word) atan2_16::xi#9 )
  (signed word) atan2_16::yi#11 ← phi( atan2_16::@20/(signed word) atan2_16::yi#10 )
  (signed word) atan2_16::yd#4 ← phi( atan2_16::@20/(signed word) atan2_16::yd#8 )
  (signed word) atan2_16::xd#4 ← phi( atan2_16::@20/(signed word) atan2_16::xd#8 )
  (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
  (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
  to:atan2_16::@25
atan2_16::@26: scope:[atan2_16]  from atan2_16::@25
  (signed word) atan2_16::y#10 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 )
  (signed word) atan2_16::x#11 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 )
  (word) atan2_16::angle#7 ← phi( atan2_16::@25/(word) atan2_16::angle#14 )
  (byte) atan2_16::i#3 ← phi( atan2_16::@25/(byte) atan2_16::i#7 )
  (signed word) atan2_16::xd#5 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 )
  (signed word) atan2_16::yi#6 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 )
  (signed word) atan2_16::yd#5 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 )
  (signed word) atan2_16::xi#4 ← phi( atan2_16::@25/(signed word) atan2_16::xi#7 )
  (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#4 + (signed word) atan2_16::yd#5
  (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#6 - (signed word) atan2_16::xd#5
  (byte~) atan2_16::$22 ← (byte) atan2_16::i#3 * (const byte) SIZEOF_WORD
  (word) atan2_16::angle#2 ← (word) atan2_16::angle#7 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22)
  to:atan2_16::@27
atan2_16::@30: scope:[atan2_16]  from atan2_16::@25
  (signed word) atan2_16::y#11 ← phi( atan2_16::@25/(signed word) atan2_16::y#14 )
  (signed word) atan2_16::x#12 ← phi( atan2_16::@25/(signed word) atan2_16::x#13 )
  (word) atan2_16::angle#8 ← phi( atan2_16::@25/(word) atan2_16::angle#14 )
  (byte) atan2_16::i#4 ← phi( atan2_16::@25/(byte) atan2_16::i#7 )
  (signed word) atan2_16::xd#6 ← phi( atan2_16::@25/(signed word) atan2_16::xd#9 )
  (signed word) atan2_16::yi#7 ← phi( atan2_16::@25/(signed word) atan2_16::yi#5 )
  (signed word) atan2_16::yd#6 ← phi( atan2_16::@25/(signed word) atan2_16::yd#9 )
  (signed word) atan2_16::xi#5 ← phi( atan2_16::@25/(signed word) atan2_16::xi#7 )
  (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#5 - (signed word) atan2_16::yd#6
  (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#7 + (signed word) atan2_16::xd#6
  (byte~) atan2_16::$23 ← (byte) atan2_16::i#4 * (const byte) SIZEOF_WORD
  (word) atan2_16::angle#3 ← (word) atan2_16::angle#8 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23)
  to:atan2_16::@27
atan2_16::@27: scope:[atan2_16]  from atan2_16::@26 atan2_16::@30
  (signed word) atan2_16::y#8 ← phi( atan2_16::@26/(signed word) atan2_16::y#10 atan2_16::@30/(signed word) atan2_16::y#11 )
  (signed word) atan2_16::xi#8 ← phi( atan2_16::@26/(signed word) atan2_16::xi#1 atan2_16::@30/(signed word) atan2_16::xi#2 )
  (signed word) atan2_16::x#8 ← phi( atan2_16::@26/(signed word) atan2_16::x#11 atan2_16::@30/(signed word) atan2_16::x#12 )
  (word) atan2_16::angle#13 ← phi( atan2_16::@26/(word) atan2_16::angle#2 atan2_16::@30/(word) atan2_16::angle#3 )
  (signed word) atan2_16::yi#8 ← phi( atan2_16::@26/(signed word) atan2_16::yi#1 atan2_16::@30/(signed word) atan2_16::yi#2 )
  (byte) atan2_16::i#5 ← phi( atan2_16::@26/(byte) atan2_16::i#3 atan2_16::@30/(byte) atan2_16::i#4 )
  (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
  (bool~) atan2_16::$21 ← (byte) atan2_16::i#1 != rangelast(0,CORDIC_ITERATIONS_16-1)
  if((bool~) atan2_16::$21) goto atan2_16::@15
  to:atan2_16::@17
atan2_16::@7: scope:[atan2_16]  from atan2_16::@17 atan2_16::@33
  (word) atan2_16::angle#15 ← phi( atan2_16::@17/(word) atan2_16::angle#1 atan2_16::@33/(word) atan2_16::angle#4 )
  (signed word) atan2_16::y#4 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 atan2_16::@33/(signed word) atan2_16::y#6 )
  (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0
  (bool~) atan2_16::$14 ← ! (bool~) atan2_16::$13
  if((bool~) atan2_16::$14) goto atan2_16::@8
  to:atan2_16::@13
atan2_16::@33: scope:[atan2_16]  from atan2_16::@17
  (signed word) atan2_16::y#6 ← phi( atan2_16::@17/(signed word) atan2_16::y#5 )
  (word) atan2_16::angle#9 ← phi( atan2_16::@17/(word) atan2_16::angle#1 )
  (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9
  (word) atan2_16::angle#4 ← (number~) atan2_16::$12
  to:atan2_16::@7
atan2_16::@8: scope:[atan2_16]  from atan2_16::@13 atan2_16::@7
  (word) atan2_16::angle#10 ← phi( atan2_16::@13/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#15 )
  (word) atan2_16::return#0 ← (word) atan2_16::angle#10
  to:atan2_16::@return
atan2_16::@13: scope:[atan2_16]  from atan2_16::@7
  (word) atan2_16::angle#11 ← phi( atan2_16::@7/(word) atan2_16::angle#15 )
  (word~) atan2_16::$15 ← - (word) atan2_16::angle#11
  (word) atan2_16::angle#5 ← (word~) atan2_16::$15
  to:atan2_16::@8
atan2_16::@return: scope:[atan2_16]  from atan2_16::@8
  (word) atan2_16::return#3 ← phi( atan2_16::@8/(word) atan2_16::return#0 )
  (word) atan2_16::return#1 ← (word) atan2_16::return#3
  return 
  to:@return
@22: scope:[]  from @17
  (word*) SQUARES#55 ← phi( @17/(word*) SQUARES#0 )
  (byte) NUM_SQUARES#50 ← phi( @17/(byte) NUM_SQUARES#0 )
  (byte*) heap_head#35 ← phi( @17/(byte*) heap_head#47 )
  (word) malloc::size#1 ← (number) $3e8
  call malloc 
  (void*) malloc::return#3 ← (void*) malloc::return#1
  to:@27
@27: scope:[]  from @22
  (word*) SQUARES#52 ← phi( @22/(word*) SQUARES#55 )
  (byte) NUM_SQUARES#46 ← phi( @22/(byte) NUM_SQUARES#50 )
  (byte*) heap_head#22 ← phi( @22/(byte*) heap_head#2 )
  (void*) malloc::return#11 ← phi( @22/(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:@28
@28: scope:[]  from @27
  (word*) SQUARES#49 ← phi( @27/(word*) SQUARES#52 )
  (byte) NUM_SQUARES#41 ← phi( @27/(byte) NUM_SQUARES#46 )
  (byte*) SCREEN_DIST#8 ← phi( @27/(byte*) SCREEN_DIST#0 )
  (byte*) heap_head#23 ← phi( @27/(byte*) heap_head#2 )
  (void*) malloc::return#12 ← phi( @27/(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
  (word) malloc::size#3 ← (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE
  call malloc 
  (void*) malloc::return#5 ← (void*) malloc::return#1
  to:@29
@29: scope:[]  from @28
  (byte*) SCREEN_ANGLE#13 ← phi( @28/(byte*) SCREEN_ANGLE#0 )
  (word*) SQUARES#45 ← phi( @28/(word*) SQUARES#49 )
  (byte) NUM_SQUARES#35 ← phi( @28/(byte) NUM_SQUARES#41 )
  (byte*) SCREEN_DIST#7 ← phi( @28/(byte*) SCREEN_DIST#8 )
  (byte*) heap_head#24 ← phi( @28/(byte*) heap_head#2 )
  (void*) malloc::return#13 ← phi( @28/(void*) malloc::return#5 )
  (void*~) $2 ← (void*) malloc::return#13
  (byte*) heap_head#7 ← (byte*) heap_head#24
  (byte*) BUCKET_SIZES#0 ← ((byte*)) (void*~) $2
  (word) malloc::size#4 ← (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER
  call malloc 
  (void*) malloc::return#6 ← (void*) malloc::return#1
  to:@30
@30: scope:[]  from @29
  (byte*) BUCKET_SIZES#24 ← phi( @29/(byte*) BUCKET_SIZES#0 )
  (byte*) SCREEN_ANGLE#10 ← phi( @29/(byte*) SCREEN_ANGLE#13 )
  (word*) SQUARES#36 ← phi( @29/(word*) SQUARES#45 )
  (byte) NUM_SQUARES#26 ← phi( @29/(byte) NUM_SQUARES#35 )
  (byte*) SCREEN_DIST#6 ← phi( @29/(byte*) SCREEN_DIST#7 )
  (byte*) heap_head#25 ← phi( @29/(byte*) heap_head#2 )
  (void*) malloc::return#14 ← phi( @29/(void*) malloc::return#6 )
  (void*~) $3 ← (void*) malloc::return#14
  (byte*) heap_head#8 ← (byte*) heap_head#25
  (word**) BUCKETS#0 ← ((word**)) (void*~) $3
  (word) malloc::size#5 ← (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE
  call malloc 
  (void*) malloc::return#7 ← (void*) malloc::return#1
  to:@31
@31: scope:[]  from @30
  (word**) BUCKETS#30 ← phi( @30/(word**) BUCKETS#0 )
  (byte*) BUCKET_SIZES#23 ← phi( @30/(byte*) BUCKET_SIZES#24 )
  (byte*) SCREEN_ANGLE#9 ← phi( @30/(byte*) SCREEN_ANGLE#10 )
  (word*) SQUARES#35 ← phi( @30/(word*) SQUARES#36 )
  (byte) NUM_SQUARES#25 ← phi( @30/(byte) NUM_SQUARES#26 )
  (byte*) SCREEN_DIST#5 ← phi( @30/(byte*) SCREEN_DIST#6 )
  (byte*) heap_head#26 ← phi( @30/(byte*) heap_head#2 )
  (void*) malloc::return#15 ← phi( @30/(void*) malloc::return#7 )
  (void*~) $4 ← (void*) malloc::return#15
  (byte*) heap_head#9 ← (byte*) heap_head#26
  (byte*) BUCKET_IDX#0 ← ((byte*)) (void*~) $4
  to:@26

(void()) main()
main: scope:[main]  from @26
  (byte*) BUCKET_IDX#14 ← phi( @26/(byte*) BUCKET_IDX#15 )
  (word**) BUCKETS#22 ← phi( @26/(word**) BUCKETS#26 )
  (byte*) BUCKET_SIZES#16 ← phi( @26/(byte*) BUCKET_SIZES#19 )
  (byte*) SCREEN_ANGLE#3 ← phi( @26/(byte*) SCREEN_ANGLE#5 )
  (word*) SQUARES#21 ← phi( @26/(word*) SQUARES#25 )
  (byte*) heap_head#39 ← phi( @26/(byte*) heap_head#45 )
  (byte) NUM_SQUARES#16 ← phi( @26/(byte) NUM_SQUARES#19 )
  (byte*) SCREEN_DIST#1 ← phi( @26/(byte*) SCREEN_DIST#3 )
  asm { sei  }
  (byte*) init_dist_screen::screen#0 ← (byte*) SCREEN_DIST#1
  call init_dist_screen 
  to:main::@34
main::@34: scope:[main]  from main
  (byte*) BUCKET_IDX#13 ← phi( main/(byte*) BUCKET_IDX#14 )
  (word**) BUCKETS#19 ← phi( main/(word**) BUCKETS#22 )
  (byte*) BUCKET_SIZES#12 ← phi( main/(byte*) BUCKET_SIZES#16 )
  (byte*) SCREEN_DIST#4 ← phi( main/(byte*) SCREEN_DIST#1 )
  (byte*) SCREEN_ANGLE#1 ← phi( main/(byte*) SCREEN_ANGLE#3 )
  (word*) SQUARES#12 ← phi( main/(word*) SQUARES#6 )
  (byte*) heap_head#27 ← 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#10 ← (byte*) heap_head#27
  (word*) SQUARES#3 ← (word*) SQUARES#12
  (byte*) init_angle_screen::screen#0 ← (byte*) SCREEN_ANGLE#1
  call init_angle_screen 
  to:main::@35
main::@35: scope:[main]  from main::@34
  (byte*) BUCKET_IDX#12 ← phi( main::@34/(byte*) BUCKET_IDX#13 )
  (byte*) SCREEN_ANGLE#19 ← phi( main::@34/(byte*) SCREEN_ANGLE#1 )
  (word*) SQUARES#46 ← phi( main::@34/(word*) SQUARES#3 )
  (byte) NUM_SQUARES#36 ← phi( main::@34/(byte) NUM_SQUARES#1 )
  (word**) BUCKETS#15 ← phi( main::@34/(word**) BUCKETS#19 )
  (byte*) BUCKET_SIZES#11 ← phi( main::@34/(byte*) BUCKET_SIZES#12 )
  (byte*) heap_head#40 ← phi( main::@34/(byte*) heap_head#10 )
  (byte*) SCREEN_DIST#2 ← phi( main::@34/(byte*) SCREEN_DIST#4 )
  (byte*) init_buckets::screen#0 ← (byte*) SCREEN_DIST#2
  call init_buckets 
  to:main::@36
main::@36: scope:[main]  from main::@35
  (byte*) SCREEN_ANGLE#18 ← phi( main::@35/(byte*) SCREEN_ANGLE#19 )
  (word*) SQUARES#39 ← phi( main::@35/(word*) SQUARES#46 )
  (byte) NUM_SQUARES#29 ← phi( main::@35/(byte) NUM_SQUARES#36 )
  (byte*) BUCKET_SIZES#15 ← phi( main::@35/(byte*) BUCKET_SIZES#11 )
  (word**) BUCKETS#12 ← phi( main::@35/(word**) BUCKETS#15 )
  (byte*) heap_head#28 ← phi( main::@35/(byte*) heap_head#14 )
  (byte*) heap_head#11 ← (byte*) heap_head#28
  (byte) main::bucket_idx#0 ← (byte) 0
  to:main::@1
main::@1: scope:[main]  from main::@18 main::@21 main::@36
  (byte*) SCREEN_ANGLE#15 ← phi( main::@18/(byte*) SCREEN_ANGLE#16 main::@21/(byte*) SCREEN_ANGLE#17 main::@36/(byte*) SCREEN_ANGLE#18 )
  (word*) SQUARES#27 ← phi( main::@18/(word*) SQUARES#37 main::@21/(word*) SQUARES#38 main::@36/(word*) SQUARES#39 )
  (byte*) heap_head#48 ← phi( main::@18/(byte*) heap_head#54 main::@21/(byte*) heap_head#55 main::@36/(byte*) heap_head#11 )
  (byte) NUM_SQUARES#20 ← phi( main::@18/(byte) NUM_SQUARES#27 main::@21/(byte) NUM_SQUARES#28 main::@36/(byte) NUM_SQUARES#29 )
  (byte*) BUCKET_SIZES#10 ← phi( main::@18/(byte*) BUCKET_SIZES#13 main::@21/(byte*) BUCKET_SIZES#14 main::@36/(byte*) BUCKET_SIZES#15 )
  (word**) BUCKETS#7 ← phi( main::@18/(word**) BUCKETS#10 main::@21/(word**) BUCKETS#11 main::@36/(word**) BUCKETS#12 )
  (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
  (byte*) SCREEN_ANGLE#14 ← phi( main::@1/(byte*) SCREEN_ANGLE#15 main::@4/(byte*) SCREEN_ANGLE#14 )
  (word*) SQUARES#50 ← phi( main::@1/(word*) SQUARES#27 main::@4/(word*) SQUARES#50 )
  (byte*) heap_head#67 ← phi( main::@1/(byte*) heap_head#48 main::@4/(byte*) heap_head#67 )
  (byte) NUM_SQUARES#42 ← phi( main::@1/(byte) NUM_SQUARES#20 main::@4/(byte) NUM_SQUARES#42 )
  (byte*) BUCKET_SIZES#5 ← phi( main::@1/(byte*) BUCKET_SIZES#10 main::@4/(byte*) BUCKET_SIZES#5 )
  (word**) BUCKETS#4 ← phi( main::@1/(word**) BUCKETS#7 main::@4/(word**) BUCKETS#4 )
  (byte) main::bucket_idx#4 ← phi( main::@1/(byte) main::bucket_idx#6 main::@4/(byte) main::bucket_idx#4 )
  (bool~) main::$3 ← *((const byte*) RASTER) != (number) $ff
  if((bool~) main::$3) goto main::@4
  to:main::@5
main::@5: scope:[main]  from main::@4
  (byte*) SCREEN_ANGLE#11 ← phi( main::@4/(byte*) SCREEN_ANGLE#14 )
  (word*) SQUARES#48 ← phi( main::@4/(word*) SQUARES#50 )
  (byte*) heap_head#62 ← phi( main::@4/(byte*) heap_head#67 )
  (byte) NUM_SQUARES#38 ← phi( main::@4/(byte) NUM_SQUARES#42 )
  (byte*) BUCKET_SIZES#1 ← phi( main::@4/(byte*) BUCKET_SIZES#5 )
  (word**) BUCKETS#1 ← phi( main::@4/(word**) BUCKETS#4 )
  (byte) main::bucket_idx#2 ← phi( main::@4/(byte) main::bucket_idx#4 )
  *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL)
  (byte~) main::$23 ← (byte) main::bucket_idx#2 * (const byte) SIZEOF_POINTER
  (word*) main::bucket#0 ← *((word**) BUCKETS#1 + (byte~) main::$23)
  (byte) main::bucket_size#0 ← *((byte*) BUCKET_SIZES#1 + (byte) main::bucket_idx#2)
  (bool~) main::$5 ← (byte) main::bucket_size#0 > (number) 0
  (bool~) main::$6 ← ! (bool~) main::$5
  if((bool~) main::$6) goto main::@7
  to:main::@6
main::@7: scope:[main]  from main::@10 main::@5
  (byte*) SCREEN_ANGLE#21 ← phi( main::@10/(byte*) SCREEN_ANGLE#20 main::@5/(byte*) SCREEN_ANGLE#11 )
  (byte*) BUCKET_SIZES#18 ← phi( main::@10/(byte*) BUCKET_SIZES#17 main::@5/(byte*) BUCKET_SIZES#1 )
  (word**) BUCKETS#17 ← phi( main::@10/(word**) BUCKETS#16 main::@5/(word**) BUCKETS#1 )
  (word*) SQUARES#40 ← phi( main::@10/(word*) SQUARES#47 main::@5/(word*) SQUARES#48 )
  (byte*) heap_head#56 ← phi( main::@10/(byte*) heap_head#61 main::@5/(byte*) heap_head#62 )
  (byte) NUM_SQUARES#30 ← phi( main::@10/(byte) NUM_SQUARES#37 main::@5/(byte) NUM_SQUARES#38 )
  (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::$18 ← (byte) main::bucket_idx#1 == (const byte) NUM_BUCKETS
  (bool~) main::$19 ← ! (bool~) main::$18
  if((bool~) main::$19) goto main::@21
  to:main::@25
main::@6: scope:[main]  from main::@5
  (byte*) BUCKET_SIZES#22 ← phi( main::@5/(byte*) BUCKET_SIZES#1 )
  (word**) BUCKETS#24 ← phi( main::@5/(word**) BUCKETS#1 )
  (word*) SQUARES#54 ← phi( main::@5/(word*) SQUARES#48 )
  (byte*) heap_head#74 ← phi( main::@5/(byte*) heap_head#62 )
  (byte) NUM_SQUARES#48 ← phi( main::@5/(byte) NUM_SQUARES#38 )
  (byte) main::bucket_idx#11 ← phi( main::@5/(byte) main::bucket_idx#2 )
  (byte*) SCREEN_ANGLE#8 ← phi( main::@5/(byte*) SCREEN_ANGLE#11 )
  (word*) main::bucket#4 ← phi( main::@5/(word*) main::bucket#0 )
  (byte) main::bucket_size#3 ← phi( main::@5/(byte) main::bucket_size#0 )
  (byte) main::min_angle#0 ← (byte) $ff
  (word) main::min_offset#0 ← (word) $ffff
  (byte) main::i#0 ← (byte) 0
  to:main::@8
main::@8: scope:[main]  from main::@11 main::@6
  (byte*) BUCKET_SIZES#20 ← phi( main::@11/(byte*) BUCKET_SIZES#21 main::@6/(byte*) BUCKET_SIZES#22 )
  (word**) BUCKETS#20 ← phi( main::@11/(word**) BUCKETS#23 main::@6/(word**) BUCKETS#24 )
  (word*) SQUARES#51 ← phi( main::@11/(word*) SQUARES#53 main::@6/(word*) SQUARES#54 )
  (byte*) heap_head#68 ← phi( main::@11/(byte*) heap_head#73 main::@6/(byte*) heap_head#74 )
  (byte) NUM_SQUARES#43 ← phi( main::@11/(byte) NUM_SQUARES#47 main::@6/(byte) NUM_SQUARES#48 )
  (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 )
  (byte*) SCREEN_ANGLE#6 ← phi( main::@11/(byte*) SCREEN_ANGLE#7 main::@6/(byte*) SCREEN_ANGLE#8 )
  (word) main::min_offset#4 ← phi( main::@11/(word) main::min_offset#5 main::@6/(word) main::min_offset#0 )
  (word*) main::bucket#2 ← phi( main::@11/(word*) main::bucket#3 main::@6/(word*) main::bucket#4 )
  (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::$7 ← (byte) main::i#2 < (byte) main::bucket_size#1
  if((bool~) main::$7) goto main::@9
  to:main::@10
main::@9: scope:[main]  from main::@8
  (byte*) BUCKET_SIZES#27 ← phi( main::@8/(byte*) BUCKET_SIZES#20 )
  (word**) BUCKETS#29 ← phi( main::@8/(word**) BUCKETS#20 )
  (word*) SQUARES#58 ← phi( main::@8/(word*) SQUARES#51 )
  (byte*) heap_head#81 ← phi( main::@8/(byte*) heap_head#68 )
  (byte) NUM_SQUARES#53 ← phi( main::@8/(byte) NUM_SQUARES#43 )
  (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*) SCREEN_ANGLE#4 ← phi( main::@8/(byte*) SCREEN_ANGLE#6 )
  (word*) main::bucket#1 ← phi( main::@8/(word*) main::bucket#2 )
  (byte) main::i#3 ← phi( main::@8/(byte) main::i#2 )
  (byte~) main::$24 ← (byte) main::i#3 * (const byte) SIZEOF_WORD
  (word) main::offset#0 ← *((word*) main::bucket#1 + (byte~) main::$24)
  (byte*~) main::$8 ← (const byte*) SCREEN_FILL + (word) main::offset#0
  (byte*) main::fill#0 ← (byte*~) main::$8
  (bool~) main::$9 ← *((byte*) main::fill#0) != (const byte) FILL_CHAR
  (bool~) main::$10 ← ! (bool~) main::$9
  if((bool~) main::$10) goto main::@11
  to:main::@15
main::@10: scope:[main]  from main::@8
  (byte*) SCREEN_ANGLE#20 ← phi( main::@8/(byte*) SCREEN_ANGLE#6 )
  (byte*) BUCKET_SIZES#17 ← phi( main::@8/(byte*) BUCKET_SIZES#20 )
  (word**) BUCKETS#16 ← phi( main::@8/(word**) BUCKETS#20 )
  (word*) SQUARES#47 ← phi( main::@8/(word*) SQUARES#51 )
  (byte*) heap_head#61 ← phi( main::@8/(byte*) heap_head#68 )
  (byte) NUM_SQUARES#37 ← phi( main::@8/(byte) NUM_SQUARES#43 )
  (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::$14 ← (word) main::min_offset#2 != (number) $ffff
  (bool~) main::$15 ← ! (bool~) main::$14
  if((bool~) main::$15) goto main::@7
  to:main::@18
main::@11: scope:[main]  from main::@15 main::@16 main::@9
  (byte*) BUCKET_SIZES#21 ← phi( main::@15/(byte*) BUCKET_SIZES#25 main::@16/(byte*) BUCKET_SIZES#26 main::@9/(byte*) BUCKET_SIZES#27 )
  (word**) BUCKETS#23 ← phi( main::@15/(word**) BUCKETS#27 main::@16/(word**) BUCKETS#28 main::@9/(word**) BUCKETS#29 )
  (word*) SQUARES#53 ← phi( main::@15/(word*) SQUARES#56 main::@16/(word*) SQUARES#57 main::@9/(word*) SQUARES#58 )
  (byte*) heap_head#73 ← phi( main::@15/(byte*) heap_head#79 main::@16/(byte*) heap_head#80 main::@9/(byte*) heap_head#81 )
  (byte) NUM_SQUARES#47 ← phi( main::@15/(byte) NUM_SQUARES#51 main::@16/(byte) NUM_SQUARES#52 main::@9/(byte) NUM_SQUARES#53 )
  (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 )
  (byte*) SCREEN_ANGLE#7 ← phi( main::@15/(byte*) SCREEN_ANGLE#2 main::@16/(byte*) SCREEN_ANGLE#12 main::@9/(byte*) SCREEN_ANGLE#4 )
  (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 )
  (word*) main::bucket#3 ← phi( main::@15/(word*) main::bucket#5 main::@16/(word*) main::bucket#6 main::@9/(word*) main::bucket#1 )
  (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
  (byte*) BUCKET_SIZES#25 ← phi( main::@9/(byte*) BUCKET_SIZES#27 )
  (word**) BUCKETS#27 ← phi( main::@9/(word**) BUCKETS#29 )
  (word*) SQUARES#56 ← phi( main::@9/(word*) SQUARES#58 )
  (byte*) heap_head#79 ← phi( main::@9/(byte*) heap_head#81 )
  (byte) NUM_SQUARES#51 ← phi( main::@9/(byte) NUM_SQUARES#53 )
  (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 )
  (word*) main::bucket#5 ← phi( main::@9/(word*) main::bucket#1 )
  (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*) SCREEN_ANGLE#2 ← phi( main::@9/(byte*) SCREEN_ANGLE#4 )
  (byte*~) main::$11 ← (byte*) SCREEN_ANGLE#2 + (word) main::offset#1
  (byte*) main::angle#0 ← (byte*~) main::$11
  (bool~) main::$12 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2
  (bool~) main::$13 ← ! (bool~) main::$12
  if((bool~) main::$13) goto main::@11
  to:main::@16
main::@16: scope:[main]  from main::@15
  (byte*) BUCKET_SIZES#26 ← phi( main::@15/(byte*) BUCKET_SIZES#25 )
  (word**) BUCKETS#28 ← phi( main::@15/(word**) BUCKETS#27 )
  (word*) SQUARES#57 ← phi( main::@15/(word*) SQUARES#56 )
  (byte*) heap_head#80 ← phi( main::@15/(byte*) heap_head#79 )
  (byte) NUM_SQUARES#52 ← phi( main::@15/(byte) NUM_SQUARES#51 )
  (byte) main::bucket_idx#13 ← phi( main::@15/(byte) main::bucket_idx#12 )
  (byte*) SCREEN_ANGLE#12 ← phi( main::@15/(byte*) SCREEN_ANGLE#2 )
  (word*) main::bucket#6 ← phi( main::@15/(word*) main::bucket#5 )
  (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
  (byte*) SCREEN_ANGLE#16 ← phi( main::@10/(byte*) SCREEN_ANGLE#20 )
  (word*) SQUARES#37 ← phi( main::@10/(word*) SQUARES#47 )
  (byte*) heap_head#54 ← phi( main::@10/(byte*) heap_head#61 )
  (byte) NUM_SQUARES#27 ← phi( main::@10/(byte) NUM_SQUARES#37 )
  (byte*) BUCKET_SIZES#13 ← phi( main::@10/(byte*) BUCKET_SIZES#17 )
  (word**) BUCKETS#10 ← phi( main::@10/(word**) BUCKETS#16 )
  (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::$16 ← (const byte*) SCREEN_FILL + (word) main::min_offset#3
  (byte*) main::fill1#0 ← (byte*~) main::$16
  *((byte*) main::fill1#0) ← (const byte) FILL_CHAR
  *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL)
  to:main::@1
main::@21: scope:[main]  from main::@7
  (byte*) SCREEN_ANGLE#17 ← phi( main::@7/(byte*) SCREEN_ANGLE#21 )
  (word*) SQUARES#38 ← phi( main::@7/(word*) SQUARES#40 )
  (byte*) heap_head#55 ← phi( main::@7/(byte*) heap_head#56 )
  (byte) NUM_SQUARES#28 ← phi( main::@7/(byte) NUM_SQUARES#30 )
  (byte*) BUCKET_SIZES#14 ← phi( main::@7/(byte*) BUCKET_SIZES#18 )
  (word**) BUCKETS#11 ← phi( main::@7/(word**) BUCKETS#17 )
  (byte) main::bucket_idx#9 ← phi( main::@7/(byte) main::bucket_idx#1 )
  *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL)
  to:main::@1
main::@25: scope:[main]  from main::@7
  (word*) SQUARES#28 ← phi( main::@7/(word*) SQUARES#40 )
  (byte*) heap_head#49 ← phi( main::@7/(byte*) heap_head#56 )
  (byte) NUM_SQUARES#21 ← phi( main::@7/(byte) NUM_SQUARES#30 )
  *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL)
  to:main::@28
main::@28: scope:[main]  from main::@1 main::@25 main::@29
  (word*) SQUARES#22 ← phi( main::@1/(word*) SQUARES#27 main::@25/(word*) SQUARES#28 main::@29/(word*) SQUARES#29 )
  (byte*) heap_head#41 ← phi( main::@1/(byte*) heap_head#48 main::@25/(byte*) heap_head#49 main::@29/(byte*) heap_head#50 )
  (byte) NUM_SQUARES#17 ← phi( main::@1/(byte) NUM_SQUARES#20 main::@25/(byte) NUM_SQUARES#21 main::@29/(byte) NUM_SQUARES#22 )
  if(true) goto main::@29
  to:main::@return
main::@29: scope:[main]  from main::@28
  (word*) SQUARES#29 ← phi( main::@28/(word*) SQUARES#22 )
  (byte*) heap_head#50 ← phi( main::@28/(byte*) heap_head#41 )
  (byte) NUM_SQUARES#22 ← phi( main::@28/(byte) NUM_SQUARES#17 )
  *((const byte*) COLS+(number) $3e7) ← ++ *((const byte*) COLS+(number) $3e7)
  to:main::@28
main::@return: scope:[main]  from main::@28
  (word*) SQUARES#13 ← phi( main::@28/(word*) SQUARES#22 )
  (byte*) heap_head#29 ← phi( main::@28/(byte*) heap_head#41 )
  (byte) NUM_SQUARES#10 ← phi( main::@28/(byte) NUM_SQUARES#17 )
  (byte) NUM_SQUARES#2 ← (byte) NUM_SQUARES#10
  (byte*) heap_head#12 ← (byte*) heap_head#29
  (word*) SQUARES#4 ← (word*) SQUARES#13
  return 
  to:@return

(void()) init_buckets((byte*) init_buckets::screen)
init_buckets: scope:[init_buckets]  from main::@35
  (byte*) BUCKET_IDX#11 ← phi( main::@35/(byte*) BUCKET_IDX#12 )
  (word**) BUCKETS#25 ← phi( main::@35/(word**) BUCKETS#15 )
  (byte*) heap_head#75 ← phi( main::@35/(byte*) heap_head#40 )
  (byte*) init_buckets::screen#6 ← phi( main::@35/(byte*) init_buckets::screen#0 )
  (byte*) BUCKET_SIZES#6 ← phi( main::@35/(byte*) BUCKET_SIZES#11 )
  (byte) init_buckets::i#0 ← (byte) 0
  to:init_buckets::@1
init_buckets::@1: scope:[init_buckets]  from init_buckets init_buckets::@1
  (byte*) BUCKET_IDX#10 ← phi( init_buckets/(byte*) BUCKET_IDX#11 init_buckets::@1/(byte*) BUCKET_IDX#10 )
  (word**) BUCKETS#21 ← phi( init_buckets/(word**) BUCKETS#25 init_buckets::@1/(word**) BUCKETS#21 )
  (byte*) heap_head#69 ← phi( init_buckets/(byte*) heap_head#75 init_buckets::@1/(byte*) heap_head#69 )
  (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#2 ← phi( init_buckets/(byte*) BUCKET_SIZES#6 init_buckets::@1/(byte*) BUCKET_SIZES#2 )
  *((byte*) BUCKET_SIZES#2 + (byte) init_buckets::i#2) ← (number) 0
  (byte) init_buckets::i#1 ← (byte) init_buckets::i#2 + rangenext(0,NUM_BUCKETS-1)
  (bool~) init_buckets::$0 ← (byte) init_buckets::i#1 != rangelast(0,NUM_BUCKETS-1)
  if((bool~) init_buckets::$0) goto init_buckets::@1
  to:init_buckets::@2
init_buckets::@2: scope:[init_buckets]  from init_buckets::@1
  (byte*) BUCKET_IDX#9 ← phi( init_buckets::@1/(byte*) BUCKET_IDX#10 )
  (word**) BUCKETS#18 ← phi( init_buckets::@1/(word**) BUCKETS#21 )
  (byte*) heap_head#63 ← phi( init_buckets::@1/(byte*) heap_head#69 )
  (byte*) BUCKET_SIZES#7 ← phi( init_buckets::@1/(byte*) BUCKET_SIZES#2 )
  (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*) BUCKET_IDX#8 ← phi( init_buckets::@2/(byte*) BUCKET_IDX#9 init_buckets::@3/(byte*) BUCKET_IDX#8 )
  (word**) BUCKETS#13 ← phi( init_buckets::@2/(word**) BUCKETS#18 init_buckets::@3/(word**) BUCKETS#13 )
  (byte*) heap_head#57 ← phi( init_buckets::@2/(byte*) heap_head#63 init_buckets::@3/(byte*) heap_head#57 )
  (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#3 ← phi( init_buckets::@2/(byte*) BUCKET_SIZES#7 init_buckets::@3/(byte*) BUCKET_SIZES#3 )
  *((byte*) BUCKET_SIZES#3 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*) BUCKET_SIZES#3 + *((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*) BUCKET_IDX#7 ← phi( init_buckets::@3/(byte*) BUCKET_IDX#8 )
  (word**) BUCKETS#8 ← phi( init_buckets::@3/(word**) BUCKETS#13 )
  (byte*) heap_head#51 ← phi( init_buckets::@3/(byte*) heap_head#57 )
  (byte*) BUCKET_SIZES#9 ← phi( init_buckets::@3/(byte*) BUCKET_SIZES#3 )
  (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*) BUCKET_IDX#6 ← phi( init_buckets::@11/(byte*) BUCKET_IDX#5 init_buckets::@4/(byte*) BUCKET_IDX#7 )
  (word**) BUCKETS#5 ← phi( init_buckets::@11/(word**) BUCKETS#2 init_buckets::@4/(word**) BUCKETS#8 )
  (byte*) heap_head#36 ← 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*) BUCKET_SIZES#4 ← phi( init_buckets::@11/(byte*) BUCKET_SIZES#8 init_buckets::@4/(byte*) BUCKET_SIZES#9 )
  (byte~) init_buckets::$3 ← *((byte*) BUCKET_SIZES#4 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER
  (word) malloc::size#6 ← (byte~) init_buckets::$3
  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 )
  (byte*) BUCKET_IDX#5 ← phi( init_buckets::@5/(byte*) BUCKET_IDX#6 )
  (byte*) BUCKET_SIZES#8 ← phi( init_buckets::@5/(byte*) BUCKET_SIZES#4 )
  (word**) BUCKETS#2 ← phi( init_buckets::@5/(word**) BUCKETS#5 )
  (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::$4 ← (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#2 + (word~) init_buckets::$12) ← ((word*)) (void*~) init_buckets::$4
  (word) init_buckets::i2#1 ← (word) init_buckets::i2#3 + rangenext(0,NUM_BUCKETS-1)
  (bool~) init_buckets::$5 ← (word) init_buckets::i2#1 != rangelast(0,NUM_BUCKETS-1)
  if((bool~) init_buckets::$5) goto init_buckets::@5
  to:init_buckets::@6
init_buckets::@6: scope:[init_buckets]  from init_buckets::@11
  (byte*) heap_head#64 ← phi( init_buckets::@11/(byte*) heap_head#13 )
  (word**) BUCKETS#14 ← phi( init_buckets::@11/(word**) BUCKETS#2 )
  (byte*) init_buckets::screen#7 ← phi( init_buckets::@11/(byte*) init_buckets::screen#8 )
  (byte*) BUCKET_IDX#3 ← phi( init_buckets::@11/(byte*) BUCKET_IDX#5 )
  (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#58 ← phi( init_buckets::@6/(byte*) heap_head#64 init_buckets::@7/(byte*) heap_head#58 )
  (word**) BUCKETS#9 ← phi( init_buckets::@6/(word**) BUCKETS#14 init_buckets::@7/(word**) BUCKETS#9 )
  (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#1 ← phi( init_buckets::@6/(byte*) BUCKET_IDX#3 init_buckets::@7/(byte*) BUCKET_IDX#1 )
  *((byte*) BUCKET_IDX#1 + (byte) init_buckets::i3#2) ← (number) 0
  (byte) init_buckets::i3#1 ← (byte) init_buckets::i3#2 + rangenext(0,NUM_BUCKETS-1)
  (bool~) init_buckets::$6 ← (byte) init_buckets::i3#1 != rangelast(0,NUM_BUCKETS-1)
  if((bool~) init_buckets::$6) 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#58 )
  (byte*) BUCKET_IDX#4 ← phi( init_buckets::@7/(byte*) BUCKET_IDX#1 )
  (word**) BUCKETS#6 ← phi( init_buckets::@7/(word**) BUCKETS#9 )
  (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#42 ← phi( init_buckets::@8/(byte*) heap_head#52 init_buckets::@9/(byte*) heap_head#42 )
  (word) init_buckets::i4#2 ← phi( init_buckets::@8/(word) init_buckets::i4#0 init_buckets::@9/(word) init_buckets::i4#1 )
  (byte*) BUCKET_IDX#2 ← phi( init_buckets::@8/(byte*) BUCKET_IDX#4 init_buckets::@9/(byte*) BUCKET_IDX#2 )
  (byte*) init_buckets::screen#3 ← phi( init_buckets::@8/(byte*) init_buckets::screen#2 init_buckets::@9/(byte*) init_buckets::screen#3 )
  (word**) BUCKETS#3 ← phi( init_buckets::@8/(word**) BUCKETS#6 init_buckets::@9/(word**) BUCKETS#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::$7 ← ((word)) (byte) init_buckets::distance#0
  (word~) init_buckets::$13 ← (word~) init_buckets::$7 * (const byte) SIZEOF_POINTER
  (word*) init_buckets::bucket#0 ← *((word**) BUCKETS#3 + (word~) init_buckets::$13)
  (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#3
  (byte~) init_buckets::$14 ← *((byte*) BUCKET_IDX#2 + (byte) init_buckets::distance#0) * (const byte) SIZEOF_WORD
  *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8
  *((byte*) BUCKET_IDX#2 + (byte) init_buckets::distance#0) ← ++ *((byte*) BUCKET_IDX#2 + (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#42 )
  (byte*) heap_head#14 ← (byte*) heap_head#31
  return 
  to:@return

(void()) init_angle_screen((byte*) init_angle_screen::screen)
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 ← (byte) 0
  (byte) init_angle_screen::xb#0 ← (byte) $27
  to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@9
  (byte) init_angle_screen::xb#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::xb#0 init_angle_screen::@9/(byte) init_angle_screen::xb#1 )
  (byte*) init_angle_screen::screen_bottomline#5 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_bottomline#6 init_angle_screen::@9/(byte*) init_angle_screen::screen_bottomline#2 )
  (byte*) init_angle_screen::screen_topline#5 ← phi( init_angle_screen::@1/(byte*) init_angle_screen::screen_topline#6 init_angle_screen::@9/(byte*) init_angle_screen::screen_topline#2 )
  (byte) init_angle_screen::y#4 ← phi( init_angle_screen::@1/(byte) init_angle_screen::y#5 init_angle_screen::@9/(byte) init_angle_screen::y#6 )
  (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) init_angle_screen::x#0 init_angle_screen::@9/(byte) init_angle_screen::x#1 )
  (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13
  if((bool~) init_angle_screen::$2) goto init_angle_screen::@3
  to:init_angle_screen::@4
init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@2
  (byte*) init_angle_screen::screen_topline#4 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_topline#5 )
  (byte) init_angle_screen::xb#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::xb#4 )
  (byte*) init_angle_screen::screen_bottomline#4 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_bottomline#5 )
  (byte) init_angle_screen::y#2 ← phi( init_angle_screen::@2/(byte) init_angle_screen::y#4 )
  (byte) init_angle_screen::x#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::x#2 )
  (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2
  (number~) init_angle_screen::$4 ← (number) $27 - (number~) init_angle_screen::$3
  (word~) init_angle_screen::$5 ← ((word)) { (number~) init_angle_screen::$4, (number) 0 }
  (signed word~) init_angle_screen::$6 ← ((signed word)) (word~) init_angle_screen::$5
  (signed word) init_angle_screen::xw#0 ← (signed word~) init_angle_screen::$6
  (number~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (number) 2
  (word~) init_angle_screen::$8 ← ((word)) { (number~) init_angle_screen::$7, (number) 0 }
  (signed word~) init_angle_screen::$9 ← ((signed word)) (word~) init_angle_screen::$8
  (signed word) init_angle_screen::yw#0 ← (signed word~) init_angle_screen::$9
  (signed word) atan2_16::x#0 ← (signed word) init_angle_screen::xw#0
  (signed word) atan2_16::y#0 ← (signed word) init_angle_screen::yw#0
  call atan2_16 
  (word) atan2_16::return#2 ← (word) atan2_16::return#1
  to:init_angle_screen::@9
init_angle_screen::@9: scope:[init_angle_screen]  from init_angle_screen::@3
  (byte) init_angle_screen::y#6 ← phi( init_angle_screen::@3/(byte) init_angle_screen::y#2 )
  (byte) init_angle_screen::x#4 ← phi( init_angle_screen::@3/(byte) init_angle_screen::x#3 )
  (byte*) init_angle_screen::screen_topline#2 ← phi( init_angle_screen::@3/(byte*) init_angle_screen::screen_topline#4 )
  (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@3/(byte) init_angle_screen::xb#3 )
  (byte*) init_angle_screen::screen_bottomline#2 ← phi( init_angle_screen::@3/(byte*) init_angle_screen::screen_bottomline#4 )
  (word) atan2_16::return#4 ← phi( init_angle_screen::@3/(word) atan2_16::return#2 )
  (word~) init_angle_screen::$10 ← (word) atan2_16::return#4
  (word) init_angle_screen::angle_w#0 ← (word~) init_angle_screen::$10
  (number~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (number) $80
  (number~) init_angle_screen::$12 ← > (number~) init_angle_screen::$11
  (byte) init_angle_screen::ang_w#0 ← (number~) init_angle_screen::$12
  *((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
  (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0
  *((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13
  (number~) init_angle_screen::$14 ← (number) $80 + (byte) init_angle_screen::ang_w#0
  *((byte*) init_angle_screen::screen_topline#2 + (byte) init_angle_screen::x#4) ← (number~) init_angle_screen::$14
  (number~) init_angle_screen::$15 ← (number) $80 - (byte) init_angle_screen::ang_w#0
  *((byte*) init_angle_screen::screen_bottomline#2 + (byte) init_angle_screen::x#4) ← (number~) init_angle_screen::$15
  (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#4
  (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
  to:init_angle_screen::@2
init_angle_screen::@4: scope:[init_angle_screen]  from init_angle_screen::@2
  (byte) init_angle_screen::y#3 ← phi( init_angle_screen::@2/(byte) init_angle_screen::y#4 )
  (byte*) init_angle_screen::screen_bottomline#3 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_bottomline#5 )
  (byte*) init_angle_screen::screen_topline#3 ← phi( init_angle_screen::@2/(byte*) init_angle_screen::screen_topline#5 )
  (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#3 - (number) $28
  (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#3 + (number) $28
  (byte) init_angle_screen::y#1 ← (byte) init_angle_screen::y#3 + rangenext(0,$c)
  (bool~) init_angle_screen::$16 ← (byte) init_angle_screen::y#1 != rangelast(0,$c)
  if((bool~) init_angle_screen::$16) goto init_angle_screen::@1
  to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen]  from init_angle_screen::@4
  return 
  to:@return

(void()) init_dist_screen((byte*) init_dist_screen::screen)
init_dist_screen: scope:[init_dist_screen]  from main
  (byte*) init_dist_screen::screen#2 ← phi( main/(byte*) init_dist_screen::screen#0 )
  (word*) SQUARES#23 ← phi( main/(word*) SQUARES#21 )
  (byte*) heap_head#43 ← phi( main/(byte*) heap_head#39 )
  (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#54 ← 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#76 ← phi( init_dist_screen::@19/(byte*) heap_head#15 init_dist_screen::@7/(byte*) heap_head#44 )
  (byte) NUM_SQUARES#49 ← phi( init_dist_screen::@19/(byte) NUM_SQUARES#54 init_dist_screen::@7/(byte) NUM_SQUARES#18 )
  (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#41 ← 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#70 ← phi( init_dist_screen::@1/(byte*) heap_head#76 )
  (byte) NUM_SQUARES#44 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#49 )
  (byte) init_dist_screen::y#9 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 )
  (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#14 )
  (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#14 )
  (word*) SQUARES#30 ← phi( init_dist_screen::@1/(word*) SQUARES#41 )
  (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#71 ← phi( init_dist_screen::@1/(byte*) heap_head#76 )
  (byte) NUM_SQUARES#45 ← phi( init_dist_screen::@1/(byte) NUM_SQUARES#49 )
  (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@1/(byte) init_dist_screen::y#2 )
  (byte*) init_dist_screen::screen_bottomline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_bottomline#14 )
  (byte*) init_dist_screen::screen_topline#12 ← phi( init_dist_screen::@1/(byte*) init_dist_screen::screen_topline#14 )
  (word*) SQUARES#31 ← phi( init_dist_screen::@1/(word*) SQUARES#41 )
  (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#65 ← phi( init_dist_screen::@2/(byte*) heap_head#70 init_dist_screen::@3/(byte*) heap_head#71 )
  (byte) NUM_SQUARES#39 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#44 init_dist_screen::@3/(byte) NUM_SQUARES#45 )
  (byte) init_dist_screen::y#7 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#9 init_dist_screen::@3/(byte) init_dist_screen::y#10 )
  (byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 )
  (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
  (word*) SQUARES#19 ← phi( init_dist_screen::@2/(word*) SQUARES#30 init_dist_screen::@3/(word*) SQUARES#31 )
  (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(number~) init_dist_screen::$7 init_dist_screen::@3/(number~) init_dist_screen::$5 )
  (byte) init_dist_screen::yd#0 ← (number~) init_dist_screen::$8
  (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
  call sqr 
  (word) sqr::return#2 ← (word) sqr::return#1
  to:init_dist_screen::@20
init_dist_screen::@20: scope:[init_dist_screen]  from init_dist_screen::@4
  (word*) SQUARES#42 ← phi( init_dist_screen::@4/(word*) SQUARES#19 )
  (byte*) heap_head#59 ← phi( init_dist_screen::@4/(byte*) heap_head#65 )
  (byte) NUM_SQUARES#31 ← phi( init_dist_screen::@4/(byte) NUM_SQUARES#39 )
  (byte) init_dist_screen::y#5 ← phi( init_dist_screen::@4/(byte) init_dist_screen::y#7 )
  (byte*) init_dist_screen::screen_bottomline#6 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_bottomline#8 )
  (byte*) init_dist_screen::screen_topline#6 ← phi( init_dist_screen::@4/(byte*) init_dist_screen::screen_topline#8 )
  (word) sqr::return#5 ← phi( init_dist_screen::@4/(word) sqr::return#2 )
  (word~) init_dist_screen::$9 ← (word) sqr::return#5
  (word) init_dist_screen::yds#0 ← (word~) init_dist_screen::$9
  (byte) init_dist_screen::x#0 ← (byte) 0
  (byte) init_dist_screen::xb#0 ← (byte) $27
  to:init_dist_screen::@5
init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@20 init_dist_screen::@22
  (byte) init_dist_screen::xb#8 ← phi( init_dist_screen::@20/(byte) init_dist_screen::xb#0 init_dist_screen::@22/(byte) init_dist_screen::xb#1 )
  (word) init_dist_screen::yds#6 ← phi( init_dist_screen::@20/(word) init_dist_screen::yds#0 init_dist_screen::@22/(word) init_dist_screen::yds#7 )
  (word*) SQUARES#32 ← phi( init_dist_screen::@20/(word*) SQUARES#42 init_dist_screen::@22/(word*) SQUARES#43 )
  (byte*) heap_head#53 ← phi( init_dist_screen::@20/(byte*) heap_head#59 init_dist_screen::@22/(byte*) heap_head#60 )
  (byte) NUM_SQUARES#23 ← phi( init_dist_screen::@20/(byte) NUM_SQUARES#31 init_dist_screen::@22/(byte) NUM_SQUARES#32 )
  (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#82 ← 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#40 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#23 )
  (word) init_dist_screen::yds#5 ← phi( init_dist_screen::@5/(word) init_dist_screen::yds#6 )
  (word*) SQUARES#44 ← phi( init_dist_screen::@5/(word*) SQUARES#32 )
  (byte) init_dist_screen::x#3 ← phi( init_dist_screen::@5/(byte) init_dist_screen::x#2 )
  (number~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (number) 2
  (byte) init_dist_screen::x2#0 ← (number~) init_dist_screen::$11
  (bool~) init_dist_screen::$12 ← (byte) init_dist_screen::x2#0 >= (number) $27
  if((bool~) init_dist_screen::$12) goto init_dist_screen::@8
  to:init_dist_screen::@9
init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
  (word*) SQUARES#24 ← phi( init_dist_screen::@5/(word*) SQUARES#32 )
  (byte*) heap_head#44 ← phi( init_dist_screen::@5/(byte*) heap_head#53 )
  (byte) NUM_SQUARES#18 ← phi( init_dist_screen::@5/(byte) NUM_SQUARES#23 )
  (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#77 ← phi( init_dist_screen::@6/(byte*) heap_head#82 )
  (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#33 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#40 )
  (word) init_dist_screen::yds#3 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#5 )
  (word*) SQUARES#33 ← phi( init_dist_screen::@6/(word*) SQUARES#44 )
  (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#78 ← phi( init_dist_screen::@6/(byte*) heap_head#82 )
  (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#34 ← phi( init_dist_screen::@6/(byte) NUM_SQUARES#40 )
  (word) init_dist_screen::yds#4 ← phi( init_dist_screen::@6/(word) init_dist_screen::yds#5 )
  (word*) SQUARES#34 ← phi( init_dist_screen::@6/(word*) SQUARES#44 )
  (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#72 ← phi( init_dist_screen::@8/(byte*) heap_head#77 init_dist_screen::@9/(byte*) heap_head#78 )
  (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#24 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#33 init_dist_screen::@9/(byte) NUM_SQUARES#34 )
  (word) init_dist_screen::yds#2 ← phi( init_dist_screen::@8/(word) init_dist_screen::yds#3 init_dist_screen::@9/(word) init_dist_screen::yds#4 )
  (word*) SQUARES#18 ← phi( init_dist_screen::@8/(word*) SQUARES#33 init_dist_screen::@9/(word*) SQUARES#34 )
  (number~) init_dist_screen::$17 ← phi( init_dist_screen::@8/(number~) init_dist_screen::$16 init_dist_screen::@9/(number~) init_dist_screen::$14 )
  (byte) init_dist_screen::xd#0 ← (number~) init_dist_screen::$17
  (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
  call sqr 
  (word) sqr::return#3 ← (word) sqr::return#1
  to:init_dist_screen::@21
init_dist_screen::@21: scope:[init_dist_screen]  from init_dist_screen::@10
  (byte*) heap_head#66 ← phi( init_dist_screen::@10/(byte*) heap_head#72 )
  (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#15 ← phi( init_dist_screen::@10/(byte) NUM_SQUARES#24 )
  (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#43 ← phi( init_dist_screen::@21/(word*) SQUARES#20 )
  (byte*) heap_head#60 ← phi( init_dist_screen::@21/(byte*) heap_head#66 )
  (byte) NUM_SQUARES#32 ← phi( init_dist_screen::@21/(byte) NUM_SQUARES#15 )
  (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#44 )
  (byte) NUM_SQUARES#11 ← phi( init_dist_screen::@7/(byte) NUM_SQUARES#18 )
  (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
@26: scope:[]  from @31
  (byte*) BUCKET_IDX#15 ← phi( @31/(byte*) BUCKET_IDX#0 )
  (word**) BUCKETS#26 ← phi( @31/(word**) BUCKETS#30 )
  (byte*) BUCKET_SIZES#19 ← phi( @31/(byte*) BUCKET_SIZES#23 )
  (byte*) SCREEN_ANGLE#5 ← phi( @31/(byte*) SCREEN_ANGLE#9 )
  (word*) SQUARES#25 ← phi( @31/(word*) SQUARES#35 )
  (byte*) heap_head#45 ← phi( @31/(byte*) heap_head#9 )
  (byte) NUM_SQUARES#19 ← phi( @31/(byte) NUM_SQUARES#25 )
  (byte*) SCREEN_DIST#3 ← phi( @31/(byte*) SCREEN_DIST#5 )
  call main 
  to:@32
@32: scope:[]  from @26
  (word*) SQUARES#16 ← phi( @26/(word*) SQUARES#4 )
  (byte*) heap_head#34 ← phi( @26/(byte*) heap_head#12 )
  (byte) NUM_SQUARES#12 ← phi( @26/(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 @32

SYMBOL TABLE SSA
(void*~) $0
(void*~) $1
(void*~) $2
(void*~) $3
(void*~) $4
(label) @17
(label) @22
(label) @26
(label) @27
(label) @28
(label) @29
(label) @30
(label) @31
(label) @32
(label) @9
(label) @begin
(label) @end
(const byte*) BORDERCOL = (byte*)(number) $d020
(word**) BUCKETS
(word**) BUCKETS#0
(word**) BUCKETS#1
(word**) BUCKETS#10
(word**) BUCKETS#11
(word**) BUCKETS#12
(word**) BUCKETS#13
(word**) BUCKETS#14
(word**) BUCKETS#15
(word**) BUCKETS#16
(word**) BUCKETS#17
(word**) BUCKETS#18
(word**) BUCKETS#19
(word**) BUCKETS#2
(word**) BUCKETS#20
(word**) BUCKETS#21
(word**) BUCKETS#22
(word**) BUCKETS#23
(word**) BUCKETS#24
(word**) BUCKETS#25
(word**) BUCKETS#26
(word**) BUCKETS#27
(word**) BUCKETS#28
(word**) BUCKETS#29
(word**) BUCKETS#3
(word**) BUCKETS#30
(word**) BUCKETS#4
(word**) BUCKETS#5
(word**) BUCKETS#6
(word**) BUCKETS#7
(word**) BUCKETS#8
(word**) BUCKETS#9
(byte*) BUCKET_IDX
(byte*) BUCKET_IDX#0
(byte*) BUCKET_IDX#1
(byte*) BUCKET_IDX#10
(byte*) BUCKET_IDX#11
(byte*) BUCKET_IDX#12
(byte*) BUCKET_IDX#13
(byte*) BUCKET_IDX#14
(byte*) BUCKET_IDX#15
(byte*) BUCKET_IDX#2
(byte*) BUCKET_IDX#3
(byte*) BUCKET_IDX#4
(byte*) BUCKET_IDX#5
(byte*) BUCKET_IDX#6
(byte*) BUCKET_IDX#7
(byte*) BUCKET_IDX#8
(byte*) BUCKET_IDX#9
(byte*) BUCKET_SIZES
(byte*) BUCKET_SIZES#0
(byte*) BUCKET_SIZES#1
(byte*) BUCKET_SIZES#10
(byte*) BUCKET_SIZES#11
(byte*) BUCKET_SIZES#12
(byte*) BUCKET_SIZES#13
(byte*) BUCKET_SIZES#14
(byte*) BUCKET_SIZES#15
(byte*) BUCKET_SIZES#16
(byte*) BUCKET_SIZES#17
(byte*) BUCKET_SIZES#18
(byte*) BUCKET_SIZES#19
(byte*) BUCKET_SIZES#2
(byte*) BUCKET_SIZES#20
(byte*) BUCKET_SIZES#21
(byte*) BUCKET_SIZES#22
(byte*) BUCKET_SIZES#23
(byte*) BUCKET_SIZES#24
(byte*) BUCKET_SIZES#25
(byte*) BUCKET_SIZES#26
(byte*) BUCKET_SIZES#27
(byte*) BUCKET_SIZES#3
(byte*) BUCKET_SIZES#4
(byte*) BUCKET_SIZES#5
(byte*) BUCKET_SIZES#6
(byte*) BUCKET_SIZES#7
(byte*) BUCKET_SIZES#8
(byte*) BUCKET_SIZES#9
(const byte*) COLS = (byte*)(number) $d800
(const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16]  = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2
 }}
(const byte) CORDIC_ITERATIONS_16 = (byte) $f
(const byte) FILL_CHAR = (byte) '*'
(const byte*) HEAP_TOP = (byte*)(number) $a000
(const byte) NUM_BUCKETS = (byte) $30
(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
(const byte*) RASTER = (byte*)(number) $d012
(byte*) SCREEN_ANGLE
(byte*) SCREEN_ANGLE#0
(byte*) SCREEN_ANGLE#1
(byte*) SCREEN_ANGLE#10
(byte*) SCREEN_ANGLE#11
(byte*) SCREEN_ANGLE#12
(byte*) SCREEN_ANGLE#13
(byte*) SCREEN_ANGLE#14
(byte*) SCREEN_ANGLE#15
(byte*) SCREEN_ANGLE#16
(byte*) SCREEN_ANGLE#17
(byte*) SCREEN_ANGLE#18
(byte*) SCREEN_ANGLE#19
(byte*) SCREEN_ANGLE#2
(byte*) SCREEN_ANGLE#20
(byte*) SCREEN_ANGLE#21
(byte*) SCREEN_ANGLE#3
(byte*) SCREEN_ANGLE#4
(byte*) SCREEN_ANGLE#5
(byte*) SCREEN_ANGLE#6
(byte*) SCREEN_ANGLE#7
(byte*) SCREEN_ANGLE#8
(byte*) SCREEN_ANGLE#9
(byte*) SCREEN_DIST
(byte*) SCREEN_DIST#0
(byte*) SCREEN_DIST#1
(byte*) SCREEN_DIST#2
(byte*) SCREEN_DIST#3
(byte*) SCREEN_DIST#4
(byte*) SCREEN_DIST#5
(byte*) SCREEN_DIST#6
(byte*) SCREEN_DIST#7
(byte*) SCREEN_DIST#8
(const byte*) SCREEN_FILL = (byte*)(number) $400
(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#6
(word*) SQUARES#7
(word*) SQUARES#8
(word*) SQUARES#9
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(bool~) atan2_16::$0
(signed word~) atan2_16::$1
(bool~) atan2_16::$10
(bool~) atan2_16::$11
(number~) atan2_16::$12
(bool~) atan2_16::$13
(bool~) atan2_16::$14
(word~) atan2_16::$15
(bool~) atan2_16::$16
(bool~) atan2_16::$17
(bool~) atan2_16::$18
(bool~) atan2_16::$19
(signed word~) atan2_16::$2
(bool~) atan2_16::$20
(bool~) atan2_16::$21
(byte~) atan2_16::$22
(byte~) atan2_16::$23
(bool~) atan2_16::$24
(signed word~) atan2_16::$3
(signed word~) atan2_16::$4
(bool~) atan2_16::$5
(signed word~) atan2_16::$6
(signed word~) atan2_16::$7
(signed word~) atan2_16::$8
(signed word~) atan2_16::$9
(label) atan2_16::@1
(label) atan2_16::@13
(label) atan2_16::@15
(label) atan2_16::@16
(label) atan2_16::@17
(label) atan2_16::@18
(label) atan2_16::@19
(label) atan2_16::@2
(label) atan2_16::@20
(label) atan2_16::@24
(label) atan2_16::@25
(label) atan2_16::@26
(label) atan2_16::@27
(label) atan2_16::@3
(label) atan2_16::@30
(label) atan2_16::@33
(label) atan2_16::@4
(label) atan2_16::@5
(label) atan2_16::@6
(label) atan2_16::@7
(label) atan2_16::@8
(label) atan2_16::@return
(word) atan2_16::angle
(word) atan2_16::angle#0
(word) atan2_16::angle#1
(word) atan2_16::angle#10
(word) atan2_16::angle#11
(word) atan2_16::angle#12
(word) atan2_16::angle#13
(word) atan2_16::angle#14
(word) atan2_16::angle#15
(word) atan2_16::angle#16
(word) atan2_16::angle#17
(word) atan2_16::angle#18
(word) atan2_16::angle#19
(word) atan2_16::angle#2
(word) atan2_16::angle#20
(word) atan2_16::angle#3
(word) atan2_16::angle#4
(word) atan2_16::angle#5
(word) atan2_16::angle#6
(word) atan2_16::angle#7
(word) atan2_16::angle#8
(word) atan2_16::angle#9
(byte) atan2_16::i
(byte) atan2_16::i#0
(byte) atan2_16::i#1
(byte) atan2_16::i#10
(byte) atan2_16::i#11
(byte) atan2_16::i#2
(byte) atan2_16::i#3
(byte) atan2_16::i#4
(byte) atan2_16::i#5
(byte) atan2_16::i#6
(byte) atan2_16::i#7
(byte) atan2_16::i#8
(byte) atan2_16::i#9
(word) atan2_16::return
(word) atan2_16::return#0
(word) atan2_16::return#1
(word) atan2_16::return#2
(word) atan2_16::return#3
(word) atan2_16::return#4
(byte) atan2_16::shift
(byte) atan2_16::shift#0
(byte) atan2_16::shift#1
(byte) atan2_16::shift#2
(byte) atan2_16::shift#3
(byte) atan2_16::shift#4
(signed word) atan2_16::x
(signed word) atan2_16::x#0
(signed word) atan2_16::x#1
(signed word) atan2_16::x#10
(signed word) atan2_16::x#11
(signed word) atan2_16::x#12
(signed word) atan2_16::x#13
(signed word) atan2_16::x#14
(signed word) atan2_16::x#15
(signed word) atan2_16::x#16
(signed word) atan2_16::x#17
(signed word) atan2_16::x#18
(signed word) atan2_16::x#2
(signed word) atan2_16::x#3
(signed word) atan2_16::x#4
(signed word) atan2_16::x#5
(signed word) atan2_16::x#6
(signed word) atan2_16::x#7
(signed word) atan2_16::x#8
(signed word) atan2_16::x#9
(signed word) atan2_16::xd
(signed word) atan2_16::xd#0
(signed word) atan2_16::xd#1
(signed word) atan2_16::xd#2
(signed word) atan2_16::xd#3
(signed word) atan2_16::xd#4
(signed word) atan2_16::xd#5
(signed word) atan2_16::xd#6
(signed word) atan2_16::xd#7
(signed word) atan2_16::xd#8
(signed word) atan2_16::xd#9
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0
(signed word) atan2_16::xi#1
(signed word) atan2_16::xi#10
(signed word) atan2_16::xi#11
(signed word) atan2_16::xi#12
(signed word) atan2_16::xi#2
(signed word) atan2_16::xi#3
(signed word) atan2_16::xi#4
(signed word) atan2_16::xi#5
(signed word) atan2_16::xi#6
(signed word) atan2_16::xi#7
(signed word) atan2_16::xi#8
(signed word) atan2_16::xi#9
(signed word) atan2_16::y
(signed word) atan2_16::y#0
(signed word) atan2_16::y#1
(signed word) atan2_16::y#10
(signed word) atan2_16::y#11
(signed word) atan2_16::y#12
(signed word) atan2_16::y#13
(signed word) atan2_16::y#14
(signed word) atan2_16::y#15
(signed word) atan2_16::y#16
(signed word) atan2_16::y#17
(signed word) atan2_16::y#18
(signed word) atan2_16::y#19
(signed word) atan2_16::y#2
(signed word) atan2_16::y#20
(signed word) atan2_16::y#3
(signed word) atan2_16::y#4
(signed word) atan2_16::y#5
(signed word) atan2_16::y#6
(signed word) atan2_16::y#7
(signed word) atan2_16::y#8
(signed word) atan2_16::y#9
(signed word) atan2_16::yd
(signed word) atan2_16::yd#0
(signed word) atan2_16::yd#1
(signed word) atan2_16::yd#2
(signed word) atan2_16::yd#3
(signed word) atan2_16::yd#4
(signed word) atan2_16::yd#5
(signed word) atan2_16::yd#6
(signed word) atan2_16::yd#7
(signed word) atan2_16::yd#8
(signed word) atan2_16::yd#9
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0
(signed word) atan2_16::yi#1
(signed word) atan2_16::yi#10
(signed word) atan2_16::yi#11
(signed word) atan2_16::yi#12
(signed word) atan2_16::yi#13
(signed word) atan2_16::yi#14
(signed word) atan2_16::yi#15
(signed word) atan2_16::yi#2
(signed word) atan2_16::yi#3
(signed word) atan2_16::yi#4
(signed word) atan2_16::yi#5
(signed word) atan2_16::yi#6
(signed word) atan2_16::yi#7
(signed word) atan2_16::yi#8
(signed word) atan2_16::yi#9
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(bool~) bsearch16u::$0
(word*~) bsearch16u::$1
(signed word~) bsearch16u::$10
(bool~) bsearch16u::$11
(bool~) bsearch16u::$12
(bool~) bsearch16u::$13
(bool~) bsearch16u::$14
(word*~) bsearch16u::$15
(byte~) bsearch16u::$16
(number~) bsearch16u::$17
(number~) bsearch16u::$18
(word*~) bsearch16u::$2
(word*~) bsearch16u::$3
(word*~) bsearch16u::$4
(bool~) bsearch16u::$5
(byte~) bsearch16u::$6
(word*~) bsearch16u::$7
(signed word~) bsearch16u::$8
(signed word~) bsearch16u::$9
(label) bsearch16u::@1
(label) bsearch16u::@10
(label) bsearch16u::@13
(label) bsearch16u::@15
(label) bsearch16u::@2
(label) bsearch16u::@3
(label) bsearch16u::@6
(label) bsearch16u::@7
(label) bsearch16u::@8
(label) bsearch16u::@9
(label) bsearch16u::@return
(word*) bsearch16u::items
(word*) bsearch16u::items#0
(word*) bsearch16u::items#1
(word*) bsearch16u::items#2
(word*) bsearch16u::items#3
(word*) bsearch16u::items#4
(word*) bsearch16u::items#5
(word*) bsearch16u::items#6
(word*) bsearch16u::items#7
(word*) bsearch16u::items#8
(word*) bsearch16u::items#9
(word) bsearch16u::key
(word) bsearch16u::key#0
(word) bsearch16u::key#1
(word) bsearch16u::key#2
(word) bsearch16u::key#3
(word) bsearch16u::key#4
(word) bsearch16u::key#5
(word) bsearch16u::key#6
(word) bsearch16u::key#7
(byte) bsearch16u::num
(byte) bsearch16u::num#0
(byte) bsearch16u::num#1
(byte) bsearch16u::num#2
(byte) bsearch16u::num#3
(byte) bsearch16u::num#4
(byte) bsearch16u::num#5
(byte) bsearch16u::num#6
(byte) bsearch16u::num#7
(byte) bsearch16u::num#8
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0
(word*) bsearch16u::pivot#1
(word*) bsearch16u::pivot#2
(word*) bsearch16u::pivot#3
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0
(signed word) bsearch16u::result#1
(word*) bsearch16u::return
(word*) bsearch16u::return#0
(word*) bsearch16u::return#1
(word*) bsearch16u::return#2
(word*) bsearch16u::return#3
(word*) bsearch16u::return#4
(word*) bsearch16u::return#5
(byte*) heap_head
(byte*) heap_head#0
(byte*) heap_head#1
(byte*) heap_head#10
(byte*) heap_head#11
(byte*) heap_head#12
(byte*) heap_head#13
(byte*) heap_head#14
(byte*) heap_head#15
(byte*) heap_head#16
(byte*) heap_head#17
(byte*) heap_head#18
(byte*) heap_head#19
(byte*) heap_head#2
(byte*) heap_head#20
(byte*) heap_head#21
(byte*) heap_head#22
(byte*) heap_head#23
(byte*) heap_head#24
(byte*) heap_head#25
(byte*) heap_head#26
(byte*) heap_head#27
(byte*) heap_head#28
(byte*) heap_head#29
(byte*) heap_head#3
(byte*) heap_head#30
(byte*) heap_head#31
(byte*) heap_head#32
(byte*) heap_head#33
(byte*) heap_head#34
(byte*) heap_head#35
(byte*) heap_head#36
(byte*) heap_head#37
(byte*) heap_head#38
(byte*) heap_head#39
(byte*) heap_head#4
(byte*) heap_head#40
(byte*) heap_head#41
(byte*) heap_head#42
(byte*) heap_head#43
(byte*) heap_head#44
(byte*) heap_head#45
(byte*) heap_head#46
(byte*) heap_head#47
(byte*) heap_head#48
(byte*) heap_head#49
(byte*) heap_head#5
(byte*) heap_head#50
(byte*) heap_head#51
(byte*) heap_head#52
(byte*) heap_head#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#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)
(bool~) init_buckets::$0
(bool~) init_buckets::$11
(word~) init_buckets::$12
(word~) init_buckets::$13
(byte~) init_buckets::$14
(bool~) init_buckets::$2
(byte~) init_buckets::$3
(void*~) init_buckets::$4
(bool~) init_buckets::$5
(bool~) init_buckets::$6
(word~) init_buckets::$7
(word~) init_buckets::$8
(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
(bool~) init_squares::$2
(number~) init_squares::$3
(number~) init_squares::$4
(label) init_squares::@1
(label) init_squares::@2
(label) init_squares::@7
(label) init_squares::@return
(byte) init_squares::i
(byte) init_squares::i#0
(byte) init_squares::i#1
(byte) init_squares::i#2
(byte) init_squares::i#3
(word) init_squares::sqr
(word) init_squares::sqr#0
(word) init_squares::sqr#1
(word) init_squares::sqr#2
(word) init_squares::sqr#3
(word*) init_squares::squares
(word*) init_squares::squares#0
(word*) init_squares::squares#1
(word*) init_squares::squares#2
(word*) init_squares::squares#3
(void()) main()
(bool~) main::$10
(byte*~) main::$11
(bool~) main::$12
(bool~) main::$13
(bool~) main::$14
(bool~) main::$15
(byte*~) main::$16
(bool~) main::$18
(bool~) main::$19
(byte~) main::$23
(byte~) main::$24
(bool~) main::$3
(bool~) main::$5
(bool~) main::$6
(bool~) main::$7
(byte*~) 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
(word*) main::bucket#1
(word*) main::bucket#2
(word*) main::bucket#3
(word*) main::bucket#4
(word*) main::bucket#5
(word*) main::bucket#6
(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) 2 in (number~) init_squares::$3 ← (byte) init_squares::i#3 * (number) 2
Adding number conversion cast (unumber) init_squares::$3 in (number~) init_squares::$3 ← (byte) init_squares::i#3 * (unumber)(number) 2
Adding number conversion cast (unumber) 1 in (number~) init_squares::$4 ← (unumber~) init_squares::$3 + (number) 1
Adding number conversion cast (unumber) init_squares::$4 in (number~) init_squares::$4 ← (unumber~) init_squares::$3 + (unumber)(number) 1
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$0 ← (signed word) atan2_16::y#1 >= (number) 0
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$5 ← (signed word) atan2_16::x#1 >= (number) 0
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (number) 0
Adding number conversion cast (unumber) 2 in (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (number) 2
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (number) 0
Adding number conversion cast (unumber) 2 in (bool~) atan2_16::$18 ← (byte) atan2_16::shift#2 >= (number) 2
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (number) 2
Adding number conversion cast (snumber) 2 in (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (number) 2
Adding number conversion cast (unumber) 2 in (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#3 - (number) 2
Adding number conversion cast (unumber) 0 in (bool~) atan2_16::$24 ← (number) 0 != (byte) atan2_16::shift#4
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$20 ← (signed word) atan2_16::yi#5 >= (number) 0
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#4 >> (number) 1
Adding number conversion cast (snumber) 1 in (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#4 >> (number) 1
Adding number conversion cast (unumber) 1 in (byte) atan2_16::i#1 ← (byte) atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (number) 0
Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9
Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9
Adding number conversion cast (unumber) $3e8 in (word) malloc::size#1 ← (number) $3e8
Adding number conversion cast (unumber) $3e8 in (word) malloc::size#2 ← (number) $3e8
Adding number conversion cast (unumber) $ff in (bool~) main::$3 ← *((const byte*) RASTER) != (number) $ff
Adding number conversion cast (unumber) 0 in (bool~) main::$5 ← (byte) main::bucket_size#0 > (number) 0
Adding number conversion cast (unumber) $ffff in (bool~) main::$14 ← (word) main::min_offset#2 != (number) $ffff
Adding number conversion cast (unumber) $3e7 in *((const byte*) COLS+(number) $3e7) ← ++ *((const byte*) COLS+(number) $3e7)
Adding number conversion cast (unumber) 0 in *((byte*) BUCKET_SIZES#2 + (byte) init_buckets::i#2) ← (number) 0
Adding number conversion cast (unumber) 1 in (byte) init_buckets::i#1 ← (byte) init_buckets::i#2 + rangenext(0,NUM_BUCKETS-1)
Adding number conversion cast (unumber) 1 in (word) init_buckets::i2#1 ← (word) init_buckets::i2#3 + rangenext(0,NUM_BUCKETS-1)
Adding number conversion cast (unumber) 0 in *((byte*) BUCKET_IDX#1 + (byte) init_buckets::i3#2) ← (number) 0
Adding number conversion cast (unumber) 1 in (byte) init_buckets::i3#1 ← (byte) init_buckets::i3#2 + rangenext(0,NUM_BUCKETS-1)
Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$0 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
Adding number conversion cast (unumber) $28*$c in (byte*~) init_angle_screen::$1 ← (byte*) init_angle_screen::screen#1 + (number) $28*(number) $c
Adding number conversion cast (unumber) $13 in (bool~) init_angle_screen::$2 ← (byte) init_angle_screen::x#2 <= (number) $13
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (number) 2
Adding number conversion cast (unumber) init_angle_screen::$3 in (number~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (unumber)(number) 2
Adding number conversion cast (unumber) $27 in (number~) init_angle_screen::$4 ← (number) $27 - (unumber~) init_angle_screen::$3
Adding number conversion cast (unumber) init_angle_screen::$4 in (number~) init_angle_screen::$4 ← (unumber)(number) $27 - (unumber~) init_angle_screen::$3
Adding number conversion cast (unumber) 2 in (number~) init_angle_screen::$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#65 ← phi( init_dist_screen::@2/(byte*) heap_head#70 init_dist_screen::@3/(byte*) heap_head#71 )
  (byte) NUM_SQUARES#39 ← phi( init_dist_screen::@2/(byte) NUM_SQUARES#44 init_dist_screen::@3/(byte) NUM_SQUARES#45 )
  (byte) init_dist_screen::y#7 ← phi( init_dist_screen::@2/(byte) init_dist_screen::y#9 init_dist_screen::@3/(byte) init_dist_screen::y#10 )
  (byte*) init_dist_screen::screen_bottomline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_bottomline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_bottomline#12 )
  (byte*) init_dist_screen::screen_topline#8 ← phi( init_dist_screen::@2/(byte*) init_dist_screen::screen_topline#11 init_dist_screen::@3/(byte*) init_dist_screen::screen_topline#12 )
  (word*) SQUARES#19 ← phi( init_dist_screen::@2/(word*) SQUARES#30 init_dist_screen::@3/(word*) SQUARES#31 )
  (number~) init_dist_screen::$8 ← phi( init_dist_screen::@2/(unumber~) init_dist_screen::$7 init_dist_screen::@3/(unumber~) init_dist_screen::$5 )
Adding number conversion cast (unumber) $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#72 ← phi( init_dist_screen::@8/(byte*) heap_head#77 init_dist_screen::@9/(byte*) heap_head#78 )
  (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#24 ← phi( init_dist_screen::@8/(byte) NUM_SQUARES#33 init_dist_screen::@9/(byte) NUM_SQUARES#34 )
  (word) init_dist_screen::yds#2 ← phi( init_dist_screen::@8/(word) init_dist_screen::yds#3 init_dist_screen::@9/(word) init_dist_screen::yds#4 )
  (word*) SQUARES#18 ← phi( init_dist_screen::@8/(word*) SQUARES#33 init_dist_screen::@9/(word*) SQUARES#34 )
  (number~) init_dist_screen::$17 ← phi( init_dist_screen::@8/(unumber~) init_dist_screen::$16 init_dist_screen::@9/(unumber~) init_dist_screen::$14 )
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0
Inlining cast (signed word~) bsearch16u::$8 ← (signed word)(word) bsearch16u::key#1
Inlining cast (signed word~) bsearch16u::$9 ← (signed word)*((word*) bsearch16u::pivot#0)
Inlining cast (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1
Inlining cast (byte~) sqrt::$2 ← (byte)(word~) sqrt::$1
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*) BUCKET_SIZES#0 ← (byte*)(void*~) $2
Inlining cast (word**) BUCKETS#0 ← (word**)(void*~) $3
Inlining cast (byte*) BUCKET_IDX#0 ← (byte*)(void*~) $4
Inlining cast *((byte*) BUCKET_SIZES#2 + (byte) init_buckets::i#2) ← (unumber)(number) 0
Inlining cast *((word**) BUCKETS#2 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$4
Inlining cast *((byte*) BUCKET_IDX#1 + (byte) init_buckets::i3#2) ← (unumber)(number) 0
Inlining cast (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0
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
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*) 1024
Simplifying constant pointer cast (byte*) 40960
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast $8000
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Simplifying constant integer cast $ff
Simplifying constant integer cast 0
Simplifying constant integer cast $ffff
Simplifying constant integer cast $3e7
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $30
Simplifying constant integer cast 2
Simplifying constant integer cast $18
Simplifying constant integer cast $18
Simplifying constant integer cast $18
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $27
Simplifying constant integer cast $27
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 2
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 2
Finalized signed number type (signed byte) 2
Finalized signed number type (signed byte) 2
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 0
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 1
Finalized signed number type (signed byte) 1
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized unsigned number type (word) $8000
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $ffff
Finalized unsigned number type (word) $3e7
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) 1
Finalized unsigned number type (byte) $13
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) $18
Finalized unsigned number type (byte) $13
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) $27
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::$3 ← (byte) init_squares::i#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
Inferred type updated to word in (unumber~) atan2_16::$12 ← (word) $8000 - (word) atan2_16::angle#9
Inferred type updated to byte in (unumber~) init_angle_screen::$3 ← (byte) init_angle_screen::x#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
Inferred type updated to byte in (unumber~) init_angle_screen::$7 ← (byte) init_angle_screen::y#2 * (byte) 2
Inferred type updated to word in (unumber~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80
Inferred type updated to byte in (unumber~) init_angle_screen::$12 ← > (word~) init_angle_screen::$11
Inferred type updated to byte in (unumber~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
Inferred type updated to byte in (unumber~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
Inferred type updated to byte in (unumber~) init_dist_screen::$2 ← (byte) init_dist_screen::y#2 * (byte) 2
Inferred type updated to byte in (unumber~) init_dist_screen::$6 ← (byte) init_dist_screen::y2#1 - (byte) $18
Inferred type updated to byte in (unumber~) init_dist_screen::$7 ← (byte~) init_dist_screen::$6
Inferred type updated to byte in (unumber~) init_dist_screen::$4 ← (byte) $18 - (byte) init_dist_screen::y2#2
Inferred type updated to byte in (unumber~) init_dist_screen::$5 ← (byte~) init_dist_screen::$4
Inferred type updated to byte for (unumber~) init_dist_screen::$8
Inferred type updated to byte in (unumber~) init_dist_screen::$11 ← (byte) init_dist_screen::x#3 * (byte) 2
Inferred type updated to byte in (unumber~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#1 - (byte) $27
Inferred type updated to byte in (unumber~) init_dist_screen::$16 ← (byte~) init_dist_screen::$15
Inferred type updated to byte in (unumber~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#2
Inferred type updated to byte in (unumber~) init_dist_screen::$14 ← (byte~) init_dist_screen::$13
Inferred type updated to byte for (unumber~) init_dist_screen::$17
Inversing boolean not [24] (bool~) bsearch16u::$12 ← (signed word) bsearch16u::result#0 != (signed byte) 0 from [23] (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#0 == (signed byte) 0
Inversing boolean not [31] (bool~) bsearch16u::$14 ← (signed word) bsearch16u::result#1 <= (signed byte) 0 from [30] (bool~) bsearch16u::$13 ← (signed word) bsearch16u::result#1 > (signed byte) 0
Inversing boolean not [128] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [127] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0
Inversing boolean not [137] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [136] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0
Inversing boolean not [148] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [147] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4
Inversing boolean not [172] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [171] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0
Inversing boolean not [248] (bool~) main::$6 ← (byte) main::bucket_size#0 <= (byte) 0 from [247] (bool~) main::$5 ← (byte) main::bucket_size#0 > (byte) 0
Inversing boolean not [253] (bool~) main::$19 ← (byte) main::bucket_idx#1 != (const byte) NUM_BUCKETS from [252] (bool~) main::$18 ← (byte) main::bucket_idx#1 == (const byte) NUM_BUCKETS
Inversing boolean not [268] (bool~) main::$10 ← *((byte*) main::fill#0) == (const byte) FILL_CHAR from [267] (bool~) main::$9 ← *((byte*) main::fill#0) != (const byte) FILL_CHAR
Inversing boolean not [272] (bool~) main::$15 ← (word) main::min_offset#2 == (word) $ffff from [271] (bool~) main::$14 ← (word) main::min_offset#2 != (word) $ffff
Inversing boolean not [280] (bool~) main::$13 ← *((byte*) main::angle#0) > (byte) main::min_angle#2 from [279] (bool~) main::$12 ← *((byte*) main::angle#0) <= (byte) main::min_angle#2
Successful SSA optimization Pass2UnaryNotSimplification
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 (byte*) heap_head#0 = (byte*) heap_head#47 (byte*) heap_head#35 
Alias (word) malloc::size#0 = (byte~) init_squares::$0 
Alias (void*) malloc::return#10 = (void*) malloc::return#2 
Alias (byte) NUM_SQUARES#14 = (byte) NUM_SQUARES#6 
Alias (byte*) heap_head#20 = (byte*) heap_head#3 
Alias (word) init_squares::sqr#2 = (word) init_squares::sqr#3 
Alias (word*) init_squares::squares#2 = (word*) init_squares::squares#3 
Alias (byte) init_squares::i#2 = (byte) init_squares::i#3 
Alias (byte) NUM_SQUARES#13 = (byte) NUM_SQUARES#7 
Alias (byte*) heap_head#21 = (byte*) heap_head#46 (byte*) heap_head#38 (byte*) heap_head#4 
Alias (word*) SQUARES#17 = (word*) SQUARES#26 (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 (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 (byte) NUM_SQUARES#0 = (byte) NUM_SQUARES#50 (byte) NUM_SQUARES#46 (byte) NUM_SQUARES#41 (byte) NUM_SQUARES#35 (byte) NUM_SQUARES#26 (byte) NUM_SQUARES#25 (byte) NUM_SQUARES#19 
Alias (word*) SQUARES#0 = (word*) SQUARES#55 (word*) SQUARES#52 (word*) SQUARES#49 (word*) SQUARES#45 (word*) SQUARES#36 (word*) SQUARES#35 (word*) SQUARES#25 
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*) SCREEN_DIST#0 = (byte*) SCREEN_DIST#8 (byte*) SCREEN_DIST#7 (byte*) SCREEN_DIST#6 (byte*) SCREEN_DIST#5 (byte*) SCREEN_DIST#3 
Alias (byte*) heap_head#23 = (byte*) heap_head#6 
Alias (void*) malloc::return#13 = (void*) malloc::return#5 
Alias (byte*) SCREEN_ANGLE#0 = (byte*) SCREEN_ANGLE#13 (byte*) SCREEN_ANGLE#10 (byte*) SCREEN_ANGLE#9 (byte*) SCREEN_ANGLE#5 
Alias (byte*) heap_head#24 = (byte*) heap_head#7 
Alias (void*) malloc::return#14 = (void*) malloc::return#6 
Alias (byte*) BUCKET_SIZES#0 = (byte*) BUCKET_SIZES#24 (byte*) BUCKET_SIZES#23 (byte*) BUCKET_SIZES#19 
Alias (byte*) heap_head#25 = (byte*) heap_head#8 
Alias (void*) malloc::return#15 = (void*) malloc::return#7 
Alias (word**) BUCKETS#0 = (word**) BUCKETS#30 (word**) BUCKETS#26 
Alias (byte*) heap_head#26 = (byte*) heap_head#9 (byte*) heap_head#45 
Alias (byte*) SCREEN_ANGLE#1 = (byte*) SCREEN_ANGLE#3 (byte*) SCREEN_ANGLE#19 (byte*) SCREEN_ANGLE#18 
Alias (byte*) SCREEN_DIST#1 = (byte*) SCREEN_DIST#4 (byte*) SCREEN_DIST#2 
Alias (byte*) BUCKET_SIZES#11 = (byte*) BUCKET_SIZES#12 (byte*) BUCKET_SIZES#16 (byte*) BUCKET_SIZES#15 
Alias (word**) BUCKETS#12 = (word**) BUCKETS#19 (word**) BUCKETS#22 (word**) BUCKETS#15 
Alias (byte*) BUCKET_IDX#12 = (byte*) BUCKET_IDX#13 (byte*) BUCKET_IDX#14 
Alias (byte) NUM_SQUARES#1 = (byte) NUM_SQUARES#9 (byte) NUM_SQUARES#36 (byte) NUM_SQUARES#29 
Alias (byte*) heap_head#10 = (byte*) heap_head#27 (byte*) heap_head#40 
Alias (word*) SQUARES#12 = (word*) SQUARES#3 (word*) SQUARES#46 (word*) SQUARES#39 
Alias (byte*) heap_head#11 = (byte*) heap_head#28 
Alias (byte) main::bucket_idx#11 = (byte) main::bucket_idx#2 (byte) main::bucket_idx#4 
Alias (word**) BUCKETS#1 = (word**) BUCKETS#4 (word**) BUCKETS#24 
Alias (byte*) BUCKET_SIZES#1 = (byte*) BUCKET_SIZES#5 (byte*) BUCKET_SIZES#22 
Alias (byte) NUM_SQUARES#38 = (byte) NUM_SQUARES#42 (byte) NUM_SQUARES#48 
Alias (byte*) heap_head#62 = (byte*) heap_head#67 (byte*) heap_head#74 
Alias (word*) SQUARES#48 = (word*) SQUARES#50 (word*) SQUARES#54 
Alias (byte*) SCREEN_ANGLE#11 = (byte*) SCREEN_ANGLE#14 (byte*) SCREEN_ANGLE#8 
Alias (byte) main::bucket_size#0 = (byte) main::bucket_size#3 
Alias (word*) main::bucket#0 = (word*) main::bucket#4 
Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#5 (byte) main::i#6 
Alias (word*) main::bucket#1 = (word*) main::bucket#2 (word*) main::bucket#5 (word*) main::bucket#6 
Alias (byte*) SCREEN_ANGLE#12 = (byte*) SCREEN_ANGLE#4 (byte*) SCREEN_ANGLE#6 (byte*) SCREEN_ANGLE#20 (byte*) SCREEN_ANGLE#2 (byte*) SCREEN_ANGLE#16 
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#27 = (byte) NUM_SQUARES#53 (byte) NUM_SQUARES#43 (byte) NUM_SQUARES#37 (byte) NUM_SQUARES#51 (byte) NUM_SQUARES#52 
Alias (byte*) heap_head#54 = (byte*) heap_head#81 (byte*) heap_head#68 (byte*) heap_head#61 (byte*) heap_head#79 (byte*) heap_head#80 
Alias (word*) SQUARES#37 = (word*) SQUARES#58 (word*) SQUARES#51 (word*) SQUARES#47 (word*) SQUARES#56 (word*) SQUARES#57 
Alias (word**) BUCKETS#10 = (word**) BUCKETS#29 (word**) BUCKETS#20 (word**) BUCKETS#16 (word**) BUCKETS#27 (word**) BUCKETS#28 
Alias (byte*) BUCKET_SIZES#13 = (byte*) BUCKET_SIZES#27 (byte*) BUCKET_SIZES#20 (byte*) BUCKET_SIZES#17 (byte*) BUCKET_SIZES#25 (byte*) BUCKET_SIZES#26 
Alias (byte*) main::fill#0 = (byte*~) main::$8 
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::$11 (byte*) main::angle#1 
Alias (byte*) main::fill1#0 = (byte*~) main::$16 
Alias (byte) main::bucket_idx#1 = (byte) main::bucket_idx#9 
Alias (word**) BUCKETS#11 = (word**) BUCKETS#17 
Alias (byte*) BUCKET_SIZES#14 = (byte*) BUCKET_SIZES#18 
Alias (byte) NUM_SQUARES#21 = (byte) NUM_SQUARES#28 (byte) NUM_SQUARES#30 
Alias (byte*) heap_head#49 = (byte*) heap_head#55 (byte*) heap_head#56 
Alias (word*) SQUARES#28 = (word*) SQUARES#38 (word*) SQUARES#40 
Alias (byte*) SCREEN_ANGLE#17 = (byte*) SCREEN_ANGLE#21 
Alias (byte) NUM_SQUARES#10 = (byte) NUM_SQUARES#22 (byte) NUM_SQUARES#17 (byte) NUM_SQUARES#2 
Alias (byte*) heap_head#12 = (byte*) heap_head#50 (byte*) heap_head#41 (byte*) heap_head#29 
Alias (word*) SQUARES#13 = (word*) SQUARES#29 (word*) SQUARES#22 (word*) SQUARES#4 
Alias (byte*) init_buckets::screen#1 = (byte*) init_buckets::screen#4 (byte*) init_buckets::dist#0 
Alias (byte*) BUCKET_SIZES#2 = (byte*) BUCKET_SIZES#7 
Alias (byte*) heap_head#63 = (byte*) heap_head#69 
Alias (word**) BUCKETS#18 = (word**) BUCKETS#21 
Alias (byte*) BUCKET_IDX#10 = (byte*) BUCKET_IDX#9 
Alias (byte*) BUCKET_SIZES#3 = (byte*) BUCKET_SIZES#9 
Alias (byte*) heap_head#51 = (byte*) heap_head#57 
Alias (word**) BUCKETS#13 = (word**) BUCKETS#8 
Alias (byte*) BUCKET_IDX#7 = (byte*) BUCKET_IDX#8 
Alias (byte*) init_buckets::screen#10 = (byte*) init_buckets::screen#11 
Alias (word) malloc::size#6 = (byte~) init_buckets::$3 
Alias (void*) malloc::return#16 = (void*) malloc::return#8 
Alias (word) init_buckets::i2#2 = (word) init_buckets::i2#3 
Alias (word**) BUCKETS#14 = (word**) BUCKETS#2 (word**) BUCKETS#5 
Alias (byte*) BUCKET_SIZES#4 = (byte*) BUCKET_SIZES#8 
Alias (byte*) BUCKET_IDX#3 = (byte*) BUCKET_IDX#5 (byte*) BUCKET_IDX#6 
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#64 
Alias (byte*) init_buckets::screen#2 = (byte*) init_buckets::screen#5 (byte*) init_buckets::dist#2 
Alias (word**) BUCKETS#6 = (word**) BUCKETS#9 
Alias (byte*) BUCKET_IDX#1 = (byte*) BUCKET_IDX#4 
Alias (byte*) heap_head#52 = (byte*) heap_head#58 
Alias (byte*) heap_head#14 = (byte*) heap_head#31 (byte*) heap_head#42 
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#54 
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#30 = (word*) SQUARES#41 (word*) SQUARES#31 
Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#14 (byte*) init_dist_screen::screen_topline#12 
Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#14 (byte*) init_dist_screen::screen_bottomline#12 
Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#9 (byte) init_dist_screen::y#2 
Alias (byte) NUM_SQUARES#44 = (byte) NUM_SQUARES#49 (byte) NUM_SQUARES#45 
Alias (byte*) heap_head#70 = (byte*) heap_head#76 (byte*) heap_head#71 
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#31 = (byte) NUM_SQUARES#39 
Alias (byte*) heap_head#59 = (byte*) heap_head#65 
Alias (word*) SQUARES#19 = (word*) SQUARES#42 
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#44 (word*) SQUARES#32 (word*) SQUARES#24 (word*) SQUARES#33 (word*) SQUARES#34 (word*) SQUARES#6 
Alias (word) init_dist_screen::yds#3 = (word) init_dist_screen::yds#5 (word) init_dist_screen::yds#6 (word) init_dist_screen::yds#4 
Alias (byte) NUM_SQUARES#11 = (byte) NUM_SQUARES#40 (byte) NUM_SQUARES#23 (byte) NUM_SQUARES#18 (byte) NUM_SQUARES#33 (byte) NUM_SQUARES#34 (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#82 (byte*) heap_head#53 (byte*) heap_head#44 (byte*) heap_head#77 (byte*) heap_head#78 (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#43 
Alias (byte) NUM_SQUARES#15 = (byte) NUM_SQUARES#24 (byte) NUM_SQUARES#32 
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#60 = (byte*) heap_head#66 (byte*) heap_head#72 
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*) BUCKET_IDX#0 = (byte*) BUCKET_IDX#15 
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 (word*) main::bucket#1 = (word*) main::bucket#3 
Alias (byte*) SCREEN_ANGLE#12 = (byte*) SCREEN_ANGLE#7 
Alias (byte) main::bucket_idx#10 = (byte) main::bucket_idx#12 
Alias (byte) NUM_SQUARES#27 = (byte) NUM_SQUARES#47 
Alias (byte*) heap_head#54 = (byte*) heap_head#73 
Alias (word*) SQUARES#37 = (word*) SQUARES#53 
Alias (word**) BUCKETS#10 = (word**) BUCKETS#23 
Alias (byte*) BUCKET_SIZES#13 = (byte*) BUCKET_SIZES#21 
Alias (word*) SQUARES#19 = (word*) SQUARES#30 
Alias (byte*) init_dist_screen::screen_topline#11 = (byte*) init_dist_screen::screen_topline#6 
Alias (byte*) init_dist_screen::screen_bottomline#11 = (byte*) init_dist_screen::screen_bottomline#6 
Alias (byte) init_dist_screen::y#10 = (byte) init_dist_screen::y#5 
Alias (byte) NUM_SQUARES#31 = (byte) NUM_SQUARES#44 
Alias (byte*) heap_head#59 = (byte*) heap_head#70 
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#15 
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#60 
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#14 (byte) NUM_SQUARES#3
Identical Phi Values (byte*) heap_head#37 (byte*) heap_head#43
Identical Phi Values (byte*) heap_head#20 (byte*) heap_head#1
Identical Phi Values (byte) NUM_SQUARES#13 (byte) NUM_SQUARES#14
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*) heap_head#24 (byte*) heap_head#1
Identical Phi Values (byte*) heap_head#25 (byte*) heap_head#1
Identical Phi Values (byte*) heap_head#26 (byte*) heap_head#1
Identical Phi Values (byte*) SCREEN_DIST#1 (byte*) SCREEN_DIST#0
Identical Phi Values (byte) NUM_SQUARES#16 (byte) NUM_SQUARES#0
Identical Phi Values (byte*) heap_head#39 (byte*) heap_head#26
Identical Phi Values (word*) SQUARES#21 (word*) SQUARES#0
Identical Phi Values (byte*) SCREEN_ANGLE#1 (byte*) SCREEN_ANGLE#0
Identical Phi Values (byte*) BUCKET_SIZES#11 (byte*) BUCKET_SIZES#0
Identical Phi Values (word**) BUCKETS#12 (word**) BUCKETS#0
Identical Phi Values (byte*) BUCKET_IDX#12 (byte*) BUCKET_IDX#0
Identical Phi Values (byte) NUM_SQUARES#1 (byte) NUM_SQUARES#11
Identical Phi Values (byte*) heap_head#10 (byte*) heap_head#16
Identical Phi Values (word*) SQUARES#12 (word*) SQUARES#15
Identical Phi Values (byte*) heap_head#11 (byte*) heap_head#14
Identical Phi Values (byte) main::bucket_idx#11 (byte) main::bucket_idx#6
Identical Phi Values (word**) BUCKETS#1 (word**) BUCKETS#7
Identical Phi Values (byte*) BUCKET_SIZES#1 (byte*) BUCKET_SIZES#10
Identical Phi Values (byte) NUM_SQUARES#38 (byte) NUM_SQUARES#20
Identical Phi Values (byte*) heap_head#62 (byte*) heap_head#48
Identical Phi Values (word*) SQUARES#48 (word*) SQUARES#27
Identical Phi Values (byte*) SCREEN_ANGLE#11 (byte*) SCREEN_ANGLE#15
Identical Phi Values (byte) main::bucket_size#1 (byte) main::bucket_size#0
Identical Phi Values (word*) main::bucket#1 (word*) main::bucket#0
Identical Phi Values (byte*) SCREEN_ANGLE#12 (byte*) SCREEN_ANGLE#11
Identical Phi Values (byte) main::bucket_idx#10 (byte) main::bucket_idx#11
Identical Phi Values (byte) NUM_SQUARES#27 (byte) NUM_SQUARES#38
Identical Phi Values (byte*) heap_head#54 (byte*) heap_head#62
Identical Phi Values (word*) SQUARES#37 (word*) SQUARES#48
Identical Phi Values (word**) BUCKETS#10 (word**) BUCKETS#1
Identical Phi Values (byte*) BUCKET_SIZES#13 (byte*) BUCKET_SIZES#1
Identical Phi Values (byte*) BUCKET_SIZES#6 (byte*) BUCKET_SIZES#11
Identical Phi Values (byte*) init_buckets::screen#6 (byte*) init_buckets::screen#0
Identical Phi Values (byte*) heap_head#75 (byte*) heap_head#10
Identical Phi Values (word**) BUCKETS#25 (word**) BUCKETS#12
Identical Phi Values (byte*) BUCKET_IDX#11 (byte*) BUCKET_IDX#12
Identical Phi Values (byte*) BUCKET_SIZES#2 (byte*) BUCKET_SIZES#6
Identical Phi Values (byte*) init_buckets::screen#1 (byte*) init_buckets::screen#6
Identical Phi Values (byte*) heap_head#63 (byte*) heap_head#75
Identical Phi Values (word**) BUCKETS#18 (word**) BUCKETS#25
Identical Phi Values (byte*) BUCKET_IDX#10 (byte*) BUCKET_IDX#11
Identical Phi Values (byte*) BUCKET_SIZES#3 (byte*) BUCKET_SIZES#2
Identical Phi Values (byte*) heap_head#51 (byte*) heap_head#63
Identical Phi Values (word**) BUCKETS#13 (word**) BUCKETS#18
Identical Phi Values (byte*) BUCKET_IDX#7 (byte*) BUCKET_IDX#10
Identical Phi Values (byte*) init_buckets::screen#10 (byte*) init_buckets::screen#1
Identical Phi Values (byte*) BUCKET_SIZES#4 (byte*) BUCKET_SIZES#3
Identical Phi Values (word**) BUCKETS#14 (word**) BUCKETS#13
Identical Phi Values (byte*) BUCKET_IDX#3 (byte*) BUCKET_IDX#7
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*) BUCKET_IDX#1 (byte*) BUCKET_IDX#3
Identical Phi Values (byte*) init_buckets::screen#2 (byte*) init_buckets::screen#7
Identical Phi Values (word**) BUCKETS#6 (word**) BUCKETS#14
Identical Phi Values (byte*) heap_head#52 (byte*) heap_head#13
Identical Phi Values (word**) BUCKETS#3 (word**) BUCKETS#6
Identical Phi Values (byte*) init_buckets::screen#3 (byte*) init_buckets::screen#2
Identical Phi Values (byte*) BUCKET_IDX#2 (byte*) BUCKET_IDX#1
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#43 (byte*) heap_head#39
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#31
Identical Phi Values (byte*) heap_head#16 (byte*) heap_head#59
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#12
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#21 (byte) NUM_SQUARES#20
Identical Phi Values (byte*) heap_head#49 (byte*) heap_head#48
Identical Phi Values (word*) SQUARES#28 (word*) SQUARES#27
Identical Phi Values (word**) BUCKETS#11 (word**) BUCKETS#7
Identical Phi Values (byte*) BUCKET_SIZES#14 (byte*) BUCKET_SIZES#10
Identical Phi Values (byte*) SCREEN_ANGLE#17 (byte*) SCREEN_ANGLE#15
Identical Phi Values (word*) SQUARES#19 (word*) SQUARES#1
Identical Phi Values (byte) NUM_SQUARES#31 (byte) NUM_SQUARES#3
Identical Phi Values (byte*) heap_head#59 (byte*) heap_head#1
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (word**) BUCKETS#7 (word**) BUCKETS#0
Identical Phi Values (byte*) BUCKET_SIZES#10 (byte*) BUCKET_SIZES#0
Identical Phi Values (byte) NUM_SQUARES#20 (byte) NUM_SQUARES#3
Identical Phi Values (byte*) heap_head#48 (byte*) heap_head#1
Identical Phi Values (word*) SQUARES#27 (word*) SQUARES#1
Identical Phi Values (byte*) SCREEN_ANGLE#15 (byte*) SCREEN_ANGLE#0
Identical Phi Values (byte) NUM_SQUARES#10 (byte) NUM_SQUARES#20
Identical Phi Values (byte*) heap_head#12 (byte*) heap_head#48
Identical Phi Values (word*) SQUARES#13 (word*) SQUARES#27
Identical Phi Values (byte*) heap_head#36 (byte*) heap_head#1
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) bsearch16u::$5 [9] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@7
Simple Condition (bool~) bsearch16u::$12 [17] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@9
Simple Condition (bool~) bsearch16u::$0 [19] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@1
Simple Condition (bool~) bsearch16u::$14 [21] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@10
Simple Condition (bool~) init_squares::$2 [46] if((byte) init_squares::i#2<(byte) NUM_SQUARES#3) goto init_squares::@2
Simple Condition (bool~) atan2_16::$0 [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1
Simple Condition (bool~) atan2_16::$5 [75] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4
Simple Condition (bool~) atan2_16::$17 [82] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@16
Simple Condition (bool~) atan2_16::$11 [86] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
Simple Condition (bool~) atan2_16::$18 [89] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@19
Simple Condition (bool~) atan2_16::$19 [94] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@25
Simple Condition (bool~) atan2_16::$20 [97] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@26
Simple Condition (bool~) atan2_16::$21 [111] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@15
Simple Condition (bool~) atan2_16::$14 [114] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
Simple Condition (bool~) main::$3 [164] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@4
Simple Condition (bool~) main::$6 [170] if((byte) main::bucket_size#0<=(byte) 0) goto main::@7
Simple Condition (bool~) main::$19 [174] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@21
Simple Condition (bool~) main::$7 [180] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@9
Simple Condition (bool~) main::$10 [185] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@11
Simple Condition (bool~) main::$15 [187] if((word) main::min_offset#2==(word) $ffff) goto main::@7
Simple Condition (bool~) main::$13 [192] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@11
Simple Condition (bool~) init_buckets::$0 [209] if((byte) init_buckets::i#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@1
Simple Condition (bool~) init_buckets::$2 [216] if((word) init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3
Simple Condition (bool~) init_buckets::$5 [228] if((word) init_buckets::i2#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@5
Simple Condition (bool~) init_buckets::$6 [234] if((byte) init_buckets::i3#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@7
Simple Condition (bool~) init_buckets::$11 [248] if((word) init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9
Simple Condition (bool~) init_angle_screen::$2 [259] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Simple Condition (bool~) init_angle_screen::$16 [287] if((byte) init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
Simple Condition (bool~) init_dist_screen::$3 [298] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
Simple Condition (bool~) init_dist_screen::$10 [310] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6
Simple Condition (bool~) init_dist_screen::$12 [313] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8
Simple Condition (bool~) init_dist_screen::$21 [318] if((byte) init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [111] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [26] (byte~) bsearch16u::$17 ← (byte) 1 * (const byte) SIZEOF_WORD
Constant right-side identified [29] (byte~) bsearch16u::$18 ← (byte) 1 * (const byte) SIZEOF_WORD
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) heap_head#0 = HEAP_TOP
Constant (const byte) bsearch16u::$17 = 1*SIZEOF_WORD
Constant (const byte) bsearch16u::$18 = 1*SIZEOF_WORD
Constant (const byte) NUM_SQUARES#0 = $ff
Constant (const word*) SQUARES#0 = (word*) 0
Constant (const word) init_squares::sqr#0 = 0
Constant (const byte) init_squares::i#0 = 0
Constant (const word) 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 word) malloc::size#3 = NUM_BUCKETS*SIZEOF_BYTE
Constant (const word) malloc::size#4 = NUM_BUCKETS*SIZEOF_POINTER
Constant (const word) malloc::size#5 = NUM_BUCKETS*SIZEOF_BYTE
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) 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 [161] if(true) goto main::@4
if() condition always true - replacing block destination [200] if(true) goto main::@29
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [109] atan2_16::i#1 ← ++ atan2_16::i#2 to ++
Resolved ranged comparison value [111] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@17 to (const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1
Resolved ranged next value [207] init_buckets::i#1 ← ++ init_buckets::i#2 to ++
Resolved ranged comparison value [209] if(init_buckets::i#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@1 to (const byte) NUM_BUCKETS-(byte) 1+(number) 1
Resolved ranged next value [214] init_buckets::i1#1 ← ++ init_buckets::i1#2 to ++
Resolved ranged comparison value [216] if(init_buckets::i1#1!=rangelast(0,$3e7)) goto init_buckets::@3 to (number) $3e8
Resolved ranged next value [226] init_buckets::i2#1 ← ++ init_buckets::i2#2 to ++
Resolved ranged comparison value [228] if(init_buckets::i2#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@5 to (const byte) NUM_BUCKETS-(byte) 1+(number) 1
Resolved ranged next value [232] init_buckets::i3#1 ← ++ init_buckets::i3#2 to ++
Resolved ranged comparison value [234] if(init_buckets::i3#1!=rangelast(0,NUM_BUCKETS-1)) goto init_buckets::@7 to (const byte) NUM_BUCKETS-(byte) 1+(number) 1
Resolved ranged next value [246] init_buckets::i4#1 ← ++ init_buckets::i4#2 to ++
Resolved ranged comparison value [248] if(init_buckets::i4#1!=rangelast(0,$3e7)) goto init_buckets::@9 to (number) $3e8
Resolved ranged next value [285] init_angle_screen::y#1 ← ++ init_angle_screen::y#5 to ++
Resolved ranged comparison value [287] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to (number) $d
Resolved ranged next value [316] init_dist_screen::y#1 ← ++ init_dist_screen::y#10 to ++
Resolved ranged comparison value [318] if(init_dist_screen::y#1!=rangelast(0,$c)) goto init_dist_screen::@1 to (number) $d
Rewriting conditional comparison [259] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3
Rewriting conditional comparison [310] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6
De-inlining pointer[w] to *(pointer+w)   [219] (word) malloc::size#6 ← *((byte*) BUCKET_SIZES#0 + (word) init_buckets::i2#2) * (const byte) SIZEOF_POINTER
De-inlining pointer[w] to *(pointer+w)   [225] *((word**) BUCKETS#0 + (word~) init_buckets::$12) ← (word*)(void*~) init_buckets::$4
De-inlining pointer[w] to *(pointer+w)   [240] (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
Adding number conversion cast (unumber) CORDIC_ITERATIONS_16-1+1 in if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@17
Adding number conversion cast (unumber) 1 in if((byte) atan2_16::i#1==(unumber)(const byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1) goto atan2_16::@17
Adding number conversion cast (unumber) NUM_BUCKETS-1+1 in if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(number) 1) goto init_buckets::@1
Adding number conversion cast (unumber) 1 in if((byte) init_buckets::i#1!=(unumber)(const byte) NUM_BUCKETS-(byte) 1+(number) 1) goto init_buckets::@1
Adding number conversion cast (unumber) $3e8 in if((word) init_buckets::i1#1!=(number) $3e8) goto init_buckets::@3
Adding number conversion cast (unumber) NUM_BUCKETS-1+1 in if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(byte) 1+(number) 1) goto init_buckets::@5
Adding number conversion cast (unumber) 1 in if((word) init_buckets::i2#1!=(unumber)(const byte) NUM_BUCKETS-(byte) 1+(number) 1) goto init_buckets::@5
Adding number conversion cast (unumber) NUM_BUCKETS-1+1 in if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(number) 1) goto init_buckets::@7
Adding number conversion cast (unumber) 1 in if((byte) init_buckets::i3#1!=(unumber)(const byte) NUM_BUCKETS-(byte) 1+(number) 1) goto init_buckets::@7
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 (const byte) CORDIC_ITERATIONS_16-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) NUM_BUCKETS-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast $3e8
Simplifying constant integer cast (const byte) NUM_BUCKETS-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) NUM_BUCKETS-(byte) 1+(unumber)(number) 1
Simplifying constant integer cast 1
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 (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
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
Constant right-side identified [24] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) malloc::size#0 = NUM_SQUARES#3*SIZEOF_WORD
Successful SSA optimization Pass2ConstantIdentification
Inlining Noop Cast [3] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [10] (signed word~) bsearch16u::$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 [98] (void*) malloc::return#13 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [102] (void*) malloc::return#14 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [106] (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 [100] (byte*) BUCKET_SIZES#0 ← (byte*)(void*~) $2 keeping BUCKET_SIZES#0
Inlining Noop Cast [104] (word**) BUCKETS#0 ← (word**)(void*~) $3 keeping BUCKETS#0
Inlining Noop Cast [108] (byte*) BUCKET_IDX#0 ← (byte*)(void*~) $4 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 [33] (byte~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2
Rewriting multiplication to use shift [39] (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD
Rewriting division to use shift [48] (word~) sqrt::$1 ← (word~) sqrt::$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::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [78] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [119] (byte~) main::$23 ← (byte) main::bucket_idx#6 * (const byte) SIZEOF_POINTER
Rewriting multiplication to use shift [127] (byte~) main::$24 ← (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::$7 * (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#2 * (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#2 * (byte) 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const word) malloc::size#1
Inlining constant with var siblings (const word) malloc::size#2
Inlining constant with var siblings (const word) malloc::size#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 word) malloc::size#0
Inlining constant with var siblings (const byte) bsearch16u::num#2
Inlining constant with var siblings (const word) init_squares::sqr#0
Inlining constant with var siblings (const byte) init_squares::i#0
Inlining constant with var siblings (const word) atan2_16::angle#0
Inlining constant with var siblings (const byte) atan2_16::i#0
Inlining constant with var siblings (const byte) main::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
Inlining constant with var siblings (const byte*) heap_head#0
Constant inlined init_buckets::i1#0 = (word) 0
Constant inlined init_squares::sqr#0 = (word) 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 = (word) 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 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*(const byte) SIZEOF_BYTE
Constant inlined malloc::size#4 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER
Constant inlined malloc::size#3 = (const byte) NUM_BUCKETS*(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 malloc::size#1 = (word) $3e8
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 bsearch16u::$18 = (byte) 1*(const byte) SIZEOF_WORD
Constant inlined init_squares::i#0 = (byte) 0
Constant inlined heap_head#0 = (const byte*) HEAP_TOP
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting bsearch16u::@18(between bsearch16u::@9 and bsearch16u::@10)
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_dist_screen::@23(between init_dist_screen::@7 and init_dist_screen::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @9
Adding NOP phi() at start of @17
Adding NOP phi() at start of @22
Adding NOP phi() at start of @26
Adding NOP phi() at start of @32
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_dist_screen
CALL GRAPH
Calls in [] to malloc:4 malloc:7 malloc:10 malloc:13 malloc:16 main:19 
Calls in [main] to init_dist_screen:24 init_angle_screen:26 init_buckets:28 
Calls in [init_buckets] to malloc:87 
Calls in [init_angle_screen] to atan2_16:147 
Calls in [init_dist_screen] to init_squares:234 sqr:246 sqr:266 sqrt:271 
Calls in [sqrt] to bsearch16u:288 
Calls in [init_squares] to malloc:328 

Created 54 initial phi equivalence classes
Coalesced [6] heap_head#83 ← heap_head#1
Coalesced (already) [9] heap_head#84 ← heap_head#1
Coalesced (already) [12] heap_head#85 ← heap_head#1
Coalesced (already) [15] heap_head#86 ← heap_head#1
Coalesced (already) [44] main::bucket_idx#15 ← main::bucket_idx#6
Coalesced [51] main::bucket_idx#16 ← main::bucket_idx#1
Coalesced [59] main::min_offset#10 ← main::offset#0
Coalesced [60] main::min_angle#8 ← main::min_angle#1
Coalesced [63] main::i#7 ← main::i#1
Not coalescing [64] main::min_offset#8 ← main::min_offset#5
Coalesced [65] main::min_angle#6 ← main::min_angle#5
Not coalescing [66] main::min_offset#9 ← main::min_offset#2
Coalesced (already) [67] main::min_angle#7 ← main::min_angle#2
Not coalescing [68] main::min_offset#11 ← main::min_offset#2
Coalesced (already) [69] main::min_angle#9 ← main::min_angle#2
Not coalescing [75] init_buckets::dist#6 ← init_buckets::screen#0
Coalesced (already) [85] heap_head#87 ← heap_head#1
Coalesced [86] malloc::size#8 ← malloc::size#6
Not coalescing [99] init_buckets::dist#8 ← init_buckets::screen#0
Coalesced [114] init_buckets::dist#9 ← init_buckets::dist#3
Coalesced [115] init_buckets::i4#3 ← init_buckets::i4#1
Coalesced [116] init_buckets::i3#3 ← init_buckets::i3#1
Coalesced [117] init_buckets::i2#4 ← init_buckets::i2#1
Coalesced [118] init_buckets::dist#7 ← init_buckets::dist#1
Coalesced [119] init_buckets::i1#3 ← init_buckets::i1#1
Coalesced [120] init_buckets::i#3 ← init_buckets::i#1
Not coalescing [123] heap_head#1 ← malloc::mem#0
Coalesced [127] init_angle_screen::screen_topline#7 ← init_angle_screen::screen_topline#0
Coalesced [128] init_angle_screen::screen_bottomline#7 ← init_angle_screen::screen_bottomline#0
Coalesced [137] init_angle_screen::y#7 ← init_angle_screen::y#1
Coalesced [138] init_angle_screen::screen_topline#8 ← init_angle_screen::screen_topline#1
Coalesced [139] init_angle_screen::screen_bottomline#8 ← init_angle_screen::screen_bottomline#1
Coalesced [161] init_angle_screen::x#5 ← init_angle_screen::x#1
Coalesced [162] init_angle_screen::xb#5 ← init_angle_screen::xb#1
Coalesced [165] atan2_16::yi#17 ← atan2_16::$2
Coalesced [169] atan2_16::xi#14 ← atan2_16::$7
Coalesced [171] atan2_16::yi#19 ← atan2_16::yi#0
Coalesced [172] atan2_16::xi#16 ← atan2_16::xi#0
Coalesced [175] atan2_16::angle#22 ← atan2_16::angle#12
Coalesced [180] atan2_16::angle#27 ← atan2_16::angle#4
Coalesced [184] atan2_16::return#5 ← atan2_16::angle#5
Coalesced [187] atan2_16::return#6 ← atan2_16::angle#11
Coalesced [188] atan2_16::angle#26 ← atan2_16::angle#1
Not coalescing [189] atan2_16::shift#5 ← atan2_16::i#2
Not coalescing [190] atan2_16::xd#10 ← atan2_16::xi#3
Not coalescing [191] atan2_16::yd#10 ← atan2_16::yi#3
Coalesced [197] atan2_16::yd#13 ← atan2_16::yd#2
Coalesced [198] atan2_16::xd#13 ← atan2_16::xd#2
Coalesced [205] atan2_16::yi#21 ← atan2_16::yi#2
Coalesced [206] atan2_16::angle#25 ← atan2_16::angle#3
Coalesced [207] atan2_16::xi#18 ← atan2_16::xi#2
Coalesced [211] atan2_16::yi#18 ← atan2_16::yi#8
Coalesced [212] atan2_16::xi#15 ← atan2_16::xi#8
Coalesced [213] atan2_16::i#12 ← atan2_16::i#1
Coalesced [214] atan2_16::angle#21 ← atan2_16::angle#13
Coalesced (already) [215] atan2_16::angle#23 ← atan2_16::angle#13
Coalesced [220] atan2_16::yi#20 ← atan2_16::yi#1
Coalesced [221] atan2_16::angle#24 ← atan2_16::angle#2
Coalesced [222] atan2_16::xi#17 ← atan2_16::xi#1
Coalesced [223] atan2_16::yd#12 ← atan2_16::yd#3
Coalesced [224] atan2_16::xd#12 ← atan2_16::xd#3
Coalesced [228] atan2_16::shift#6 ← atan2_16::shift#1
Coalesced [229] atan2_16::xd#11 ← atan2_16::xd#1
Coalesced [230] atan2_16::yd#11 ← atan2_16::yd#1
Not coalescing [231] atan2_16::xi#13 ← atan2_16::x#0
Not coalescing [232] atan2_16::yi#16 ← atan2_16::y#0
Coalesced [236] init_dist_screen::screen_topline#15 ← init_dist_screen::screen#0
Coalesced [237] init_dist_screen::screen_bottomline#15 ← init_dist_screen::screen_bottomline#0
Coalesced [242] init_dist_screen::yd#2 ← init_dist_screen::$5
Coalesced [245] sqr::val#4 ← sqr::val#0
Coalesced [256] init_dist_screen::y#15 ← init_dist_screen::y#1
Coalesced [257] init_dist_screen::screen_topline#16 ← init_dist_screen::screen_topline#1
Coalesced [258] init_dist_screen::screen_bottomline#16 ← init_dist_screen::screen_bottomline#1
Coalesced [262] init_dist_screen::xd#2 ← init_dist_screen::$14
Coalesced [265] sqr::val#3 ← sqr::val#1
Coalesced [280] init_dist_screen::x#9 ← init_dist_screen::x#1
Coalesced [281] init_dist_screen::xb#9 ← init_dist_screen::xb#1
Coalesced [283] init_dist_screen::xd#1 ← init_dist_screen::$16
Coalesced [285] init_dist_screen::yd#1 ← init_dist_screen::$7
Coalesced [295] bsearch16u::items#10 ← bsearch16u::items#1
Coalesced [300] bsearch16u::return#9 ← bsearch16u::$2
Coalesced [302] bsearch16u::return#7 ← bsearch16u::return#2
Coalesced [305] bsearch16u::return#8 ← bsearch16u::items#2
Not coalescing [311] bsearch16u::return#6 ← bsearch16u::pivot#0
Coalesced [315] bsearch16u::num#10 ← bsearch16u::num#1
Coalesced [316] bsearch16u::items#12 ← bsearch16u::items#0
Coalesced [319] bsearch16u::num#9 ← bsearch16u::num#0
Coalesced [320] bsearch16u::items#11 ← bsearch16u::items#8
Coalesced [321] bsearch16u::num#11 ← bsearch16u::num#3
Coalesced (already) [322] bsearch16u::items#13 ← bsearch16u::items#2
Coalesced (already) [327] heap_head#88 ← heap_head#1
Coalesced [331] init_squares::squares#5 ← init_squares::squares#0
Coalesced [341] init_squares::i#4 ← init_squares::i#1
Coalesced [342] init_squares::sqr#4 ← init_squares::sqr#1
Coalesced [343] init_squares::squares#4 ← init_squares::squares#1
Coalesced down to 45 phi equivalence classes
Culled Empty Block (label) @9
Culled Empty Block (label) @17
Culled Empty Block (label) @32
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::@10
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::@23
Culled Empty Block (label) bsearch16u::@1
Culled Empty Block (label) bsearch16u::@18
Renumbering block @22 to @1
Renumbering block @26 to @2
Renumbering block @27 to @3
Renumbering block @28 to @4
Renumbering block @29 to @5
Renumbering block @30 to @6
Renumbering block @31 to @7
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::@13 to bsearch16u::@8
Renumbering block bsearch16u::@15 to bsearch16u::@9
Renumbering block init_squares::@7 to init_squares::@3
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 @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:@3
@3: scope:[]  from @1
  [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
  [4] call malloc 
  to:@4
@4: scope:[]  from @3
  [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0
  [6] call malloc 
  to:@5
@5: scope:[]  from @4
  [7] (void*) BUCKET_SIZES#0 ← (void*)(byte*) malloc::mem#0
  [8] call malloc 
  to:@6
@6: scope:[]  from @5
  [9] (void*) BUCKETS#0 ← (void*)(byte*) malloc::mem#0
  [10] call malloc 
  to:@7
@7: scope:[]  from @6
  [11] (void*) BUCKET_IDX#0 ← (void*)(byte*) malloc::mem#0
  to:@2
@2: scope:[]  from @7
  [12] phi()
  [13] call main 
  to:@end
@end: scope:[]  from @2
  [14] phi()

(void()) main()
main: scope:[main]  from @2
  asm { sei  }
  [16] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0
  [17] call init_dist_screen 
  to:main::@15
main::@15: scope:[main]  from main
  [18] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0
  [19] call init_angle_screen 
  to:main::@16
main::@16: scope:[main]  from main::@15
  [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0
  [21] call init_buckets 
  to:main::@1
main::@1: scope:[main]  from main::@11 main::@12 main::@16
  [22] (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
  [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2
  [24] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL)
  [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1
  [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23)
  [27] (byte) main::bucket_size#0 ← *((byte*)(void*) BUCKET_SIZES#0 + (byte) main::bucket_idx#6)
  [28] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4
  to:main::@5
main::@5: scope:[main]  from main::@3 main::@8
  [29] (byte) main::min_angle#2 ← phi( main::@8/(byte) main::min_angle#5 main::@3/(byte) $ff )
  [29] (word) main::min_offset#2 ← phi( main::@8/(word) main::min_offset#8 main::@3/(word) $ffff )
  [29] (byte) main::i#2 ← phi( main::@8/(byte) main::i#1 main::@3/(byte) 0 )
  [30] if((byte) main::i#2<(byte) main::bucket_size#0) goto main::@6
  to:main::@7
main::@7: scope:[main]  from main::@5
  [31] if((word) main::min_offset#2==(word) $ffff) goto main::@4
  to:main::@11
main::@11: scope:[main]  from main::@7
  [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2
  [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR
  [34] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL)
  to:main::@1
main::@4: scope:[main]  from main::@3 main::@7
  [35] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6
  [36] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12
  to:main::@13
main::@13: scope:[main]  from main::@4
  [37] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL)
  to:main::@14
main::@14: scope:[main]  from main::@13 main::@14
  [38] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7)
  to:main::@14
main::@12: scope:[main]  from main::@4
  [39] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL)
  to:main::@1
main::@6: scope:[main]  from main::@5
  [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1
  [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24)
  [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (word) main::offset#0
  [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18
  to:main::@9
main::@9: scope:[main]  from main::@6
  [44] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0 + (word) main::offset#0
  [45] if(*((byte*) main::angle#0)>(byte) main::min_angle#2) goto main::@17
  to:main::@10
main::@10: scope:[main]  from main::@9
  [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0)
  to:main::@8
main::@8: scope:[main]  from main::@10 main::@17 main::@18
  [47] (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 )
  [47] (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 )
  [48] (byte) main::i#1 ← ++ (byte) main::i#2
  [49] (word) main::min_offset#8 ← (word) main::min_offset#5
  to:main::@5
main::@17: scope:[main]  from main::@9
  [50] (word) main::min_offset#9 ← (word) main::min_offset#2
  to:main::@8
main::@18: scope:[main]  from main::@6
  [51] (word) main::min_offset#11 ← (word) main::min_offset#2
  to:main::@8

(void()) init_buckets((byte*) init_buckets::screen)
init_buckets: scope:[init_buckets]  from main::@16
  [52] phi()
  to:init_buckets::@1
init_buckets::@1: scope:[init_buckets]  from init_buckets init_buckets::@1
  [53] (byte) init_buckets::i#2 ← phi( init_buckets/(byte) 0 init_buckets::@1/(byte) init_buckets::i#1 )
  [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0
  [55] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2
  [56] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1
  to:init_buckets::@2
init_buckets::@2: scope:[init_buckets]  from init_buckets::@1
  [57] (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
  [58] (word) init_buckets::i1#2 ← phi( init_buckets::@2/(word) 0 init_buckets::@3/(word) init_buckets::i1#1 )
  [58] (byte*) init_buckets::dist#4 ← phi( init_buckets::@2/(byte*) init_buckets::dist#6 init_buckets::@3/(byte*) init_buckets::dist#1 )
  [59] *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4)) ← ++ *((byte*)(void*) BUCKET_SIZES#0 + *((byte*) init_buckets::dist#4))
  [60] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4
  [61] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2
  [62] 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
  [63] (word) init_buckets::i2#2 ← phi( init_buckets::@8/(word) init_buckets::i2#1 init_buckets::@3/(word) 0 )
  [64] (byte*~) init_buckets::$15 ← (byte*)(void*) BUCKET_SIZES#0 + (word) init_buckets::i2#2
  [65] (word) malloc::size#6 ← *((byte*~) init_buckets::$15) << (byte) 1
  [66] call malloc 
  to:init_buckets::@8
init_buckets::@8: scope:[init_buckets]  from init_buckets::@4
  [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0
  [68] (word~) init_buckets::$12 ← (word) init_buckets::i2#2 << (byte) 1
  [69] (word**~) init_buckets::$16 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$12
  [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4
  [71] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2
  [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(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
  [73] (byte) init_buckets::i3#2 ← phi( init_buckets::@8/(byte) 0 init_buckets::@5/(byte) init_buckets::i3#1 )
  [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0
  [75] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2
  [76] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5
  to:init_buckets::@6
init_buckets::@6: scope:[init_buckets]  from init_buckets::@5
  [77] (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
  [78] (word) init_buckets::i4#2 ← phi( init_buckets::@6/(word) 0 init_buckets::@7/(word) init_buckets::i4#1 )
  [78] (byte*) init_buckets::dist#5 ← phi( init_buckets::@6/(byte*) init_buckets::dist#8 init_buckets::@7/(byte*) init_buckets::dist#3 )
  [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5)
  [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0
  [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1
  [82] (word**~) init_buckets::$17 ← (word**)(void*) BUCKETS#0 + (word~) init_buckets::$13
  [83] (word*) init_buckets::bucket#0 ← *((word**~) init_buckets::$17)
  [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0
  [85] (byte~) init_buckets::$14 ← *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) << (byte) 1
  [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8
  [87] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0) ← ++ *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::distance#0)
  [88] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5
  [89] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2
  [90] 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
  [91] return 
  to:@return

(void*()) malloc((word) malloc::size)
malloc: scope:[malloc]  from @1 @3 @4 @5 @6 init_buckets::@4 init_squares
  [92] (word) malloc::size#7 ← phi( @1/(word) $3e8 @3/(word) $3e8 @4/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE @5/(const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER @6/(const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE init_buckets::@4/(word) malloc::size#6 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
  [92] (byte*) heap_head#18 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 @4/(byte*) heap_head#1 @5/(byte*) heap_head#1 @6/(byte*) heap_head#1 init_buckets::@4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 )
  [93] (byte*) malloc::mem#0 ← (byte*) heap_head#18 - (word) malloc::size#7
  [94] (byte*) heap_head#1 ← (byte*) malloc::mem#0
  to:malloc::@return
malloc::@return: scope:[malloc]  from malloc
  [95] return 
  to:@return

(void()) init_angle_screen((byte*) init_angle_screen::screen)
init_angle_screen: scope:[init_angle_screen]  from main::@15
  [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c
  [97] (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
  [98] (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 )
  [98] (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 )
  [98] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 )
  to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen]  from init_angle_screen::@1 init_angle_screen::@5
  [99] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 )
  [99] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 )
  [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3
  to:init_angle_screen::@4
init_angle_screen::@4: scope:[init_angle_screen]  from init_angle_screen::@2
  [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28
  [102] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28
  [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5
  [104] 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
  [105] return 
  to:@return
init_angle_screen::@3: scope:[init_angle_screen]  from init_angle_screen::@2
  [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1
  [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3
  [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0
  [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1
  [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0
  [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
  [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
  [113] call atan2_16 
  [114] (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
  [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
  [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80
  [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11
  [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0
  [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0
  [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13
  [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0
  [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14
  [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0
  [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15
  [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2
  [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2
  to:init_angle_screen::@2

(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
atan2_16: scope:[atan2_16]  from init_angle_screen::@3
  [127] 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
  [128] (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
  [129] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 )
  [130] 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
  [131] (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
  [132] (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
  [133] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(word) 0 )
  [133] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
  [133] (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 )
  [133] (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 )
  [134] 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
  [135] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 )
  [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
  [137] 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
  [138] (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
  [139] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 )
  [140] 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
  [141] (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
  [142] (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
  [143] return 
  to:@return
atan2_16::@11: scope:[atan2_16]  from atan2_16::@10
  [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2
  [145] (signed word) atan2_16::xd#10 ← (signed word) atan2_16::xi#3
  [146] (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
  [147] (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 )
  [147] (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 )
  [147] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 )
  [148] 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
  [149] 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
  [150] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1
  [151] (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
  [152] (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 )
  [152] (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 )
  [153] 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
  [154] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5
  [155] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5
  [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
  [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23)
  to:atan2_16::@19
atan2_16::@19: scope:[atan2_16]  from atan2_16::@18 atan2_16::@20
  [158] (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 )
  [158] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 )
  [158] (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 )
  [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
  [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12
  to:atan2_16::@10
atan2_16::@18: scope:[atan2_16]  from atan2_16::@17
  [161] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5
  [162] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5
  [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1
  [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22)
  to:atan2_16::@19
atan2_16::@14: scope:[atan2_16]  from atan2_16::@13
  [165] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2
  [166] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2
  [167] (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
  [168] (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
  [169] (signed word) atan2_16::yi#16 ← (signed word) atan2_16::y#0
  to:atan2_16::@3

(void()) init_dist_screen((byte*) init_dist_screen::screen)
init_dist_screen: scope:[init_dist_screen]  from main
  [170] phi()
  [171] call init_squares 
  to:init_dist_screen::@11
init_dist_screen::@11: scope:[init_dist_screen]  from init_dist_screen
  [172] (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
  [173] (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 )
  [173] (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 )
  [173] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 )
  [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
  [175] 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
  [176] (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
  [177] (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 )
  [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
  [179] call sqr 
  [180] (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
  [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
  to:init_dist_screen::@5
init_dist_screen::@5: scope:[init_dist_screen]  from init_dist_screen::@12 init_dist_screen::@14
  [182] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 )
  [182] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 )
  [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6
  to:init_dist_screen::@7
init_dist_screen::@7: scope:[init_dist_screen]  from init_dist_screen::@5
  [184] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28
  [185] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28
  [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
  [187] 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
  [188] return 
  to:@return
init_dist_screen::@6: scope:[init_dist_screen]  from init_dist_screen::@5
  [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
  [190] 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
  [191] (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
  [192] (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 )
  [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
  [194] call sqr 
  [195] (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
  [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
  [197] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
  [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
  [199] call sqrt 
  [200] (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
  [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
  [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
  [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
  [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
  [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
  [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
  to:init_dist_screen::@5
init_dist_screen::@8: scope:[init_dist_screen]  from init_dist_screen::@6
  [208] (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
  [209] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
  to:init_dist_screen::@4

(byte()) sqrt((word) sqrt::val)
sqrt: scope:[sqrt]  from init_dist_screen::@13
  [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0
  [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1
  [212] call bsearch16u 
  [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
  to:sqrt::@1
sqrt::@1: scope:[sqrt]  from sqrt
  [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
  [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1
  [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
  [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
  to:sqrt::@return
sqrt::@return: scope:[sqrt]  from sqrt::@1
  [218] return 
  to:@return

(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
bsearch16u: scope:[bsearch16u]  from sqrt
  [219] phi()
  to:bsearch16u::@3
bsearch16u::@3: scope:[bsearch16u]  from bsearch16u bsearch16u::@7
  [220] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
  [220] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 )
  [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
  to:bsearch16u::@5
bsearch16u::@5: scope:[bsearch16u]  from bsearch16u::@3
  [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
  to:bsearch16u::@1
bsearch16u::@1: scope:[bsearch16u]  from bsearch16u::@5
  [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD
  to:bsearch16u::@2
bsearch16u::@2: scope:[bsearch16u]  from bsearch16u::@1 bsearch16u::@5
  [224] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 )
  to:bsearch16u::@return
bsearch16u::@return: scope:[bsearch16u]  from bsearch16u::@2 bsearch16u::@8
  [225] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 )
  [226] return 
  to:@return
bsearch16u::@4: scope:[bsearch16u]  from bsearch16u::@3
  [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
  [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
  [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
  [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
  [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
  to:bsearch16u::@8
bsearch16u::@8: scope:[bsearch16u]  from bsearch16u::@4
  [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0
  to:bsearch16u::@return
bsearch16u::@6: scope:[bsearch16u]  from bsearch16u::@4
  [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
  to:bsearch16u::@9
bsearch16u::@9: scope:[bsearch16u]  from bsearch16u::@6
  [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
  [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
  to:bsearch16u::@7
bsearch16u::@7: scope:[bsearch16u]  from bsearch16u::@6 bsearch16u::@9
  [236] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
  [236] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
  [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
  to:bsearch16u::@3

(word()) sqr((byte) sqr::val)
sqr: scope:[sqr]  from init_dist_screen::@10 init_dist_screen::@4
  [238] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 )
  [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
  [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0)
  to:sqr::@return
sqr::@return: scope:[sqr]  from sqr
  [241] return 
  to:@return

(void()) init_squares()
init_squares: scope:[init_squares]  from init_dist_screen
  [242] phi()
  [243] call malloc 
  to:init_squares::@3
init_squares::@3: scope:[init_squares]  from init_squares
  [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
  [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1
  to:init_squares::@1
init_squares::@1: scope:[init_squares]  from init_squares::@2 init_squares::@3
  [246] (word*) init_squares::squares#2 ← phi( init_squares::@2/(word*) init_squares::squares#1 init_squares::@3/(word*) init_squares::squares#0 )
  [246] (word) init_squares::sqr#2 ← phi( init_squares::@2/(word) init_squares::sqr#1 init_squares::@3/(word) 0 )
  [246] (byte) init_squares::i#2 ← phi( init_squares::@2/(byte) init_squares::i#1 init_squares::@3/(byte) 0 )
  [247] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#3) goto init_squares::@2
  to:init_squares::@return
init_squares::@return: scope:[init_squares]  from init_squares::@1
  [248] return 
  to:@return
init_squares::@2: scope:[init_squares]  from init_squares::@1
  [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
  to:init_squares::@1

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
(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) NUM_SQUARES
(byte*) SCREEN_ANGLE
(void*) SCREEN_ANGLE#0 0.046511627906976744
(byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 0.13333333333333333
(word*) SQUARES
(void*) SQUARES#1 0.03225806451612903
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 4.0
(byte~) atan2_16::$22 2002.0
(byte~) atan2_16::$23 2002.0
(signed word~) atan2_16::$7 4.0
(word) atan2_16::angle
(word) atan2_16::angle#1 3.0
(word) atan2_16::angle#11 4.0
(word) atan2_16::angle#12 190.66666666666666
(word) atan2_16::angle#13 1334.6666666666667
(word) atan2_16::angle#2 2002.0
(word) atan2_16::angle#3 2002.0
(word) atan2_16::angle#4 4.0
(word) atan2_16::angle#5 4.0
(word) atan2_16::angle#6 2004.0
(byte) atan2_16::i
(byte) atan2_16::i#1 1501.5
(byte) atan2_16::i#2 208.54166666666669
(word) atan2_16::return
(word) atan2_16::return#0 34.99999999999999
(word) atan2_16::return#2 202.0
(byte) atan2_16::shift
(byte) atan2_16::shift#1 20002.0
(byte) atan2_16::shift#2 8001.25
(byte) atan2_16::shift#5 667.3333333333334
(signed word) atan2_16::x
(signed word) atan2_16::x#0 2.8684210526315796
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 6667.333333333333
(signed word) atan2_16::xd#10 1001.0
(signed word) atan2_16::xd#2 1001.0
(signed word) atan2_16::xd#3 7668.333333333332
(signed word) atan2_16::xd#5 1001.0
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 6.0
(signed word) atan2_16::xi#1 500.5
(signed word) atan2_16::xi#13 4.0
(signed word) atan2_16::xi#2 500.5
(signed word) atan2_16::xi#3 267.0666666666667
(signed word) atan2_16::xi#8 1001.0
(signed word) atan2_16::y
(signed word) atan2_16::y#0 2.724999999999999
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 10001.0
(signed word) atan2_16::yd#10 2002.0
(signed word) atan2_16::yd#2 2002.0
(signed word) atan2_16::yd#3 4601.0
(signed word) atan2_16::yd#5 2002.0
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 1.2000000000000002
(signed word) atan2_16::yi#1 667.3333333333334
(signed word) atan2_16::yi#16 4.0
(signed word) atan2_16::yi#2 667.3333333333334
(signed word) atan2_16::yi#3 353.4117647058823
(signed word) atan2_16::yi#8 1001.0
(word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num)
(byte~) bsearch16u::$16 2002.0
(word*~) bsearch16u::$2 4.0
(byte~) bsearch16u::$6 2002.0
(word*) bsearch16u::items
(word*) bsearch16u::items#0 1001.0
(word*) bsearch16u::items#1 2.0
(word*) bsearch16u::items#2 334.5555555555556
(word*) bsearch16u::items#8 1501.5
(word) bsearch16u::key
(word) bsearch16u::key#0 0.26666666666666666
(byte) bsearch16u::num
(byte) bsearch16u::num#0 2002.0
(byte) bsearch16u::num#1 2002.0
(byte) bsearch16u::num#3 556.1111111111111
(byte) bsearch16u::num#5 3003.0
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0 501.0
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0 1501.5
(word*) bsearch16u::return
(word*) bsearch16u::return#1 2.0
(word*) bsearch16u::return#2 6.0
(word*) bsearch16u::return#3 4.0
(word*) bsearch16u::return#6 4.0
(byte*) heap_head
(byte*) heap_head#1 0.24731182795698928
(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.04
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0 2.0
(byte*) init_angle_screen::screen_topline#1 5.5
(byte*) init_angle_screen::screen_topline#6 9.416666666666666
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 101.0
(byte) init_angle_screen::x#2 28.857142857142858
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 202.0
(byte) init_angle_screen::xb#2 18.363636363636363
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 33.666666666666664
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 16.5
(byte) init_angle_screen::y#5 4.730769230769231
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 50.5
(void()) init_buckets((byte*) init_buckets::screen)
(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::$4 3.6666666666666665
(word~) init_buckets::$7 22.0
(word~) init_buckets::$8 11.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#2 30.3
(byte) init_dist_screen::x2
(byte) init_dist_screen::x2#0 202.0
(byte) init_dist_screen::xb
(byte) init_dist_screen::xb#1 202.0
(byte) init_dist_screen::xb#2 19.238095238095237
(byte) init_dist_screen::xd
(byte) init_dist_screen::xd#0 303.0
(word) init_dist_screen::xds
(word) init_dist_screen::xds#0 202.0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#1 16.5
(byte) init_dist_screen::y#10 0.9705882352941178
(byte) init_dist_screen::y2
(byte) init_dist_screen::y2#0 22.0
(byte) init_dist_screen::yd
(byte) init_dist_screen::yd#0 33.0
(word) init_dist_screen::yds
(word) init_dist_screen::yds#0 4.869565217391305
(void()) init_squares()
(byte~) init_squares::$3 22.0
(byte~) init_squares::$4 22.0
(byte) init_squares::i
(byte) init_squares::i#1 22.0
(byte) init_squares::i#2 6.285714285714286
(word) init_squares::sqr
(word) init_squares::sqr#1 11.0
(word) init_squares::sqr#2 5.5
(word*) init_squares::squares
(word*) init_squares::squares#0 4.0
(word*) init_squares::squares#1 4.4
(word*) init_squares::squares#2 11.666666666666666
(void()) main()
(byte~) main::$23 22.0
(byte~) main::$24 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#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
[ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ]
[ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
[ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
[ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
[ init_dist_screen::y#10 init_dist_screen::y#1 ]
[ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
[ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
[ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
[ init_dist_screen::x#2 init_dist_screen::x#1 ]
[ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
[ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
[ sqr::val#2 sqr::val#1 sqr::val#0 ]
[ init_squares::i#2 init_squares::i#1 ]
[ init_squares::sqr#2 init_squares::sqr#1 ]
[ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
Added variable SCREEN_DIST#0 to live range equivalence class [ SCREEN_DIST#0 ]
Added variable SCREEN_ANGLE#0 to live range equivalence class [ SCREEN_ANGLE#0 ]
Added variable BUCKET_SIZES#0 to live range equivalence class [ BUCKET_SIZES#0 ]
Added variable BUCKETS#0 to live range equivalence class [ BUCKETS#0 ]
Added variable BUCKET_IDX#0 to live range equivalence class [ BUCKET_IDX#0 ]
Added variable init_angle_screen::screen#0 to live range equivalence class [ init_angle_screen::screen#0 ]
Added variable init_buckets::screen#0 to live range equivalence class [ init_buckets::screen#0 ]
Added variable main::$23 to live range equivalence class [ main::$23 ]
Added variable main::bucket#0 to live range equivalence class [ main::bucket#0 ]
Added variable main::bucket_size#0 to live range equivalence class [ main::bucket_size#0 ]
Added variable main::fill1#0 to live range equivalence class [ main::fill1#0 ]
Added variable main::$24 to live range equivalence class [ main::$24 ]
Added variable main::fill#0 to live range equivalence class [ main::fill#0 ]
Added variable main::angle#0 to live range equivalence class [ main::angle#0 ]
Added variable init_buckets::$15 to live range equivalence class [ init_buckets::$15 ]
Added variable init_buckets::$4 to live range equivalence class [ init_buckets::$4 ]
Added variable init_buckets::$12 to live range equivalence class [ init_buckets::$12 ]
Added variable init_buckets::$16 to live range equivalence class [ init_buckets::$16 ]
Added variable init_buckets::distance#0 to live range equivalence class [ init_buckets::distance#0 ]
Added variable init_buckets::$7 to live range equivalence class [ init_buckets::$7 ]
Added variable init_buckets::$13 to live range equivalence class [ init_buckets::$13 ]
Added variable init_buckets::$17 to live range equivalence class [ init_buckets::$17 ]
Added variable init_buckets::bucket#0 to live range equivalence class [ init_buckets::bucket#0 ]
Added variable init_buckets::$8 to live range equivalence class [ init_buckets::$8 ]
Added variable init_buckets::$14 to live range equivalence class [ init_buckets::$14 ]
Added variable malloc::mem#0 to live range equivalence class [ malloc::mem#0 ]
Added variable init_angle_screen::$3 to live range equivalence class [ init_angle_screen::$3 ]
Added variable init_angle_screen::$4 to live range equivalence class [ init_angle_screen::$4 ]
Added variable init_angle_screen::xw#0 to live range equivalence class [ init_angle_screen::xw#0 ]
Added variable init_angle_screen::$7 to live range equivalence class [ init_angle_screen::$7 ]
Added variable init_angle_screen::yw#0 to live range equivalence class [ init_angle_screen::yw#0 ]
Added variable atan2_16::x#0 to live range equivalence class [ atan2_16::x#0 ]
Added variable atan2_16::y#0 to live range equivalence class [ atan2_16::y#0 ]
Added variable atan2_16::return#2 to live range equivalence class [ atan2_16::return#2 ]
Added variable init_angle_screen::angle_w#0 to live range equivalence class [ init_angle_screen::angle_w#0 ]
Added variable init_angle_screen::$11 to live range equivalence class [ init_angle_screen::$11 ]
Added variable init_angle_screen::ang_w#0 to live range equivalence class [ init_angle_screen::ang_w#0 ]
Added variable init_angle_screen::$13 to live range equivalence class [ init_angle_screen::$13 ]
Added variable init_angle_screen::$14 to live range equivalence class [ init_angle_screen::$14 ]
Added variable init_angle_screen::$15 to live range equivalence class [ init_angle_screen::$15 ]
Added variable atan2_16::$23 to live range equivalence class [ atan2_16::$23 ]
Added variable atan2_16::$22 to live range equivalence class [ atan2_16::$22 ]
Added variable init_dist_screen::y2#0 to live range equivalence class [ init_dist_screen::y2#0 ]
Added variable sqr::return#2 to live range equivalence class [ sqr::return#2 ]
Added variable init_dist_screen::yds#0 to live range equivalence class [ init_dist_screen::yds#0 ]
Added variable init_dist_screen::x2#0 to live range equivalence class [ init_dist_screen::x2#0 ]
Added variable sqr::return#3 to live range equivalence class [ sqr::return#3 ]
Added variable init_dist_screen::xds#0 to live range equivalence class [ init_dist_screen::xds#0 ]
Added variable init_dist_screen::ds#0 to live range equivalence class [ init_dist_screen::ds#0 ]
Added variable sqrt::val#0 to live range equivalence class [ sqrt::val#0 ]
Added variable sqrt::return#2 to live range equivalence class [ sqrt::return#2 ]
Added variable init_dist_screen::d#0 to live range equivalence class [ init_dist_screen::d#0 ]
Added variable bsearch16u::key#0 to live range equivalence class [ bsearch16u::key#0 ]
Added variable bsearch16u::return#3 to live range equivalence class [ bsearch16u::return#3 ]
Added variable sqrt::found#0 to live range equivalence class [ sqrt::found#0 ]
Added variable sqrt::$3 to live range equivalence class [ sqrt::$3 ]
Added variable sqrt::$1 to live range equivalence class [ sqrt::$1 ]
Added variable sqrt::return#0 to live range equivalence class [ sqrt::return#0 ]
Added variable bsearch16u::$6 to live range equivalence class [ bsearch16u::$6 ]
Added variable bsearch16u::$16 to live range equivalence class [ bsearch16u::$16 ]
Added variable bsearch16u::pivot#0 to live range equivalence class [ bsearch16u::pivot#0 ]
Added variable bsearch16u::result#0 to live range equivalence class [ bsearch16u::result#0 ]
Added variable sqr::$0 to live range equivalence class [ sqr::$0 ]
Added variable sqr::return#0 to live range equivalence class [ sqr::return#0 ]
Added variable SQUARES#1 to live range equivalence class [ SQUARES#1 ]
Added variable init_squares::$3 to live range equivalence class [ init_squares::$3 ]
Added variable init_squares::$4 to live range equivalence class [ init_squares::$4 ]
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#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
[ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ]
[ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
[ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
[ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
[ init_dist_screen::y#10 init_dist_screen::y#1 ]
[ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
[ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
[ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
[ init_dist_screen::x#2 init_dist_screen::x#1 ]
[ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
[ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
[ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
[ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
[ sqr::val#2 sqr::val#1 sqr::val#0 ]
[ init_squares::i#2 init_squares::i#1 ]
[ init_squares::sqr#2 init_squares::sqr#1 ]
[ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
[ SCREEN_DIST#0 ]
[ SCREEN_ANGLE#0 ]
[ BUCKET_SIZES#0 ]
[ BUCKETS#0 ]
[ BUCKET_IDX#0 ]
[ init_angle_screen::screen#0 ]
[ init_buckets::screen#0 ]
[ main::$23 ]
[ main::bucket#0 ]
[ main::bucket_size#0 ]
[ main::fill1#0 ]
[ main::$24 ]
[ main::fill#0 ]
[ main::angle#0 ]
[ init_buckets::$15 ]
[ init_buckets::$4 ]
[ init_buckets::$12 ]
[ init_buckets::$16 ]
[ init_buckets::distance#0 ]
[ init_buckets::$7 ]
[ init_buckets::$13 ]
[ init_buckets::$17 ]
[ init_buckets::bucket#0 ]
[ init_buckets::$8 ]
[ 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::$23 ]
[ atan2_16::$22 ]
[ init_dist_screen::y2#0 ]
[ sqr::return#2 ]
[ init_dist_screen::yds#0 ]
[ init_dist_screen::x2#0 ]
[ sqr::return#3 ]
[ init_dist_screen::xds#0 ]
[ init_dist_screen::ds#0 ]
[ sqrt::val#0 ]
[ sqrt::return#2 ]
[ init_dist_screen::d#0 ]
[ bsearch16u::key#0 ]
[ bsearch16u::return#3 ]
[ sqrt::found#0 ]
[ sqrt::$3 ]
[ sqrt::$1 ]
[ sqrt::return#0 ]
[ bsearch16u::$6 ]
[ bsearch16u::$16 ]
[ bsearch16u::pivot#0 ]
[ bsearch16u::result#0 ]
[ sqr::$0 ]
[ sqr::return#0 ]
[ SQUARES#1 ]
[ init_squares::$3 ]
[ init_squares::$4 ]
Allocated zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
Allocated zp[1]:3 [ main::i#2 main::i#1 ]
Allocated zp[2]:4 [ main::min_offset#2 main::min_offset#8 ]
Allocated zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Allocated zp[2]:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ]
Allocated zp[1]:9 [ init_buckets::i#2 init_buckets::i#1 ]
Allocated zp[2]:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ]
Allocated zp[2]:12 [ init_buckets::i1#2 init_buckets::i1#1 ]
Allocated zp[2]:14 [ init_buckets::i2#2 init_buckets::i2#1 ]
Allocated zp[1]:16 [ init_buckets::i3#2 init_buckets::i3#1 ]
Allocated zp[2]:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
Allocated zp[2]:19 [ init_buckets::i4#2 init_buckets::i4#1 ]
Allocated zp[2]:21 [ heap_head#18 heap_head#1 ]
Allocated zp[2]:23 [ malloc::size#7 malloc::size#6 ]
Allocated zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Allocated zp[2]:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ]
Allocated zp[2]:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
Allocated zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Allocated zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Allocated zp[2]: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[2]: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[1]:36 [ atan2_16::i#2 atan2_16::i#1 ]
Allocated zp[2]:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
Allocated zp[2]:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ]
Allocated zp[1]:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Allocated zp[2]:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated zp[2]:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Allocated zp[2]:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ]
Allocated zp[2]:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ]
Allocated zp[1]:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Allocated zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Allocated zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Allocated zp[1]:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ]
Allocated zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ]
Allocated zp[1]:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Allocated zp[1]:58 [ sqr::val#2 sqr::val#1 sqr::val#0 ]
Allocated zp[1]:59 [ init_squares::i#2 init_squares::i#1 ]
Allocated zp[2]:60 [ init_squares::sqr#2 init_squares::sqr#1 ]
Allocated zp[2]:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ]
Allocated zp[2]:64 [ SCREEN_DIST#0 ]
Allocated zp[2]:66 [ SCREEN_ANGLE#0 ]
Allocated zp[2]:68 [ BUCKET_SIZES#0 ]
Allocated zp[2]:70 [ BUCKETS#0 ]
Allocated zp[2]:72 [ BUCKET_IDX#0 ]
Allocated zp[2]:74 [ init_angle_screen::screen#0 ]
Allocated zp[2]:76 [ init_buckets::screen#0 ]
Allocated zp[1]:78 [ main::$23 ]
Allocated zp[2]:79 [ main::bucket#0 ]
Allocated zp[1]:81 [ main::bucket_size#0 ]
Allocated zp[2]:82 [ main::fill1#0 ]
Allocated zp[1]:84 [ main::$24 ]
Allocated zp[2]:85 [ main::fill#0 ]
Allocated zp[2]:87 [ main::angle#0 ]
Allocated zp[2]:89 [ init_buckets::$15 ]
Allocated zp[2]:91 [ init_buckets::$4 ]
Allocated zp[2]:93 [ init_buckets::$12 ]
Allocated zp[2]:95 [ init_buckets::$16 ]
Allocated zp[1]:97 [ init_buckets::distance#0 ]
Allocated zp[2]:98 [ init_buckets::$7 ]
Allocated zp[2]:100 [ init_buckets::$13 ]
Allocated zp[2]:102 [ init_buckets::$17 ]
Allocated zp[2]:104 [ init_buckets::bucket#0 ]
Allocated zp[2]:106 [ init_buckets::$8 ]
Allocated zp[1]:108 [ init_buckets::$14 ]
Allocated zp[2]:109 [ malloc::mem#0 ]
Allocated zp[1]:111 [ init_angle_screen::$3 ]
Allocated zp[1]:112 [ init_angle_screen::$4 ]
Allocated zp[2]:113 [ init_angle_screen::xw#0 ]
Allocated zp[1]:115 [ init_angle_screen::$7 ]
Allocated zp[2]:116 [ init_angle_screen::yw#0 ]
Allocated zp[2]:118 [ atan2_16::x#0 ]
Allocated zp[2]:120 [ atan2_16::y#0 ]
Allocated zp[2]:122 [ atan2_16::return#2 ]
Allocated zp[2]:124 [ init_angle_screen::angle_w#0 ]
Allocated zp[2]:126 [ init_angle_screen::$11 ]
Allocated zp[1]:128 [ init_angle_screen::ang_w#0 ]
Allocated zp[1]:129 [ init_angle_screen::$13 ]
Allocated zp[1]:130 [ init_angle_screen::$14 ]
Allocated zp[1]:131 [ init_angle_screen::$15 ]
Allocated zp[1]:132 [ atan2_16::$23 ]
Allocated zp[1]:133 [ atan2_16::$22 ]
Allocated zp[1]:134 [ init_dist_screen::y2#0 ]
Allocated zp[2]:135 [ sqr::return#2 ]
Allocated zp[2]:137 [ init_dist_screen::yds#0 ]
Allocated zp[1]:139 [ init_dist_screen::x2#0 ]
Allocated zp[2]:140 [ sqr::return#3 ]
Allocated zp[2]:142 [ init_dist_screen::xds#0 ]
Allocated zp[2]:144 [ init_dist_screen::ds#0 ]
Allocated zp[2]:146 [ sqrt::val#0 ]
Allocated zp[1]:148 [ sqrt::return#2 ]
Allocated zp[1]:149 [ init_dist_screen::d#0 ]
Allocated zp[2]:150 [ bsearch16u::key#0 ]
Allocated zp[2]:152 [ bsearch16u::return#3 ]
Allocated zp[2]:154 [ sqrt::found#0 ]
Allocated zp[2]:156 [ sqrt::$3 ]
Allocated zp[2]:158 [ sqrt::$1 ]
Allocated zp[1]:160 [ sqrt::return#0 ]
Allocated zp[1]:161 [ bsearch16u::$6 ]
Allocated zp[1]:162 [ bsearch16u::$16 ]
Allocated zp[2]:163 [ bsearch16u::pivot#0 ]
Allocated zp[2]:165 [ bsearch16u::result#0 ]
Allocated zp[1]:167 [ sqr::$0 ]
Allocated zp[2]:168 [ sqr::return#0 ]
Allocated zp[2]:170 [ SQUARES#1 ]
Allocated zp[1]:172 [ init_squares::$3 ]
Allocated zp[1]:173 [ init_squares::$4 ]

INITIAL ASM
Target platform is c64basic / MOS6502X
  // 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
  .label RASTER = $d012
  .label BORDERCOL = $d020
  // Color Ram
  .label COLS = $d800
  .const SIZEOF_WORD = 2
  // The number of iterations performed during 16-bit CORDIC atan2 calculation
  .const CORDIC_ITERATIONS_16 = $f
  // Screen containing angle to center
  .label SCREEN_FILL = $400
  // Char to fill with
  .const FILL_CHAR = '*'
  // The number of buckets in our bucket sort
  .const NUM_BUCKETS = $30
  .const SIZEOF_BYTE = 1
  .const SIZEOF_POINTER = 2
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt()
  .const NUM_SQUARES = $30
  // Head of the heap. Moved backward each malloc()
  .label heap_head = $15
  // Squares for each byte value SQUARES[i] = i*i
  // Initialized by init_squares()
  .label SQUARES = $aa
  .label SCREEN_DIST = $40
  .label SCREEN_ANGLE = $42
  .label BUCKET_SIZES = $44
  .label BUCKETS = $46
  .label BUCKET_IDX = $48
  // @begin
__bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
__b1_from___bbegin:
  jmp __b1
  // @1
__b1:
  // [2] call malloc 
  // [92] phi from @1 to malloc [phi:@1->malloc]
malloc_from___b1:
  // [92] 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
  // [92] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  jmp __b3
  // @3
__b3:
  // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_DIST
  lda.z malloc.mem+1
  sta.z SCREEN_DIST+1
  // [4] call malloc 
  // [92] phi from @3 to malloc [phi:@3->malloc]
malloc_from___b3:
  // [92] phi (word) malloc::size#7 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy 
  jsr malloc
  jmp __b4
  // @4
__b4:
  // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_ANGLE
  lda.z malloc.mem+1
  sta.z SCREEN_ANGLE+1
  // [6] call malloc 
  // [92] phi from @4 to malloc [phi:@4->malloc]
malloc_from___b4:
  // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@4->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy 
  jsr malloc
  jmp __b5
  // @5
__b5:
  // [7] (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
  // [8] call malloc 
  // [92] phi from @5 to malloc [phi:@5->malloc]
malloc_from___b5:
  // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER [phi:@5->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@5->malloc#1] -- register_copy 
  jsr malloc
  jmp __b6
  // @6
__b6:
  // [9] (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
  // [10] call malloc 
  // [92] phi from @6 to malloc [phi:@6->malloc]
malloc_from___b6:
  // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@6->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy 
  jsr malloc
  jmp __b7
  // @7
__b7:
  // [11] (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
  // [12] phi from @7 to @2 [phi:@7->@2]
__b2_from___b7:
  jmp __b2
  // @2
__b2:
  // [13] call main 
  jsr main
  // [14] phi from @2 to @end [phi:@2->@end]
__bend_from___b2:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .label __23 = $4e
    .label __24 = $54
    .label bucket = $4f
    .label bucket_size = $51
    // Animate a spiral walking through the buckets one at a time
    .label bucket_idx = 2
    .label offset = 7
    .label fill = $55
    .label i = 3
    .label angle = $57
    // Find the minimum unfilled angle in the current bucket
    .label min_angle = 6
    .label fill1 = $52
    .label min_offset = 4
    .label min_offset_1 = 7
    // asm { sei  }
    sei
    // [16] (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
    // [17] call init_dist_screen 
    // [170] 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:
    // [18] (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
    // [19] call init_angle_screen 
    jsr init_angle_screen
    jmp __b16
    // main::@16
  __b16:
    // [20] (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
    // [21] call init_buckets 
    // [52] phi from main::@16 to init_buckets [phi:main::@16->init_buckets]
  init_buckets_from___b16:
    jsr init_buckets
    // [22] phi from main::@16 to main::@1 [phi:main::@16->main::@1]
  __b1_from___b16:
    // [22] 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:
    // [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne __b2
    jmp __b3
    // main::@3
  __b3:
    // [24] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
    // [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z bucket_idx
    asl
    sta.z __23
    // [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) -- pwuz1=pptz2_derefidx_vbuz3 
    ldy.z __23
    lda (BUCKETS),y
    sta.z bucket
    iny
    lda (BUCKETS),y
    sta.z bucket+1
    // [27] (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
    // [28] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
    lda.z bucket_size
    cmp #0
    beq __b4
    // [29] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
  __b5_from___b3:
    // [29] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z min_angle
    // [29] 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
    // [29] 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:
    // [30] 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:
    // [31] 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:
    // [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (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
    // [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 
    lda #FILL_CHAR
    ldy #0
    sta (fill1),y
    // [34] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // [22] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1]
  __b1_from___b11:
  __b1_from___b12:
    // [22] 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:
    // [35] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
    inc.z bucket_idx
    // [36] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BUCKETS
    cmp.z bucket_idx
    bne __b12
    jmp __b13
    // main::@13
  __b13:
    // [37] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp __b14
    // main::@14
  __b14:
    // [38] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp __b14
    // main::@12
  __b12:
    // [39] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp __b1_from___b12
    // main::@6
  __b6:
    // [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __24
    // [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) -- vwuz1=pwuz2_derefidx_vbuz3 
    ldy.z __24
    lda (bucket),y
    sta.z offset
    iny
    lda (bucket),y
    sta.z offset+1
    // [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (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
    // [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
    lda #FILL_CHAR
    ldy #0
    cmp (fill),y
    beq __b18
    jmp __b9
    // main::@9
  __b9:
    // [44] (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
    // [45] 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:
    // [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (angle),y
    sta.z min_angle
    // [47] 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:
    // [47] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy 
    // [47] 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:
    // [48] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [49] (word) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
    lda.z min_offset_1
    sta.z min_offset
    lda.z min_offset_1+1
    sta.z min_offset+1
    // [29] phi from main::@8 to main::@5 [phi:main::@8->main::@5]
  __b5_from___b8:
    // [29] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy 
    // [29] phi (word) main::min_offset#2 = (word) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy 
    // [29] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy 
    jmp __b5
    // main::@17
  __b17:
    // [50] (word) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_1
    lda.z min_offset+1
    sta.z min_offset_1+1
    jmp __b8_from___b17
    // main::@18
  __b18:
    // [51] (word) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_1
    lda.z min_offset+1
    sta.z min_offset_1+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* zp($4c) screen)
init_buckets: {
    .label __4 = $5b
    .label __7 = $62
    .label __8 = $6a
    .label __12 = $5d
    .label __13 = $64
    .label __14 = $6c
    .label screen = $4c
    .label i = 9
    .label dist = $a
    .label i1 = $c
    .label i2 = $e
    .label i3 = $10
    .label distance = $61
    .label bucket = $68
    .label dist_1 = $11
    .label i4 = $13
    .label __15 = $59
    .label __16 = $5f
    .label __17 = $66
    // [53] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
  __b1_from_init_buckets:
    // [53] 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
    // [53] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
  __b1_from___b1:
    // [53] 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:
    // [54] *((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
    // [55] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [56] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(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:
    // [57] (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
    // [58] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
  __b3_from___b2:
    // [58] 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
    // [58] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy 
    jmp __b3
    // [58] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
  __b3_from___b3:
    // [58] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy 
    // [58] 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:
    // [59] *((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
    // [60] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
    inc.z dist
    bne !+
    inc.z dist+1
  !:
    // [61] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
    inc.z i1
    bne !+
    inc.z i1+1
  !:
    // [62] 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
    // [63] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4]
  __b4_from___b3:
    // [63] 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
    // [63] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4]
  __b4_from___b8:
    // [63] 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:
    // [64] (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
    // [65] (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
    // [66] call malloc 
    // [92] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc]
  malloc_from___b4:
    // [92] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy 
    // [92] 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:
    // [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
    lda.z malloc.mem
    sta.z __4
    lda.z malloc.mem+1
    sta.z __4+1
    // [68] (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
    // [69] (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
    // [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 -- _deref_pptz1=pwuz2 
    ldy #0
    lda.z __4
    sta (__16),y
    iny
    lda.z __4+1
    sta (__16),y
    // [71] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
    inc.z i2
    bne !+
    inc.z i2+1
  !:
    // [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(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
    // [73] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5]
  __b5_from___b8:
    // [73] 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
    // [73] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
  __b5_from___b5:
    // [73] 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:
    // [74] *((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
    // [75] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuz1=_inc_vbuz1 
    inc.z i3
    // [76] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(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:
    // [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
    lda.z screen
    sta.z dist_1
    lda.z screen+1
    sta.z dist_1+1
    // [78] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7]
  __b7_from___b6:
    // [78] 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
    // [78] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy 
    jmp __b7
    // [78] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7]
  __b7_from___b7:
    // [78] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy 
    // [78] 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:
    // [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (dist_1),y
    sta.z distance
    // [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
    lda.z distance
    sta.z __7
    lda #0
    sta.z __7+1
    // [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 -- vwuz1=vwuz2_rol_1 
    lda.z __7
    asl
    sta.z __13
    lda.z __7+1
    rol
    sta.z __13+1
    // [82] (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
    // [83] (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
    // [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 
    lda.z dist_1
    sec
    sbc.z screen
    sta.z __8
    lda.z dist_1+1
    sbc.z screen+1
    sta.z __8+1
    // [85] (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
    // [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 -- pwuz1_derefidx_vbuz2=vwuz3 
    ldy.z __14
    lda.z __8
    sta (bucket),y
    iny
    lda.z __8+1
    sta (bucket),y
    // [87] *((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
    // [88] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
    inc.z dist_1
    bne !+
    inc.z dist_1+1
  !:
    // [89] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
    inc.z i4
    bne !+
    inc.z i4+1
  !:
    // [90] 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:
    // [91] 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 zp($17) size)
malloc: {
    .label mem = $6d
    .label size = $17
    // [93] (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
    // [94] (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:
    // [95] 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* zp($4a) screen)
init_angle_screen: {
    .label __3 = $6f
    .label __4 = $70
    .label __7 = $73
    .label __11 = $7e
    .label __13 = $81
    .label __14 = $82
    .label __15 = $83
    .label screen = $4a
    .label screen_topline = $1a
    .label screen_bottomline = $1c
    .label xw = $71
    .label yw = $74
    .label angle_w = $7c
    .label ang_w = $80
    .label x = $1e
    .label xb = $1f
    .label y = $19
    // [96] (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
    // [97] (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
    // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  __b1_from_init_angle_screen:
    // [98] 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 
    // [98] 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 
    // [98] 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
    // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  __b1_from___b4:
    // [98] 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 
    // [98] 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 
    // [98] 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:
    // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
  __b2_from___b1:
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b2
    // init_angle_screen::@2
  __b2:
    // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b3
    jmp __b4
    // init_angle_screen::@4
  __b4:
    // [101] (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
    // [102] (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
  !:
    // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [104] 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:
    // [105] return 
    rts
    // init_angle_screen::@3
  __b3:
    // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z x
    asl
    sta.z __3
    // [107] (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
    // [108] (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
    // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z y
    asl
    sta.z __7
    // [110] (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
    // [111] (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
    // [112] (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
    // [113] call atan2_16 
    jsr atan2_16
    // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 -- vwuz1=vwuz2 
    lda.z atan2_16.return
    sta.z atan2_16.return_1
    lda.z atan2_16.return+1
    sta.z atan2_16.return_1+1
    jmp __b5
    // init_angle_screen::@5
  __b5:
    // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 -- vwuz1=vwuz2 
    lda.z atan2_16.return_1
    sta.z angle_w
    lda.z atan2_16.return_1+1
    sta.z angle_w+1
    // [116] (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
    // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z __11+1
    sta.z ang_w
    // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [119] (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
    // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __13
    ldy.z xb
    sta (screen_topline),y
    // [121] (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
    // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __14
    ldy.z x
    sta (screen_topline),y
    // [123] (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
    // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z __15
    ldy.z x
    sta (screen_bottomline),y
    // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
  __b2_from___b5:
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy 
    // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy 
    jmp __b2
}
  // atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($76) x, signed word zp($78) y)
atan2_16: {
    .label __2 = $20
    .label __7 = $22
    .label __22 = $85
    .label __23 = $84
    .label yi = $20
    .label xi = $22
    .label angle = $27
    .label xd = $2c
    .label yd = $2a
    .label shift = $29
    .label angle_1 = $25
    .label i = $24
    .label return = $27
    .label x = $76
    .label y = $78
    .label return_1 = $7a
    // [127] 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:
    // [128] (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
    // [129] 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:
    // [129] 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:
    // [130] 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:
    // [131] (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
    // [132] 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:
    // [132] 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:
    // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  __b10_from___b6:
    // [133] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z angle_1
    lda #>0
    sta.z angle_1+1
    // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [133] 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:
    // [134] 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
    // [135] 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:
    // [135] 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:
    // [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz2_ror_1 
    lda.z angle_1+1
    lsr
    sta.z angle+1
    lda.z angle_1
    ror
    sta.z angle
    // [137] 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:
    // [138] (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
    // [139] 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:
    // [139] 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:
    // [140] 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:
    // [141] (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
    // [142] 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:
    // [142] 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:
    // [143] return 
    rts
    // atan2_16::@11
  __b11:
    // [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuz1=vbuz2 
    lda.z i
    sta.z shift
    // [145] (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
    // [146] (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
    // [147] 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:
    // [147] 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 
    // [147] 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 
    // [147] 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:
    // [148] 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:
    // [149] 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:
    // [150] (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
    // [151] (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
    // [152] 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:
    // [152] 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 
    // [152] 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:
    // [153] 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:
    // [154] (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
    // [155] (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
    // [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __23
    // [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuz2 
    ldy.z __23
    sec
    lda.z angle_1
    sbc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle_1
    lda.z angle_1+1
    sbc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle_1+1
    // [158] 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:
    // [158] 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 
    // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [158] 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:
    // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuz1_eq_vbuc1_then_la1 
    lda #CORDIC_ITERATIONS_16-1+1
    cmp.z i
    beq __b12_from___b19
    // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  __b10_from___b19:
    // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [133] 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:
    // [161] (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
    // [162] (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
    // [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z i
    asl
    sta.z __22
    // [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuz2 
    ldy.z __22
    clc
    lda.z angle_1
    adc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle_1
    lda.z angle_1+1
    adc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle_1+1
    jmp __b19_from___b18
    // atan2_16::@14
  __b14:
    // [165] (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
    // [166] (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
    // [167] (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:
    // [168] (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:
    // [169] (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* zp($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 = $86
    .label yd = $33
    .label yds = $89
    .label x2 = $8b
    .label screen_topline = $2f
    .label y = $2e
    .label xd = $36
    .label xds = $8e
    .label ds = $90
    .label d = $95
    .label x = $34
    .label xb = $35
    // [171] call init_squares 
    // [242] 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:
    // [172] (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
    // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
  __b1_from___b11:
    // [173] 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 
    // [173] 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 
    // [173] 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
    // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
  __b1_from___b7:
    // [173] 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 
    // [173] 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 
    // [173] 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:
    // [174] (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
    // [175] 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:
    // [176] (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
    // [177] 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:
    // [177] 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:
    // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 -- vbuz1=vbuz2 
    lda.z yd
    sta.z sqr.val
    // [179] call sqr 
    // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
  sqr_from___b4:
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda.z sqr.return
    sta.z sqr.return_1
    lda.z sqr.return+1
    sta.z sqr.return_1+1
    jmp __b12
    // init_dist_screen::@12
  __b12:
    // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 -- vwuz1=vwuz2 
    lda.z sqr.return_1
    sta.z yds
    lda.z sqr.return_1+1
    sta.z yds+1
    // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
  __b5_from___b12:
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b5
    // init_dist_screen::@5
  __b5:
    // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b6
    jmp __b7
    // init_dist_screen::@7
  __b7:
    // [184] (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
  !:
    // [185] (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
    // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [187] 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:
    // [188] return 
    rts
    // init_dist_screen::@6
  __b6:
    // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z x
    asl
    sta.z x2
    // [190] 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:
    // [191] (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
    // [192] 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:
    // [192] 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:
    // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 -- vbuz1=vbuz2 
    lda.z xd
    sta.z sqr.val
    // [194] call sqr 
    // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
  sqr_from___b10:
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy 
    jsr sqr
    // [195] (word) sqr::return#3 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda.z sqr.return
    sta.z sqr.return_2
    lda.z sqr.return+1
    sta.z sqr.return_2+1
    jmp __b13
    // init_dist_screen::@13
  __b13:
    // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 -- vwuz1=vwuz2 
    lda.z sqr.return_2
    sta.z xds
    lda.z sqr.return_2+1
    sta.z xds+1
    // [197] (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
    // [198] (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
    // [199] call sqrt 
    jsr sqrt
    // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0 -- vbuz1=vbuz2 
    lda.z sqrt.return
    sta.z sqrt.return_1
    jmp __b14
    // init_dist_screen::@14
  __b14:
    // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 -- vbuz1=vbuz2 
    lda.z sqrt.return_1
    sta.z d
    // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z x
    sta (screen_topline),y
    // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z x
    sta (screen_bottomline),y
    // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z xb
    sta (screen_topline),y
    // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z d
    ldy.z xb
    sta (screen_bottomline),y
    // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5]
  __b5_from___b14:
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy 
    // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy 
    jmp __b5
    // init_dist_screen::@8
  __b8:
    // [208] (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:
    // [209] (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 zp($92) val)
sqrt: {
    .label __1 = $9e
    .label __3 = $9c
    .label found = $9a
    .label return = $a0
    .label val = $92
    .label return_1 = $94
    // [210] (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
    // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z bsearch16u.items
    lda.z SQUARES+1
    sta.z bsearch16u.items+1
    // [212] call bsearch16u 
    // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
  bsearch16u_from_sqrt:
    jsr bsearch16u
    // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 -- pwuz1=pwuz2 
    lda.z bsearch16u.return
    sta.z bsearch16u.return_1
    lda.z bsearch16u.return+1
    sta.z bsearch16u.return_1+1
    jmp __b1
    // sqrt::@1
  __b1:
    // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 -- pwuz1=pwuz2 
    lda.z bsearch16u.return_1
    sta.z found
    lda.z bsearch16u.return_1+1
    sta.z found+1
    // [215] (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
    // [216] (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
    // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuz1=_byte_vwuz2 
    lda.z __1
    sta.z return
    jmp __breturn
    // sqrt::@return
  __breturn:
    // [218] 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 zp($96) key, word* zp($37) items, byte zp($39) num)
bsearch16u: {
    .label __2 = $37
    .label __6 = $a1
    .label __16 = $a2
    .label pivot = $a3
    .label result = $a5
    .label return = $37
    .label num = $39
    .label items = $37
    .label key = $96
    .label return_1 = $98
    // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
  __b3_from_bsearch16u:
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuz1=vbuc1 
    lda #NUM_SQUARES
    sta.z num
    jmp __b3
    // bsearch16u::@3
  __b3:
    // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuz1_gt_0_then_la1 
    lda.z num
    bne __b4
    jmp __b5
    // bsearch16u::@5
  __b5:
    // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
    ldy #1
    lda (items),y
    cmp.z key+1
    bne !+
    dey
    lda (items),y
    cmp.z key
    beq __b2_from___b5
  !:
    bcc __b2_from___b5
    jmp __b1
    // bsearch16u::@1
  __b1:
    // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
    lda.z __2
    sec
    sbc #<1*SIZEOF_WORD
    sta.z __2
    lda.z __2+1
    sbc #>1*SIZEOF_WORD
    sta.z __2+1
    // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
  __b2_from___b1:
  __b2_from___b5:
    // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    jmp __b2
    // bsearch16u::@2
  __b2:
    // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
  __breturn_from___b2:
  __breturn_from___b8:
    // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
    jmp __breturn
    // bsearch16u::@return
  __breturn:
    // [226] return 
    rts
    // bsearch16u::@4
  __b4:
    // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuz1=vbuz2_ror_1 
    lda.z num
    lsr
    sta.z __6
    // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z __6
    asl
    sta.z __16
    // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuz3 
    lda.z __16
    clc
    adc.z items
    sta.z pivot
    lda #0
    adc.z items+1
    sta.z pivot+1
    // [230] (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
    // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    lda.z result+1
    bne __b6
    lda.z result
    bne __b6
    jmp __b8
    // bsearch16u::@8
  __b8:
    // [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
    lda.z pivot
    sta.z return
    lda.z pivot+1
    sta.z return+1
    jmp __breturn_from___b8
    // bsearch16u::@6
  __b6:
    // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
    lda.z result+1
    bmi __b7_from___b6
    bne !+
    lda.z result
    beq __b7_from___b6
  !:
    jmp __b9
    // bsearch16u::@9
  __b9:
    // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc.z pivot
    sta.z items
    lda #0
    adc.z pivot+1
    sta.z items+1
    // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuz1=_dec_vbuz1 
    dec.z num
    // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
  __b7_from___b6:
  __b7_from___b9:
    // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
    // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
    jmp __b7
    // bsearch16u::@7
  __b7:
    // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuz1=vbuz1_ror_1 
    lsr.z num
    // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
  __b3_from___b7:
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
    jmp __b3
}
  // sqr
// Find the square of a byte value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte zp($3a) val)
sqr: {
    .label __0 = $a7
    .label return = $a8
    .label val = $3a
    .label return_1 = $87
    .label return_2 = $8c
    // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 
    lda.z val
    asl
    sta.z __0
    // [240] (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:
    // [241] 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 = $3e
    .label sqr = $3c
    .label i = $3b
    // [243] call malloc 
    // [92] phi from init_squares to malloc [phi:init_squares->malloc]
  malloc_from_init_squares:
    // [92] 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
    // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
    jsr malloc
    jmp __b3
    // init_squares::@3
  __b3:
    // [244] (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
    // [245] (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
    // [246] phi from init_squares::@3 to init_squares::@1 [phi:init_squares::@3->init_squares::@1]
  __b1_from___b3:
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@3->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@3->init_squares::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z sqr
    lda #>0
    sta.z sqr+1
    // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@3->init_squares::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    jmp __b1
    // init_squares::@1
  __b1:
    // [247] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#3) goto init_squares::@2 -- vbuz1_lt_vbuc1_then_la1 
    lda.z i
    cmp #NUM_SQUARES
    bcc __b2
    jmp __breturn
    // init_squares::@return
  __breturn:
    // [248] return 
    rts
    // init_squares::@2
  __b2:
    // [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
    // [246] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
  __b1_from___b2:
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@2->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
    // [246] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@2->init_squares::@1#2] -- register_copy 
    jmp __b1
}
  // 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 [7] (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 [9] (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 [11] (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 [16] (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:13 [ 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 [18] (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:13 [ 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 [20] (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:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ 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[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
Statement [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ) always clobbers reg byte a 
Statement [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:13 [ 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[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
Statement [27] (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:13 [ 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 [31] 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:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
Statement [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a 
Statement [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y 
Statement [40] (byte~) main::$24 ← (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::$24 ] ( main:13 [ 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::$24 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:81 [ main::bucket_size#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Statement [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) [ 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:13 [ 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[1]:81 [ main::bucket_size#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:3 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Statement [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (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:13 [ 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 [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) 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:13 [ 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 [44] (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:13 [ 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 [45] 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:13 [ 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 [46] (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:13 [ 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 [49] (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:13 [ 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 [50] (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:13 [ 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 [51] (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:13 [ 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 [54] *((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:13::init_buckets:21 [ 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[1]:9 [ init_buckets::i#2 init_buckets::i#1 ]
Statement [57] (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:13::init_buckets:21 [ 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 [59] *((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:13::init_buckets:21 [ 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 [62] 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:13::init_buckets:21 [ 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 [64] (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:13::init_buckets:21 [ 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 [65] (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:13::init_buckets:21 [ 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 [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ) always clobbers reg byte a 
Statement [68] (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::$4 init_buckets::$12 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
Statement [69] (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::$4 init_buckets::$16 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
Statement [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:13::init_buckets:21 [ 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 [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(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:13::init_buckets:21 [ 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 [74] *((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:13::init_buckets:21 [ 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[1]:16 [ init_buckets::i3#2 init_buckets::i3#1 ]
Statement [77] (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:13::init_buckets:21 [ 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 [79] (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:13::init_buckets:21 [ 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 [80] (word~) init_buckets::$7 ← (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::$7 ] ( main:13::init_buckets:21 [ 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::$7 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:97 [ init_buckets::distance#0 ]
Statement [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (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:13::init_buckets:21 [ 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 [82] (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:13::init_buckets:21 [ 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 [83] (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:13::init_buckets:21 [ 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[1]:97 [ init_buckets::distance#0 ]
Statement [84] (word~) init_buckets::$8 ← (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::$8 ] ( main:13::init_buckets:21 [ 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::$8 ] ) always clobbers reg byte a 
Statement [85] (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::$8 init_buckets::$14 ] ( main:13::init_buckets:21 [ 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::$8 init_buckets::$14 ] ) always clobbers reg byte a reg byte y 
Statement [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 [ 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:13::init_buckets:21 [ 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 [87] *((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:13::init_buckets:21 [ 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 [90] 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:13::init_buckets:21 [ 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 [93] (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:6 [ malloc::mem#0 ] malloc:8 [ malloc::mem#0 ] malloc:10 [ malloc::mem#0 ] main:13::init_buckets:21::malloc:66 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:13::init_dist_screen:17::init_squares:171::malloc:243 [ 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 [94] (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:6 [ malloc::mem#0 heap_head#1 ] malloc:8 [ malloc::mem#0 heap_head#1 ] malloc:10 [ malloc::mem#0 heap_head#1 ] main:13::init_buckets:21::malloc:66 [ 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:13::init_dist_screen:17::init_squares:171::malloc:243 [ 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 [96] (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:13::init_angle_screen:19 [ 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 [97] (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:13::init_angle_screen:19 [ 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::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:13::init_angle_screen:19 [ 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 
Removing always clobbered register reg byte a as potential for zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Statement [102] (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:13::init_angle_screen:19 [ 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 [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:128 [ init_angle_screen::ang_w#0 ]
Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:128 [ init_angle_screen::ang_w#0 ]
Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [130] 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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [131] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [134] 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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:36 [ atan2_16::i#2 atan2_16::i#1 ]
Statement [136] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [145] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Statement [146] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
Statement [150] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
Statement [151] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
Statement [153] 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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
Statement [154] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
Statement [155] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
Statement [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
Statement [161] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [162] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a 
Statement [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [165] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
Statement [166] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
Statement [168] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [169] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [172] (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:13::init_dist_screen:17 [ 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 [174] (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:13::init_dist_screen:17 [ 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[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Statement [176] (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:13::init_dist_screen:17 [ 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 [180] (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:13::init_dist_screen:17 [ 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 [181] (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:13::init_dist_screen:17 [ 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::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:13::init_dist_screen:17 [ 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 [185] (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:13::init_dist_screen:17 [ 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 [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (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#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Statement [191] (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#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a 
Statement [195] (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#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
Statement [196] (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#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [197] (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#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [198] (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#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ]
Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:13::init_dist_screen:17::sqr:179 [ 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:13::init_dist_screen:17::sqr: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#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqr:179 [ 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:13::init_dist_screen:17::sqr: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#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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 [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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::i#2 init_squares::sqr#2 init_squares::squares#2 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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#2 init_squares::squares#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp[1]:59 [ init_squares::i#2 init_squares::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:59 [ 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::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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#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::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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#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:13::init_dist_screen:17::init_squares:171 [ 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 [7] (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 [9] (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 [11] (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 [16] (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:13 [ 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 [18] (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:13 [ 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 [20] (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:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a 
Statement [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ) always clobbers reg byte a 
Statement [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y 
Statement [27] (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:13 [ 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 [31] 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:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
Statement [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a 
Statement [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y 
Statement [40] (byte~) main::$24 ← (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::$24 ] ( main:13 [ 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::$24 ] ) always clobbers reg byte a 
Statement [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) [ 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:13 [ 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 [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (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:13 [ 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 [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) 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:13 [ 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 [44] (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:13 [ 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 [45] 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:13 [ 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 [46] (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:13 [ 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 [49] (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:13 [ 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 [50] (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:13 [ 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 [51] (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:13 [ 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 [54] *((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:13::init_buckets:21 [ 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 [57] (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:13::init_buckets:21 [ 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 [59] *((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:13::init_buckets:21 [ 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 [62] 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:13::init_buckets:21 [ 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 [64] (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:13::init_buckets:21 [ 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 [65] (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:13::init_buckets:21 [ 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 [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ) always clobbers reg byte a 
Statement [68] (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::$4 init_buckets::$12 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
Statement [69] (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::$4 init_buckets::$16 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
Statement [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:13::init_buckets:21 [ 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 [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(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:13::init_buckets:21 [ 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 [74] *((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:13::init_buckets:21 [ 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 [77] (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:13::init_buckets:21 [ 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 [79] (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:13::init_buckets:21 [ 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 [80] (word~) init_buckets::$7 ← (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::$7 ] ( main:13::init_buckets:21 [ 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::$7 ] ) always clobbers reg byte a 
Statement [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (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:13::init_buckets:21 [ 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 [82] (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:13::init_buckets:21 [ 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 [83] (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:13::init_buckets:21 [ 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 [84] (word~) init_buckets::$8 ← (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::$8 ] ( main:13::init_buckets:21 [ 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::$8 ] ) always clobbers reg byte a 
Statement [85] (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::$8 init_buckets::$14 ] ( main:13::init_buckets:21 [ 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::$8 init_buckets::$14 ] ) always clobbers reg byte a reg byte y 
Statement [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 [ 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:13::init_buckets:21 [ 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 [87] *((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:13::init_buckets:21 [ 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 [90] 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:13::init_buckets:21 [ 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 [93] (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:6 [ malloc::mem#0 ] malloc:8 [ malloc::mem#0 ] malloc:10 [ malloc::mem#0 ] main:13::init_buckets:21::malloc:66 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:13::init_dist_screen:17::init_squares:171::malloc:243 [ 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 [94] (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:6 [ malloc::mem#0 heap_head#1 ] malloc:8 [ malloc::mem#0 heap_head#1 ] malloc:10 [ malloc::mem#0 heap_head#1 ] main:13::init_buckets:21::malloc:66 [ 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:13::init_dist_screen:17::init_squares:171::malloc:243 [ 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 [96] (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:13::init_angle_screen:19 [ 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 [97] (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:13::init_angle_screen:19 [ 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::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:13::init_angle_screen:19 [ 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 [102] (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:13::init_angle_screen:19 [ 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 [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [130] 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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [131] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [134] 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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
Statement [136] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [145] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
Statement [146] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
Statement [150] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
Statement [151] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
Statement [153] 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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
Statement [154] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
Statement [155] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
Statement [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
Statement [161] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [162] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a 
Statement [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [165] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
Statement [166] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
Statement [168] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [169] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [172] (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:13::init_dist_screen:17 [ 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 [174] (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:13::init_dist_screen:17 [ 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 [176] (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:13::init_dist_screen:17 [ 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 [180] (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:13::init_dist_screen:17 [ 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 [181] (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:13::init_dist_screen:17 [ 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::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:13::init_dist_screen:17 [ 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 [185] (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:13::init_dist_screen:17 [ 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 [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (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#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [191] (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#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a 
Statement [195] (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#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
Statement [196] (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#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [197] (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#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [198] (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#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:149 [ init_dist_screen::d#0 ]
Statement [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (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#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y 
Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:13::init_dist_screen:17::sqr:179 [ 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:13::init_dist_screen:17::sqr: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#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqr:179 [ 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:13::init_dist_screen:17::sqr: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#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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 [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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::i#2 init_squares::sqr#2 init_squares::squares#2 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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#2 init_squares::squares#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::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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#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::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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#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:13::init_dist_screen:17::init_squares:171 [ 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 [7] (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 [9] (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 [11] (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 [16] (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:13 [ 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 [18] (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:13 [ 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 [20] (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:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 heap_head#1 ] ) always clobbers reg byte a 
Statement [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a 
Statement [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::$23 ] ) always clobbers reg byte a 
Statement [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::bucket#0 ] ) always clobbers reg byte a reg byte y 
Statement [27] (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:13 [ 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 [31] 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:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::min_offset#2 ] ) always clobbers reg byte a 
Statement [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (word) main::min_offset#2 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 main::fill1#0 ] ) always clobbers reg byte a 
Statement [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ( main:13 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 main::bucket_idx#6 ] ) always clobbers reg byte a reg byte y 
Statement [40] (byte~) main::$24 ← (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::$24 ] ( main:13 [ 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::$24 ] ) always clobbers reg byte a 
Statement [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) [ 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:13 [ 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 [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (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:13 [ 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 [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) 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:13 [ 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 [44] (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:13 [ 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 [45] 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:13 [ 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 [46] (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:13 [ 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 [49] (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:13 [ 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 [50] (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:13 [ 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 [51] (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:13 [ 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 [54] *((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:13::init_buckets:21 [ 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 [57] (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:13::init_buckets:21 [ 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 [59] *((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:13::init_buckets:21 [ 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 [62] 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:13::init_buckets:21 [ 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 [64] (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:13::init_buckets:21 [ 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 [65] (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:13::init_buckets:21 [ 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 [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 heap_head#1 ] ) always clobbers reg byte a 
Statement [68] (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::$4 init_buckets::$12 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$12 heap_head#1 ] ) always clobbers reg byte a 
Statement [69] (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::$4 init_buckets::$16 heap_head#1 ] ( main:13::init_buckets:21 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 init_buckets::$4 init_buckets::$16 heap_head#1 ] ) always clobbers reg byte a 
Statement [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 [ BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 heap_head#1 ] ( main:13::init_buckets:21 [ 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 [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(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:13::init_buckets:21 [ 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 [74] *((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:13::init_buckets:21 [ 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 [77] (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:13::init_buckets:21 [ 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 [79] (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:13::init_buckets:21 [ 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 [80] (word~) init_buckets::$7 ← (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::$7 ] ( main:13::init_buckets:21 [ 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::$7 ] ) always clobbers reg byte a 
Statement [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (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:13::init_buckets:21 [ 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 [82] (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:13::init_buckets:21 [ 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 [83] (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:13::init_buckets:21 [ 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 [84] (word~) init_buckets::$8 ← (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::$8 ] ( main:13::init_buckets:21 [ 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::$8 ] ) always clobbers reg byte a 
Statement [85] (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::$8 init_buckets::$14 ] ( main:13::init_buckets:21 [ 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::$8 init_buckets::$14 ] ) always clobbers reg byte a reg byte y 
Statement [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 [ 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:13::init_buckets:21 [ 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 [87] *((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:13::init_buckets:21 [ 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 [90] 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:13::init_buckets:21 [ 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 [93] (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:6 [ malloc::mem#0 ] malloc:8 [ malloc::mem#0 ] malloc:10 [ malloc::mem#0 ] main:13::init_buckets:21::malloc:66 [ SCREEN_ANGLE#0 BUCKET_SIZES#0 BUCKETS#0 BUCKET_IDX#0 init_buckets::screen#0 init_buckets::i2#2 malloc::mem#0 ] main:13::init_dist_screen:17::init_squares:171::malloc:243 [ 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 [94] (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:6 [ malloc::mem#0 heap_head#1 ] malloc:8 [ malloc::mem#0 heap_head#1 ] malloc:10 [ malloc::mem#0 heap_head#1 ] main:13::init_buckets:21::malloc:66 [ 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:13::init_dist_screen:17::init_squares:171::malloc:243 [ 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 [96] (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:13::init_angle_screen:19 [ 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 [97] (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:13::init_angle_screen:19 [ 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::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:13::init_angle_screen:19 [ 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 [102] (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:13::init_angle_screen:19 [ 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 [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ) always clobbers reg byte a 
Statement [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ) always clobbers reg byte a 
Statement [108] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ) always clobbers reg byte y 
Statement [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$7 ] ) always clobbers reg byte a 
Statement [110] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ) always clobbers reg byte y 
Statement [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ) always clobbers reg byte a 
Statement [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 atan2_16::return#2 ] ) always clobbers reg byte a 
Statement [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ) always clobbers reg byte a 
Statement [116] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ) always clobbers reg byte a 
Statement [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a 
Statement [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte a reg byte y 
Statement [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$13 ] ) always clobbers reg byte a 
Statement [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [121] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$14 ] ) always clobbers reg byte a 
Statement [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ) always clobbers reg byte y 
Statement [123] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 init_angle_screen::$15 ] ) always clobbers reg byte a 
Statement [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:13::init_angle_screen:19 [ 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#2 init_angle_screen::xb#2 ] ) always clobbers reg byte y 
Statement [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ) always clobbers reg byte a 
Statement [128] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ) always clobbers reg byte a 
Statement [130] 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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ) always clobbers reg byte a 
Statement [131] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ) always clobbers reg byte a 
Statement [134] 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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ) always clobbers reg byte a 
Statement [136] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [137] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] ) always clobbers reg byte a 
Statement [138] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] ) always clobbers reg byte a 
Statement [140] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#11 ] ) always clobbers reg byte a 
Statement [141] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::angle#5 ] ) always clobbers reg byte a 
Statement [145] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ) always clobbers reg byte a 
Statement [146] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ) always clobbers reg byte a 
Statement [150] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ) always clobbers reg byte a 
Statement [151] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ) always clobbers reg byte a 
Statement [153] 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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ) always clobbers reg byte a 
Statement [154] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ) always clobbers reg byte a 
Statement [155] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ) always clobbers reg byte a 
Statement [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ) always clobbers reg byte a 
Statement [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ) always clobbers reg byte a 
Statement [161] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [162] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ) always clobbers reg byte a 
Statement [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ) always clobbers reg byte a 
Statement [165] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ) always clobbers reg byte a 
Statement [166] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ) always clobbers reg byte a 
Statement [168] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ) always clobbers reg byte a 
Statement [169] (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:13::init_angle_screen:19::atan2_16:113 [ 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#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ) always clobbers reg byte a 
Statement [172] (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:13::init_dist_screen:17 [ 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 [174] (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:13::init_dist_screen:17 [ 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 [176] (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:13::init_dist_screen:17 [ 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 [180] (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:13::init_dist_screen:17 [ 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 [181] (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:13::init_dist_screen:17 [ 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::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:13::init_dist_screen:17 [ 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 [185] (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:13::init_dist_screen:17 [ 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 [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (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#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::x2#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [191] (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#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::$14 SQUARES#1 ] ) always clobbers reg byte a 
Statement [195] (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#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 sqr::return#3 SQUARES#1 ] ) always clobbers reg byte a 
Statement [196] (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#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::xds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [197] (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#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::ds#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [198] (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#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 sqrt::val#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 init_dist_screen::d#0 SQUARES#1 ] ) always clobbers reg byte y 
Statement [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (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#2 init_dist_screen::xb#2 SQUARES#1 ] ( main:13::init_dist_screen:17 [ 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#2 init_dist_screen::xb#2 SQUARES#1 ] ) always clobbers reg byte y 
Statement [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [ bsearch16u::key#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 bsearch16u::key#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [ bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 bsearch16u::key#0 bsearch16u::items#1 SQUARES#1 ] ) always clobbers reg byte a 
Statement [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [ SQUARES#1 bsearch16u::return#3 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#3 ] ) always clobbers reg byte a 
Statement [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [ SQUARES#1 sqrt::found#0 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 sqrt::found#0 ] ) always clobbers reg byte a 
Statement [215] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [ SQUARES#1 sqrt::$3 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$3 ] ) always clobbers reg byte a 
Statement [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [ SQUARES#1 sqrt::$1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 SQUARES#1 sqrt::$1 ] ) always clobbers reg byte a 
Statement [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [ sqrt::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqrt:199 [ 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#2 init_dist_screen::xb#2 sqrt::return#0 SQUARES#1 ] ) always clobbers reg byte a 
Statement [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [ bsearch16u::items#2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::items#2 ] ) always clobbers reg byte a reg byte y 
Statement [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::$2 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::$2 ] ) always clobbers reg byte a 
Statement [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$6 ] ) always clobbers reg byte a 
Statement [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::$16 ] ) always clobbers reg byte a 
Statement [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [230] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a reg byte y 
Statement [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 bsearch16u::result#0 ] ) always clobbers reg byte a 
Statement [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [ bsearch16u::return#6 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::return#6 ] ) always clobbers reg byte a 
Statement [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#2 bsearch16u::pivot#0 ] ) always clobbers reg byte a 
Statement [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [ bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ( main:13::init_dist_screen:17::sqrt:199::bsearch16u:212 [ 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#2 init_dist_screen::xb#2 SQUARES#1 bsearch16u::key#0 bsearch16u::num#3 bsearch16u::items#0 ] ) always clobbers reg byte a 
Statement [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [ SQUARES#1 sqr::$0 ] ( main:13::init_dist_screen:17::sqr:179 [ 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:13::init_dist_screen:17::sqr: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#2 init_dist_screen::xb#2 SQUARES#1 sqr::$0 ] ) always clobbers reg byte a 
Statement [240] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [ sqr::return#0 SQUARES#1 ] ( main:13::init_dist_screen:17::sqr:179 [ 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:13::init_dist_screen:17::sqr: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#2 init_dist_screen::xb#2 sqr::return#0 SQUARES#1 ] ) always clobbers reg byte a reg byte y 
Statement [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [ heap_head#1 SQUARES#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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 [245] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [ heap_head#1 SQUARES#1 init_squares::squares#0 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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::i#2 init_squares::sqr#2 init_squares::squares#2 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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#2 init_squares::squares#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::i#2 init_squares::sqr#2 init_squares::squares#1 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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#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::i#2 init_squares::sqr#2 init_squares::squares#1 init_squares::$3 ] ( main:13::init_dist_screen:17::init_squares:171 [ 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#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:13::init_dist_screen:17::init_squares:171 [ 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[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] : zp[1]:2 , reg byte x , 
Potential registers zp[1]:3 [ main::i#2 main::i#1 ] : zp[1]:3 , reg byte x , 
Potential registers zp[2]:4 [ main::min_offset#2 main::min_offset#8 ] : zp[2]:4 , 
Potential registers zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] : zp[1]:6 , reg byte x , 
Potential registers zp[2]:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] : zp[2]:7 , 
Potential registers zp[1]:9 [ init_buckets::i#2 init_buckets::i#1 ] : zp[1]:9 , reg byte x , reg byte y , 
Potential registers zp[2]:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] : zp[2]:10 , 
Potential registers zp[2]:12 [ init_buckets::i1#2 init_buckets::i1#1 ] : zp[2]:12 , 
Potential registers zp[2]:14 [ init_buckets::i2#2 init_buckets::i2#1 ] : zp[2]:14 , 
Potential registers zp[1]:16 [ init_buckets::i3#2 init_buckets::i3#1 ] : zp[1]:16 , reg byte x , reg byte y , 
Potential registers zp[2]:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] : zp[2]:17 , 
Potential registers zp[2]:19 [ init_buckets::i4#2 init_buckets::i4#1 ] : zp[2]:19 , 
Potential registers zp[2]:21 [ heap_head#18 heap_head#1 ] : zp[2]:21 , 
Potential registers zp[2]:23 [ malloc::size#7 malloc::size#6 ] : zp[2]:23 , 
Potential registers zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp[1]:25 , reg byte x , 
Potential registers zp[2]:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] : zp[2]:26 , 
Potential registers zp[2]:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp[2]:28 , 
Potential registers zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp[1]:30 , reg byte x , 
Potential registers zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp[1]:31 , reg byte x , 
Potential registers zp[2]: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[2]:32 , 
Potential registers zp[2]: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[2]:34 , 
Potential registers zp[1]:36 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:36 , reg byte x , reg byte y , 
Potential registers zp[2]:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:37 , 
Potential registers zp[2]:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] : zp[2]:39 , 
Potential registers zp[1]:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:41 , reg byte x , reg byte y , 
Potential registers zp[2]:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:42 , 
Potential registers zp[2]:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:44 , 
Potential registers zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] : zp[1]:46 , reg byte x , 
Potential registers zp[2]:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] : zp[2]:47 , 
Potential registers zp[2]:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] : zp[2]:49 , 
Potential registers zp[1]:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] : zp[1]:51 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] : zp[1]:52 , reg byte x , 
Potential registers zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] : zp[1]:53 , reg byte x , 
Potential registers zp[1]:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] : zp[1]:54 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] : zp[2]:55 , 
Potential registers zp[1]:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] : zp[1]:57 , reg byte x , 
Potential registers zp[1]:58 [ sqr::val#2 sqr::val#1 sqr::val#0 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:59 [ init_squares::i#2 init_squares::i#1 ] : zp[1]:59 , reg byte x , 
Potential registers zp[2]:60 [ init_squares::sqr#2 init_squares::sqr#1 ] : zp[2]:60 , 
Potential registers zp[2]:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] : zp[2]:62 , 
Potential registers zp[2]:64 [ SCREEN_DIST#0 ] : zp[2]:64 , 
Potential registers zp[2]:66 [ SCREEN_ANGLE#0 ] : zp[2]:66 , 
Potential registers zp[2]:68 [ BUCKET_SIZES#0 ] : zp[2]:68 , 
Potential registers zp[2]:70 [ BUCKETS#0 ] : zp[2]:70 , 
Potential registers zp[2]:72 [ BUCKET_IDX#0 ] : zp[2]:72 , 
Potential registers zp[2]:74 [ init_angle_screen::screen#0 ] : zp[2]:74 , 
Potential registers zp[2]:76 [ init_buckets::screen#0 ] : zp[2]:76 , 
Potential registers zp[1]:78 [ main::$23 ] : zp[1]:78 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:79 [ main::bucket#0 ] : zp[2]:79 , 
Potential registers zp[1]:81 [ main::bucket_size#0 ] : zp[1]:81 , reg byte x , 
Potential registers zp[2]:82 [ main::fill1#0 ] : zp[2]:82 , 
Potential registers zp[1]:84 [ main::$24 ] : zp[1]:84 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:85 [ main::fill#0 ] : zp[2]:85 , 
Potential registers zp[2]:87 [ main::angle#0 ] : zp[2]:87 , 
Potential registers zp[2]:89 [ init_buckets::$15 ] : zp[2]:89 , 
Potential registers zp[2]:91 [ init_buckets::$4 ] : zp[2]:91 , 
Potential registers zp[2]:93 [ init_buckets::$12 ] : zp[2]:93 , 
Potential registers zp[2]:95 [ init_buckets::$16 ] : zp[2]:95 , 
Potential registers zp[1]:97 [ init_buckets::distance#0 ] : zp[1]:97 , reg byte x , 
Potential registers zp[2]:98 [ init_buckets::$7 ] : zp[2]:98 , 
Potential registers zp[2]:100 [ init_buckets::$13 ] : zp[2]:100 , 
Potential registers zp[2]:102 [ init_buckets::$17 ] : zp[2]:102 , 
Potential registers zp[2]:104 [ init_buckets::bucket#0 ] : zp[2]:104 , 
Potential registers zp[2]:106 [ init_buckets::$8 ] : zp[2]:106 , 
Potential registers zp[1]:108 [ init_buckets::$14 ] : zp[1]:108 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:109 [ malloc::mem#0 ] : zp[2]:109 , 
Potential registers zp[1]:111 [ init_angle_screen::$3 ] : zp[1]:111 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:112 [ init_angle_screen::$4 ] : zp[1]:112 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:113 [ init_angle_screen::xw#0 ] : zp[2]:113 , 
Potential registers zp[1]:115 [ init_angle_screen::$7 ] : zp[1]:115 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:116 [ init_angle_screen::yw#0 ] : zp[2]:116 , 
Potential registers zp[2]:118 [ atan2_16::x#0 ] : zp[2]:118 , 
Potential registers zp[2]:120 [ atan2_16::y#0 ] : zp[2]:120 , 
Potential registers zp[2]:122 [ atan2_16::return#2 ] : zp[2]:122 , 
Potential registers zp[2]:124 [ init_angle_screen::angle_w#0 ] : zp[2]:124 , 
Potential registers zp[2]:126 [ init_angle_screen::$11 ] : zp[2]:126 , 
Potential registers zp[1]:128 [ init_angle_screen::ang_w#0 ] : zp[1]:128 , reg byte x , 
Potential registers zp[1]:129 [ init_angle_screen::$13 ] : zp[1]:129 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:130 [ init_angle_screen::$14 ] : zp[1]:130 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:131 [ init_angle_screen::$15 ] : zp[1]:131 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:132 [ atan2_16::$23 ] : zp[1]:132 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:133 [ atan2_16::$22 ] : zp[1]:133 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:134 [ init_dist_screen::y2#0 ] : zp[1]:134 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:135 [ sqr::return#2 ] : zp[2]:135 , 
Potential registers zp[2]:137 [ init_dist_screen::yds#0 ] : zp[2]:137 , 
Potential registers zp[1]:139 [ init_dist_screen::x2#0 ] : zp[1]:139 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:140 [ sqr::return#3 ] : zp[2]:140 , 
Potential registers zp[2]:142 [ init_dist_screen::xds#0 ] : zp[2]:142 , 
Potential registers zp[2]:144 [ init_dist_screen::ds#0 ] : zp[2]:144 , 
Potential registers zp[2]:146 [ sqrt::val#0 ] : zp[2]:146 , 
Potential registers zp[1]:148 [ sqrt::return#2 ] : zp[1]:148 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:149 [ init_dist_screen::d#0 ] : zp[1]:149 , reg byte a , reg byte x , 
Potential registers zp[2]:150 [ bsearch16u::key#0 ] : zp[2]:150 , 
Potential registers zp[2]:152 [ bsearch16u::return#3 ] : zp[2]:152 , 
Potential registers zp[2]:154 [ sqrt::found#0 ] : zp[2]:154 , 
Potential registers zp[2]:156 [ sqrt::$3 ] : zp[2]:156 , 
Potential registers zp[2]:158 [ sqrt::$1 ] : zp[2]:158 , 
Potential registers zp[1]:160 [ sqrt::return#0 ] : zp[1]:160 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:161 [ bsearch16u::$6 ] : zp[1]:161 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:162 [ bsearch16u::$16 ] : zp[1]:162 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:163 [ bsearch16u::pivot#0 ] : zp[2]:163 , 
Potential registers zp[2]:165 [ bsearch16u::result#0 ] : zp[2]:165 , 
Potential registers zp[1]:167 [ sqr::$0 ] : zp[1]:167 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:168 [ sqr::return#0 ] : zp[2]:168 , 
Potential registers zp[2]:170 [ SQUARES#1 ] : zp[2]:170 , 
Potential registers zp[1]:172 [ init_squares::$3 ] : zp[1]:172 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:173 [ init_squares::$4 ] : zp[1]:173 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [atan2_16] 28,670.58: zp[1]:41 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 20,608: zp[2]: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[2]: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[2]: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[2]: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[2]: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[1]:132 [ atan2_16::$23 ] 2,002: zp[1]:133 [ atan2_16::$22 ] 1,710.04: zp[1]:36 [ atan2_16::i#2 atan2_16::i#1 ] 202: zp[2]:122 [ atan2_16::return#2 ] 50: zp[2]:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] 2.87: zp[2]:118 [ atan2_16::x#0 ] 2.72: zp[2]:120 [ atan2_16::y#0 ] 
Uplift Scope [bsearch16u] 7,563.11: zp[1]:57 [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] 2,855.06: zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] 2,002: zp[1]:161 [ bsearch16u::$6 ] 2,002: zp[1]:162 [ bsearch16u::$16 ] 1,501.5: zp[2]:165 [ bsearch16u::result#0 ] 501: zp[2]:163 [ bsearch16u::pivot#0 ] 4: zp[2]:152 [ bsearch16u::return#3 ] 0.27: zp[2]:150 [ bsearch16u::key#0 ] 
Uplift Scope [init_angle_screen] 220.36: zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 202: zp[1]:111 [ init_angle_screen::$3 ] 202: zp[1]:112 [ init_angle_screen::$4 ] 202: zp[1]:115 [ init_angle_screen::$7 ] 202: zp[2]:124 [ init_angle_screen::angle_w#0 ] 202: zp[2]:126 [ init_angle_screen::$11 ] 202: zp[1]:129 [ init_angle_screen::$13 ] 202: zp[1]:130 [ init_angle_screen::$14 ] 202: zp[1]:131 [ init_angle_screen::$15 ] 129.86: zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 84.17: zp[1]:128 [ init_angle_screen::ang_w#0 ] 50.5: zp[2]:116 [ init_angle_screen::yw#0 ] 33.67: zp[2]:113 [ init_angle_screen::xw#0 ] 21.23: zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 20.37: zp[2]:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 16.92: zp[2]:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] 3: zp[2]:74 [ init_angle_screen::screen#0 ] 
Uplift Scope [main] 673.33: zp[2]:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] 377.07: zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] 238.11: zp[2]:4 [ main::min_offset#2 main::min_offset#8 ] 202: zp[1]:84 [ main::$24 ] 202: zp[2]:85 [ main::fill#0 ] 151.5: zp[2]:87 [ main::angle#0 ] 134.67: zp[1]:3 [ main::i#2 main::i#1 ] 22: zp[1]:78 [ main::$23 ] 22: zp[2]:82 [ main::fill1#0 ] 13.64: zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 7.69: zp[1]:81 [ main::bucket_size#0 ] 6.59: zp[2]:79 [ main::bucket#0 ] 
Uplift Scope [init_dist_screen] 707: zp[1]:54 [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] 221.24: zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 202: zp[1]:139 [ init_dist_screen::x2#0 ] 202: zp[2]:142 [ init_dist_screen::xds#0 ] 202: zp[2]:144 [ init_dist_screen::ds#0 ] 131.3: zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 126.25: zp[1]:149 [ init_dist_screen::d#0 ] 77: zp[1]:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 22: zp[1]:134 [ init_dist_screen::y2#0 ] 18.18: zp[2]:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] 17.47: zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 14.06: zp[2]:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] 4.87: zp[2]:137 [ init_dist_screen::yds#0 ] 
Uplift Scope [sqr] 338: zp[1]:58 [ sqr::val#2 sqr::val#1 sqr::val#0 ] 202: zp[2]:140 [ sqr::return#3 ] 28.5: zp[2]:168 [ sqr::return#0 ] 22: zp[2]:135 [ sqr::return#2 ] 4: zp[1]:167 [ sqr::$0 ] 
Uplift Scope [init_buckets] 34.33: zp[2]:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] 33: zp[1]:9 [ init_buckets::i#2 init_buckets::i#1 ] 33: zp[1]:16 [ init_buckets::i3#2 init_buckets::i3#1 ] 23.83: zp[2]:12 [ init_buckets::i1#2 init_buckets::i1#1 ] 22: zp[2]:14 [ init_buckets::i2#2 init_buckets::i2#1 ] 22: zp[2]:89 [ init_buckets::$15 ] 22: zp[2]:93 [ init_buckets::$12 ] 22: zp[2]:95 [ init_buckets::$16 ] 22: zp[2]:98 [ init_buckets::$7 ] 22: zp[2]:100 [ init_buckets::$13 ] 22: zp[2]:102 [ init_buckets::$17 ] 22: zp[1]:108 [ init_buckets::$14 ] 18.5: zp[2]:19 [ init_buckets::i4#2 init_buckets::i4#1 ] 15.93: zp[2]:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] 11: zp[2]:106 [ init_buckets::$8 ] 7.33: zp[2]:104 [ init_buckets::bucket#0 ] 5.5: zp[1]:97 [ init_buckets::distance#0 ] 3.67: zp[2]:91 [ init_buckets::$4 ] 0.43: zp[2]:76 [ init_buckets::screen#0 ] 
Uplift Scope [sqrt] 202: zp[1]:148 [ sqrt::return#2 ] 103: zp[2]:146 [ sqrt::val#0 ] 34.33: zp[1]:160 [ sqrt::return#0 ] 4: zp[2]:154 [ sqrt::found#0 ] 4: zp[2]:156 [ sqrt::$3 ] 2: zp[2]:158 [ sqrt::$1 ] 
Uplift Scope [init_squares] 28.29: zp[1]:59 [ init_squares::i#2 init_squares::i#1 ] 22: zp[1]:172 [ init_squares::$3 ] 22: zp[1]:173 [ init_squares::$4 ] 20.07: zp[2]:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] 16.5: zp[2]:60 [ init_squares::sqr#2 init_squares::sqr#1 ] 
Uplift Scope [malloc] 35: zp[2]:23 [ malloc::size#7 malloc::size#6 ] 0.4: zp[2]:109 [ malloc::mem#0 ] 
Uplift Scope [] 23.25: zp[2]:21 [ heap_head#18 heap_head#1 ] 0.13: zp[2]:64 [ SCREEN_DIST#0 ] 0.05: zp[2]:66 [ SCREEN_ANGLE#0 ] 0.04: zp[2]:72 [ BUCKET_IDX#0 ] 0.03: zp[2]:170 [ SQUARES#1 ] 0.03: zp[2]:70 [ BUCKETS#0 ] 0.02: zp[2]:68 [ BUCKET_SIZES#0 ] 
Uplift Scope [RADIX] 

Uplifting [atan2_16] best 1253976 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:42 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:44 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]: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[2]: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::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:122 [ atan2_16::return#2 ] zp[2]:39 [ atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 ] zp[2]:118 [ atan2_16::x#0 ] zp[2]:120 [ atan2_16::y#0 ] 
Limited combination testing to 100 combinations of 144 possible.
Uplifting [bsearch16u] best 1234976 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$16 ] zp[2]:165 [ bsearch16u::result#0 ] zp[2]:163 [ bsearch16u::pivot#0 ] zp[2]:152 [ bsearch16u::return#3 ] zp[2]:150 [ bsearch16u::key#0 ] 
Uplifting [init_angle_screen] best 1233376 combination zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$7 ] zp[2]:124 [ init_angle_screen::angle_w#0 ] zp[2]:126 [ init_angle_screen::$11 ] zp[1]:129 [ init_angle_screen::$13 ] zp[1]:130 [ init_angle_screen::$14 ] zp[1]:131 [ init_angle_screen::$15 ] zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:128 [ init_angle_screen::ang_w#0 ] zp[2]:116 [ init_angle_screen::yw#0 ] zp[2]:113 [ init_angle_screen::xw#0 ] zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] zp[2]:74 [ init_angle_screen::screen#0 ] 
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [main] best 1231936 combination zp[2]:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] zp[2]:4 [ main::min_offset#2 main::min_offset#8 ] reg byte a [ main::$24 ] zp[2]:85 [ main::fill#0 ] zp[2]:87 [ main::angle#0 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::$23 ] zp[2]:82 [ main::fill1#0 ] zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] zp[1]:81 [ main::bucket_size#0 ] zp[2]:79 [ main::bucket#0 ] 
Limited combination testing to 100 combinations of 256 possible.
Uplifting [init_dist_screen] best 1228736 combination reg byte a [ init_dist_screen::xd#0 init_dist_screen::$16 init_dist_screen::$14 ] zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] reg byte a [ init_dist_screen::x2#0 ] zp[2]:142 [ init_dist_screen::xds#0 ] zp[2]:144 [ init_dist_screen::ds#0 ] zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] reg byte a [ init_dist_screen::d#0 ] zp[1]:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] zp[1]:134 [ init_dist_screen::y2#0 ] zp[2]:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] zp[2]:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] zp[2]:137 [ init_dist_screen::yds#0 ] 
Limited combination testing to 100 combinations of 6144 possible.
Uplifting [sqr] best 1228399 combination reg byte a [ sqr::val#2 sqr::val#1 sqr::val#0 ] zp[2]:140 [ sqr::return#3 ] zp[2]:168 [ sqr::return#0 ] zp[2]:135 [ sqr::return#2 ] reg byte a [ sqr::$0 ] 
Uplifting [init_buckets] best 1228119 combination zp[2]: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[2]:12 [ init_buckets::i1#2 init_buckets::i1#1 ] zp[2]:14 [ init_buckets::i2#2 init_buckets::i2#1 ] zp[2]:89 [ init_buckets::$15 ] zp[2]:93 [ init_buckets::$12 ] zp[2]:95 [ init_buckets::$16 ] zp[2]:98 [ init_buckets::$7 ] zp[2]:100 [ init_buckets::$13 ] zp[2]:102 [ init_buckets::$17 ] reg byte a [ init_buckets::$14 ] zp[2]:19 [ init_buckets::i4#2 init_buckets::i4#1 ] zp[2]:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] zp[2]:106 [ init_buckets::$8 ] zp[2]:104 [ init_buckets::bucket#0 ] zp[1]:97 [ init_buckets::distance#0 ] zp[2]:91 [ init_buckets::$4 ] zp[2]:76 [ init_buckets::screen#0 ] 
Uplifting [sqrt] best 1227216 combination reg byte a [ sqrt::return#2 ] zp[2]:146 [ sqrt::val#0 ] reg byte a [ sqrt::return#0 ] zp[2]:154 [ sqrt::found#0 ] zp[2]:156 [ sqrt::$3 ] zp[2]:158 [ sqrt::$1 ] 
Uplifting [init_squares] best 1227016 combination reg byte x [ init_squares::i#2 init_squares::i#1 ] reg byte a [ init_squares::$3 ] reg byte a [ init_squares::$4 ] zp[2]:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] zp[2]:60 [ init_squares::sqr#2 init_squares::sqr#1 ] 
Uplifting [malloc] best 1227016 combination zp[2]:23 [ malloc::size#7 malloc::size#6 ] zp[2]:109 [ malloc::mem#0 ] 
Uplifting [] best 1227016 combination zp[2]:21 [ heap_head#18 heap_head#1 ] zp[2]:64 [ SCREEN_DIST#0 ] zp[2]:66 [ SCREEN_ANGLE#0 ] zp[2]:72 [ BUCKET_IDX#0 ] zp[2]:170 [ SQUARES#1 ] zp[2]:70 [ BUCKETS#0 ] zp[2]:68 [ BUCKET_SIZES#0 ] 
Uplifting [RADIX] best 1227016 combination 
Attempting to uplift remaining variables inzp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Uplifting [main] best 1227016 combination zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] 
Attempting to uplift remaining variables inzp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ]
Uplifting [init_dist_screen] best 1227016 combination zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] 
Attempting to uplift remaining variables inzp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Uplifting [init_angle_screen] best 1227016 combination zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 
Attempting to uplift remaining variables inzp[1]:129 [ init_angle_screen::$13 ]
Uplifting [init_angle_screen] best 1226416 combination reg byte a [ init_angle_screen::$13 ] 
Attempting to uplift remaining variables inzp[1]:130 [ init_angle_screen::$14 ]
Uplifting [init_angle_screen] best 1226016 combination reg byte a [ init_angle_screen::$14 ] 
Attempting to uplift remaining variables inzp[1]:131 [ init_angle_screen::$15 ]
Uplifting [init_angle_screen] best 1225416 combination reg byte a [ init_angle_screen::$15 ] 
Attempting to uplift remaining variables inzp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ]
Uplifting [init_dist_screen] best 1225416 combination zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] 
Attempting to uplift remaining variables inzp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Uplifting [init_angle_screen] best 1225416 combination zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 
Attempting to uplift remaining variables inzp[1]:128 [ init_angle_screen::ang_w#0 ]
Uplifting [init_angle_screen] best 1225416 combination zp[1]:128 [ init_angle_screen::ang_w#0 ] 
Attempting to uplift remaining variables inzp[1]:51 [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ]
Uplifting [init_dist_screen] best 1225346 combination reg byte a [ init_dist_screen::yd#0 init_dist_screen::$7 init_dist_screen::$5 ] 
Attempting to uplift remaining variables inzp[1]:134 [ init_dist_screen::y2#0 ]
Uplifting [init_dist_screen] best 1225246 combination reg byte a [ init_dist_screen::y2#0 ] 
Attempting to uplift remaining variables inzp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Uplifting [init_angle_screen] best 1225246 combination zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 
Attempting to uplift remaining variables inzp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ]
Uplifting [init_dist_screen] best 1225246 combination zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] 
Attempting to uplift remaining variables inzp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ]
Uplifting [main] best 1225246 combination zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] 
Attempting to uplift remaining variables inzp[1]:81 [ main::bucket_size#0 ]
Uplifting [main] best 1225246 combination zp[1]:81 [ main::bucket_size#0 ] 
Attempting to uplift remaining variables inzp[1]:97 [ init_buckets::distance#0 ]
Uplifting [init_buckets] best 1225246 combination zp[1]:97 [ init_buckets::distance#0 ] 
Coalescing zero page register [ zp[2]:4 [ main::min_offset#2 main::min_offset#8 ] ] with [ zp[2]:82 [ main::fill1#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:23 [ malloc::size#7 malloc::size#6 ] ] with [ zp[2]:89 [ init_buckets::$15 ] ] - score: 1
Coalescing zero page register [ zp[2]:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 ] ] with [ zp[2]:109 [ malloc::mem#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:28 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:74 [ init_angle_screen::screen#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:37 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]: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[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 ] ] with [ zp[2]:152 [ bsearch16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:64 [ SCREEN_DIST#0 ] ] with [ zp[2]:76 [ init_buckets::screen#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:93 [ init_buckets::$12 ] ] with [ zp[2]:95 [ init_buckets::$16 ] ] - score: 1
Coalescing zero page register [ zp[2]:98 [ init_buckets::$7 ] ] with [ zp[2]:100 [ init_buckets::$13 ] ] - score: 1
Coalescing zero page register [ zp[2]:102 [ init_buckets::$17 ] ] with [ zp[2]:104 [ init_buckets::bucket#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:113 [ init_angle_screen::xw#0 ] ] with [ zp[2]:118 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:116 [ init_angle_screen::yw#0 ] ] with [ zp[2]:120 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:122 [ atan2_16::return#2 ] ] with [ zp[2]:124 [ init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:135 [ sqr::return#2 ] ] with [ zp[2]:137 [ init_dist_screen::yds#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:140 [ sqr::return#3 ] ] with [ zp[2]:142 [ init_dist_screen::xds#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:140 [ sqr::return#3 init_dist_screen::xds#0 ] ] with [ zp[2]:168 [ sqr::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:144 [ init_dist_screen::ds#0 ] ] with [ zp[2]:146 [ sqrt::val#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:154 [ sqrt::found#0 ] ] with [ zp[2]:156 [ sqrt::$3 ] ] - score: 1
Coalescing zero page register [ zp[2]:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 ] ] with [ zp[2]:91 [ init_buckets::$4 ] ] - score: 1
Coalescing zero page register [ zp[2]:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$4 ] ] with [ zp[2]:170 [ SQUARES#1 ] ] - score: 1
Coalescing zero page register [ zp[2]: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[2]:122 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 ] ] with [ zp[2]:154 [ sqrt::found#0 sqrt::$3 ] ] - score: 1
Coalescing zero page register [ zp[2]:98 [ init_buckets::$7 init_buckets::$13 ] ] with [ zp[2]:102 [ init_buckets::$17 init_buckets::bucket#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 ] ] with [ zp[2]:144 [ init_dist_screen::ds#0 sqrt::val#0 ] ] - score: 1
Coalescing zero page register [ zp[2]: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[2]:126 [ init_angle_screen::$11 ] ] - score: 1
Coalescing zero page register [ zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 ] ] with [ zp[2]:158 [ sqrt::$1 ] ] - score: 1
Coalescing zero page register [ zp[2]:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 ] ] with [ zp[2]:150 [ bsearch16u::key#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:10 [ init_buckets::dist#4 init_buckets::dist#6 init_buckets::dist#1 ] ] with [ zp[2]:4 [ main::min_offset#2 main::min_offset#8 main::fill1#0 ] ]
Coalescing zero page register [ zp[2]:12 [ init_buckets::i1#2 init_buckets::i1#1 ] ] with [ zp[2]:7 [ main::min_offset#5 main::min_offset#9 main::offset#0 main::min_offset#11 ] ]
Coalescing zero page register [ zp[2]:21 [ heap_head#18 heap_head#1 ] ] with [ zp[2]:17 [ init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ] ]
Coalescing zero page register [ zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ] with [ zp[1]:2 [ main::bucket_idx#6 main::bucket_idx#1 ] ]
Coalescing zero page register [ zp[2]:26 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#0 init_angle_screen::screen_topline#1 ] ] with [ zp[2]:14 [ init_buckets::i2#2 init_buckets::i2#1 ] ]
Coalescing zero page register [ zp[2]: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[2]:19 [ init_buckets::i4#2 init_buckets::i4#1 ] ]
Coalescing zero page register [ zp[1]:30 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ] with [ zp[1]:6 [ main::min_angle#2 main::min_angle#5 main::min_angle#1 ] ]
Coalescing zero page register [ zp[2]: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[2]:23 [ malloc::size#7 malloc::size#6 init_buckets::$15 malloc::mem#0 init_buckets::$4 SQUARES#1 ] ]
Coalescing zero page register [ zp[1]:46 [ init_dist_screen::y#10 init_dist_screen::y#1 ] ] with [ zp[1]:31 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ]
Coalescing zero page register [ zp[2]:47 [ init_dist_screen::screen_topline#11 init_dist_screen::screen#0 init_dist_screen::screen_topline#1 ] ] with [ zp[2]: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[2]:49 [ init_dist_screen::screen_bottomline#11 init_dist_screen::screen_bottomline#0 init_dist_screen::screen_bottomline#1 ] ] with [ zp[2]: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[2]:55 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 ] ] with [ zp[2]: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[2]:60 [ init_squares::sqr#2 init_squares::sqr#1 ] ] with [ zp[2]: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[2]:79 [ main::bucket#0 ] ] with [ zp[2]:62 [ init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ]
Coalescing zero page register [ zp[1]:81 [ main::bucket_size#0 ] ] with [ zp[1]:52 [ init_dist_screen::x#2 init_dist_screen::x#1 ] ]
Coalescing zero page register [ zp[2]:85 [ main::fill#0 ] ] with [ zp[2]:64 [ SCREEN_DIST#0 init_buckets::screen#0 ] ]
Coalescing zero page register [ zp[2]:87 [ main::angle#0 ] ] with [ zp[2]:72 [ BUCKET_IDX#0 ] ]
Coalescing zero page register [ zp[1]:97 [ init_buckets::distance#0 ] ] with [ zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] ]
Coalescing zero page register [ zp[2]:113 [ init_angle_screen::xw#0 atan2_16::x#0 ] ] with [ zp[2]:93 [ init_buckets::$12 init_buckets::$16 ] ]
Coalescing zero page register [ zp[2]:116 [ init_angle_screen::yw#0 atan2_16::y#0 ] ] with [ zp[2]:98 [ init_buckets::$7 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] ]
Coalescing zero page register [ zp[2]:135 [ sqr::return#2 init_dist_screen::yds#0 ] ] with [ zp[2]:106 [ init_buckets::$8 ] ]
Coalescing zero page register [ zp[2]: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[2]: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[2]: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[2]: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[2]:79 [ main::bucket#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 ] ] with [ zp[2]: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[1]:97 [ init_buckets::distance#0 init_dist_screen::xb#2 init_dist_screen::xb#1 ] ] with [ zp[1]:25 [ init_angle_screen::y#5 init_angle_screen::y#1 main::bucket_idx#6 main::bucket_idx#1 ] ]
Coalescing zero page register [ zp[1]:128 [ init_angle_screen::ang_w#0 ] ] with [ zp[1]:81 [ main::bucket_size#0 init_dist_screen::x#2 init_dist_screen::x#1 ] ]
Coalescing zero page register [ zp[2]:135 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$8 ] ] with [ zp[2]:60 [ init_squares::sqr#2 init_squares::sqr#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ]
Coalescing zero page register [ zp[2]:140 [ sqr::return#3 init_dist_screen::xds#0 sqr::return#0 init_dist_screen::ds#0 sqrt::val#0 bsearch16u::key#0 ] ] with [ zp[2]: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[2]:163 [ bsearch16u::pivot#0 ] ] with [ zp[2]:113 [ init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ] ]
Coalescing zero page register [ zp[2]:165 [ bsearch16u::result#0 ] ] with [ zp[2]:116 [ init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$7 init_buckets::$13 init_buckets::$17 init_buckets::bucket#0 ] ]
Allocated (was zp[2]:21) zp[2]:2 [ heap_head#18 heap_head#1 init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
Allocated (was zp[1]:30) zp[1]:4 [ init_angle_screen::x#2 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
Allocated (was zp[2]:32) zp[2]: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::$4 SQUARES#1 ]
Allocated (was zp[1]:46) zp[1]:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Allocated (was zp[2]:47) zp[2]: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[2]:49) zp[2]: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[2]:55) zp[2]:12 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated (was zp[2]:66) zp[2]:14 [ SCREEN_ANGLE#0 ]
Allocated (was zp[2]:68) zp[2]:16 [ BUCKET_SIZES#0 ]
Allocated (was zp[2]:70) zp[2]:18 [ BUCKETS#0 ]
Allocated (was zp[2]:79) zp[2]:20 [ main::bucket#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 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[2]:85) zp[2]:22 [ main::fill#0 SCREEN_DIST#0 init_buckets::screen#0 ]
Allocated (was zp[2]:87) zp[2]:24 [ main::angle#0 BUCKET_IDX#0 ]
Allocated (was zp[1]:97) zp[1]:26 [ init_buckets::distance#0 init_dist_screen::xb#2 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[1]:128) zp[1]:27 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#2 init_dist_screen::x#1 ]
Allocated (was zp[2]:135) zp[2]:28 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$8 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated (was zp[2]:140) zp[2]:30 [ 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::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[2]:163) zp[2]:32 [ bsearch16u::pivot#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ]
Allocated (was zp[2]:165) zp[2]:34 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$7 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
  .label RASTER = $d012
  .label BORDERCOL = $d020
  // Color Ram
  .label COLS = $d800
  .const SIZEOF_WORD = 2
  // The number of iterations performed during 16-bit CORDIC atan2 calculation
  .const CORDIC_ITERATIONS_16 = $f
  // Screen containing angle to center
  .label SCREEN_FILL = $400
  // Char to fill with
  .const FILL_CHAR = '*'
  // The number of buckets in our bucket sort
  .const NUM_BUCKETS = $30
  .const SIZEOF_BYTE = 1
  .const SIZEOF_POINTER = 2
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt()
  .const NUM_SQUARES = $30
  // Head of the heap. Moved backward each malloc()
  .label heap_head = 2
  // Squares for each byte value SQUARES[i] = i*i
  // Initialized by init_squares()
  .label SQUARES = 5
  .label SCREEN_DIST = $16
  .label SCREEN_ANGLE = $e
  .label BUCKET_SIZES = $10
  .label BUCKETS = $12
  .label BUCKET_IDX = $18
  // @begin
__bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
__b1_from___bbegin:
  jmp __b1
  // @1
__b1:
  // [2] call malloc 
  // [92] phi from @1 to malloc [phi:@1->malloc]
malloc_from___b1:
  // [92] 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
  // [92] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  jmp __b3
  // @3
__b3:
  // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_DIST
  lda.z malloc.mem+1
  sta.z SCREEN_DIST+1
  // [4] call malloc 
  // [92] phi from @3 to malloc [phi:@3->malloc]
malloc_from___b3:
  // [92] phi (word) malloc::size#7 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy 
  jsr malloc
  jmp __b4
  // @4
__b4:
  // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_ANGLE
  lda.z malloc.mem+1
  sta.z SCREEN_ANGLE+1
  // [6] call malloc 
  // [92] phi from @4 to malloc [phi:@4->malloc]
malloc_from___b4:
  // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@4->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy 
  jsr malloc
  jmp __b5
  // @5
__b5:
  // [7] (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
  // [8] call malloc 
  // [92] phi from @5 to malloc [phi:@5->malloc]
malloc_from___b5:
  // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER [phi:@5->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@5->malloc#1] -- register_copy 
  jsr malloc
  jmp __b6
  // @6
__b6:
  // [9] (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
  // [10] call malloc 
  // [92] phi from @6 to malloc [phi:@6->malloc]
malloc_from___b6:
  // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@6->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy 
  jsr malloc
  jmp __b7
  // @7
__b7:
  // [11] (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
  // [12] phi from @7 to @2 [phi:@7->@2]
__b2_from___b7:
  jmp __b2
  // @2
__b2:
  // [13] call main 
  jsr main
  // [14] phi from @2 to @end [phi:@2->@end]
__bend_from___b2:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .label bucket = $14
    .label bucket_size = $1b
    // Animate a spiral walking through the buckets one at a time
    .label bucket_idx = $1a
    .label offset = $a
    .label fill = $16
    .label angle = $18
    // Find the minimum unfilled angle in the current bucket
    .label min_angle = 4
    .label fill1 = 8
    .label min_offset = 8
    .label min_offset_1 = $a
    // asm { sei  }
    sei
    // [16] (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
    // [17] call init_dist_screen 
    // [170] 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:
    // [18] (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
    // [19] call init_angle_screen 
    jsr init_angle_screen
    jmp __b16
    // main::@16
  __b16:
    // [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0
    // [21] call init_buckets 
    // [52] phi from main::@16 to init_buckets [phi:main::@16->init_buckets]
  init_buckets_from___b16:
    jsr init_buckets
    // [22] phi from main::@16 to main::@1 [phi:main::@16->main::@1]
  __b1_from___b16:
    // [22] 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:
    // [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne __b2
    jmp __b3
    // main::@3
  __b3:
    // [24] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
    // [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z bucket_idx
    asl
    // [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) -- pwuz1=pptz2_derefidx_vbuaa 
    tay
    lda (BUCKETS),y
    sta.z bucket
    iny
    lda (BUCKETS),y
    sta.z bucket+1
    // [27] (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
    // [28] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
    lda.z bucket_size
    cmp #0
    beq __b4
    // [29] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
  __b5_from___b3:
    // [29] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z min_angle
    // [29] 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
    // [29] phi (byte) main::i#2 = (byte) 0 [phi:main::@3->main::@5#2] -- vbuxx=vbuc1 
    ldx #0
    jmp __b5
    // main::@5
  __b5:
    // [30] 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:
    // [31] 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:
    // [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (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
    // [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 
    lda #FILL_CHAR
    ldy #0
    sta (fill1),y
    // [34] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // [22] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1]
  __b1_from___b11:
  __b1_from___b12:
    // [22] 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:
    // [35] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
    inc.z bucket_idx
    // [36] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BUCKETS
    cmp.z bucket_idx
    bne __b12
    jmp __b13
    // main::@13
  __b13:
    // [37] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp __b14
    // main::@14
  __b14:
    // [38] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp __b14
    // main::@12
  __b12:
    // [39] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp __b1_from___b12
    // main::@6
  __b6:
    // [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) -- vwuz1=pwuz2_derefidx_vbuaa 
    tay
    lda (bucket),y
    sta.z offset
    iny
    lda (bucket),y
    sta.z offset+1
    // [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (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
    // [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) goto main::@18 -- _deref_pbuz1_eq_vbuc1_then_la1 
    lda #FILL_CHAR
    ldy #0
    cmp (fill),y
    beq __b18
    jmp __b9
    // main::@9
  __b9:
    // [44] (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
    // [45] 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:
    // [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (angle),y
    sta.z min_angle
    // [47] 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:
    // [47] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy 
    // [47] 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:
    // [48] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [49] (word) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
    lda.z min_offset_1
    sta.z min_offset
    lda.z min_offset_1+1
    sta.z min_offset+1
    // [29] phi from main::@8 to main::@5 [phi:main::@8->main::@5]
  __b5_from___b8:
    // [29] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy 
    // [29] phi (word) main::min_offset#2 = (word) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy 
    // [29] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy 
    jmp __b5
    // main::@17
  __b17:
    // [50] (word) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_1
    lda.z min_offset+1
    sta.z min_offset_1+1
    jmp __b8_from___b17
    // main::@18
  __b18:
    // [51] (word) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_1
    lda.z min_offset+1
    sta.z min_offset_1+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* zp($16) screen)
init_buckets: {
    .label __4 = 5
    .label __7 = $22
    .label __8 = $1c
    .label __12 = $20
    .label __13 = $22
    .label screen = $16
    .label dist = 8
    .label i1 = $a
    .label i2 = $14
    .label distance = $1a
    .label bucket = $22
    .label dist_1 = 2
    .label i4 = $1e
    .label __15 = 5
    .label __16 = $20
    .label __17 = $22
    // [53] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
  __b1_from_init_buckets:
    // [53] 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
    // [53] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
  __b1_from___b1:
    // [53] 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:
    // [54] *((byte*)(void*) BUCKET_SIZES#0 + (byte) init_buckets::i#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
    lda #0
    sta (BUCKET_SIZES),y
    // [55] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy 
    iny
    // [56] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(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:
    // [57] (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
    // [58] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
  __b3_from___b2:
    // [58] 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
    // [58] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy 
    jmp __b3
    // [58] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
  __b3_from___b3:
    // [58] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy 
    // [58] 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:
    // [59] *((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
    // [60] (byte*) init_buckets::dist#1 ← ++ (byte*) init_buckets::dist#4 -- pbuz1=_inc_pbuz1 
    inc.z dist
    bne !+
    inc.z dist+1
  !:
    // [61] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
    inc.z i1
    bne !+
    inc.z i1+1
  !:
    // [62] 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
    // [63] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4]
  __b4_from___b3:
    // [63] 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
    // [63] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4]
  __b4_from___b8:
    // [63] 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:
    // [64] (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
    // [65] (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
    // [66] call malloc 
    // [92] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc]
  malloc_from___b4:
    // [92] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy 
    // [92] 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:
    // [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0
    // [68] (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
    // [69] (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
    // [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 -- _deref_pptz1=pwuz2 
    ldy #0
    lda.z __4
    sta (__16),y
    iny
    lda.z __4+1
    sta (__16),y
    // [71] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
    inc.z i2
    bne !+
    inc.z i2+1
  !:
    // [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(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
    // [73] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5]
  __b5_from___b8:
    // [73] 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
    // [73] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
  __b5_from___b5:
    // [73] 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:
    // [74] *((byte*)(void*) BUCKET_IDX#0 + (byte) init_buckets::i3#2) ← (byte) 0 -- pbuz1_derefidx_vbuyy=vbuc1 
    lda #0
    sta (BUCKET_IDX),y
    // [75] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy 
    iny
    // [76] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(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:
    // [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
    lda.z screen
    sta.z dist_1
    lda.z screen+1
    sta.z dist_1+1
    // [78] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7]
  __b7_from___b6:
    // [78] 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
    // [78] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy 
    jmp __b7
    // [78] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7]
  __b7_from___b7:
    // [78] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy 
    // [78] 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:
    // [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (dist_1),y
    sta.z distance
    // [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
    lda.z distance
    sta.z __7
    lda #0
    sta.z __7+1
    // [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z __13
    rol.z __13+1
    // [82] (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
    // [83] (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
    // [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 
    lda.z dist_1
    sec
    sbc.z screen
    sta.z __8
    lda.z dist_1+1
    sbc.z screen+1
    sta.z __8+1
    // [85] (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
    // [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 -- pwuz1_derefidx_vbuaa=vwuz2 
    tay
    lda.z __8
    sta (bucket),y
    iny
    lda.z __8+1
    sta (bucket),y
    // [87] *((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
    // [88] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
    inc.z dist_1
    bne !+
    inc.z dist_1+1
  !:
    // [89] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
    inc.z i4
    bne !+
    inc.z i4+1
  !:
    // [90] 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:
    // [91] 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 zp(5) size)
malloc: {
    .label mem = 5
    .label size = 5
    // [93] (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
    // [94] (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:
    // [95] 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* zp($1e) screen)
init_angle_screen: {
    .label __11 = $a
    .label screen = $1e
    .label screen_topline = $14
    .label screen_bottomline = $1e
    .label xw = $20
    .label yw = $22
    .label angle_w = $a
    .label ang_w = $1b
    .label x = 4
    .label xb = 7
    .label y = $1a
    // [96] (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
    // [97] (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
    // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
  __b1_from_init_angle_screen:
    // [98] 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 
    // [98] 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 
    // [98] 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
    // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
  __b1_from___b4:
    // [98] 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 
    // [98] 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 
    // [98] 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:
    // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
  __b2_from___b1:
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b2
    // init_angle_screen::@2
  __b2:
    // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b3
    jmp __b4
    // init_angle_screen::@4
  __b4:
    // [101] (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
    // [102] (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
  !:
    // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [104] 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:
    // [105] return 
    rts
    // init_angle_screen::@3
  __b3:
    // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // [107] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [108] (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
    // [109] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // [110] (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
    // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [113] call atan2_16 
    jsr atan2_16
    // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    jmp __b5
    // init_angle_screen::@5
  __b5:
    // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // [116] (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
  !:
    // [117] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 -- vbuz1=_hi_vwuz2 
    lda.z __11+1
    sta.z ang_w
    // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    lda.z ang_w
    ldy.z xb
    sta (screen_bottomline),y
    // [119] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1 
    lda.z ang_w
    eor #$ff
    clc
    adc #1
    // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // [121] (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
    // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // [123] (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
    // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_bottomline),y
    // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
  __b2_from___b5:
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy 
    // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy 
    jmp __b2
}
  // atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($20) x, signed word zp($22) y)
atan2_16: {
    .label __2 = 5
    .label __7 = 8
    .label yi = 5
    .label xi = 8
    .label angle = $a
    .label xd = $1c
    .label yd = $c
    .label return = $a
    .label x = $20
    .label y = $22
    // [127] 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:
    // [128] (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
    // [129] 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:
    // [129] 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:
    // [130] 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:
    // [131] (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
    // [132] 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:
    // [132] 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:
    // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
  __b10_from___b6:
    // [133] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z angle
    lda #>0
    sta.z angle+1
    // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    ldx #0
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [133] 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:
    // [134] 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
    // [135] 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:
    // [135] 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:
    // [136] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z angle+1
    ror.z angle
    // [137] 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:
    // [138] (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
    // [139] 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:
    // [139] 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:
    // [140] 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:
    // [141] (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
    // [142] 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:
    // [142] 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:
    // [143] return 
    rts
    // atan2_16::@11
  __b11:
    // [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [145] (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
    // [146] (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
    // [147] 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:
    // [147] 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 
    // [147] 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 
    // [147] 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:
    // [148] 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:
    // [149] 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:
    // [150] (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
    // [151] (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
    // [152] 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:
    // [152] 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 
    // [152] 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:
    // [153] 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:
    // [154] (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
    // [155] (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
    // [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa 
    tay
    sec
    lda.z angle
    sbc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle
    lda.z angle+1
    sbc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle+1
    // [158] 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:
    // [158] 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 
    // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [158] 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:
    // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
    cpx #CORDIC_ITERATIONS_16-1+1
    beq __b12_from___b19
    // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
  __b10_from___b19:
    // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [133] 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:
    // [161] (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
    // [162] (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
    // [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa 
    tay
    clc
    lda.z angle
    adc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle
    lda.z angle+1
    adc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle+1
    jmp __b19_from___b18
    // atan2_16::@14
  __b14:
    // [165] (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
    // [166] (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
    // [167] (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:
    // [168] (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:
    // [169] (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* zp(8) screen)
init_dist_screen: {
    .label screen = 8
    .label screen_bottomline = $a
    .label yds = $1c
    .label screen_topline = 8
    .label y = 7
    .label xds = $1e
    .label ds = $1e
    .label x = $1b
    .label xb = $1a
    // [171] call init_squares 
    // [242] 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:
    // [172] (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
    // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
  __b1_from___b11:
    // [173] 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 
    // [173] 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 
    // [173] 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
    // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
  __b1_from___b7:
    // [173] 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 
    // [173] 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 
    // [173] 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:
    // [174] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z y
    asl
    // [175] 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:
    // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$18+1
    // [177] 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:
    // [177] 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:
    // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
    // [179] call sqr 
    // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
  sqr_from___b4:
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda.z sqr.return
    sta.z sqr.return_1
    lda.z sqr.return+1
    sta.z sqr.return_1+1
    jmp __b12
    // init_dist_screen::@12
  __b12:
    // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
    // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
  __b5_from___b12:
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    jmp __b5
    // init_dist_screen::@5
  __b5:
    // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b6
    jmp __b7
    // init_dist_screen::@7
  __b7:
    // [184] (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
  !:
    // [185] (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
    // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [187] 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:
    // [188] return 
    rts
    // init_dist_screen::@6
  __b6:
    // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // [190] 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:
    // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [192] 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:
    // [192] 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:
    // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
    // [194] call sqr 
    // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
  sqr_from___b10:
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy 
    jsr sqr
    // [195] (word) sqr::return#3 ← (word) sqr::return#0
    jmp __b13
    // init_dist_screen::@13
  __b13:
    // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
    // [197] (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
    // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
    // [199] call sqrt 
    jsr sqrt
    // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0
    jmp __b14
    // init_dist_screen::@14
  __b14:
    // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
    // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_bottomline),y
    // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_bottomline),y
    // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5]
  __b5_from___b14:
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy 
    // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy 
    jmp __b5
    // init_dist_screen::@8
  __b8:
    // [208] (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:
    // [209] (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 zp($1e) val)
sqrt: {
    .label __1 = $c
    .label __3 = $c
    .label found = $c
    .label val = $1e
    // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0
    // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z bsearch16u.items
    lda.z SQUARES+1
    sta.z bsearch16u.items+1
    // [212] call bsearch16u 
    // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
  bsearch16u_from_sqrt:
    jsr bsearch16u
    // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
    jmp __b1
    // sqrt::@1
  __b1:
    // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
    // [215] (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
    // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z __1+1
    ror.z __1
    // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
    lda.z __1
    jmp __breturn
    // sqrt::@return
  __breturn:
    // [218] 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 zp($1e) key, word* zp($c) items, byte register(X) num)
bsearch16u: {
    .label __2 = $c
    .label pivot = $20
    .label result = $22
    .label return = $c
    .label items = $c
    .label key = $1e
    // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
  __b3_from_bsearch16u:
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 
    ldx #NUM_SQUARES
    jmp __b3
    // bsearch16u::@3
  __b3:
    // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 
    cpx #0
    bne __b4
    jmp __b5
    // bsearch16u::@5
  __b5:
    // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
    ldy #1
    lda (items),y
    cmp.z key+1
    bne !+
    dey
    lda (items),y
    cmp.z key
    beq __b2_from___b5
  !:
    bcc __b2_from___b5
    jmp __b1
    // bsearch16u::@1
  __b1:
    // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
    lda.z __2
    sec
    sbc #<1*SIZEOF_WORD
    sta.z __2
    lda.z __2+1
    sbc #>1*SIZEOF_WORD
    sta.z __2+1
    // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
  __b2_from___b1:
  __b2_from___b5:
    // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    jmp __b2
    // bsearch16u::@2
  __b2:
    // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
  __breturn_from___b2:
  __breturn_from___b8:
    // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
    jmp __breturn
    // bsearch16u::@return
  __breturn:
    // [226] return 
    rts
    // bsearch16u::@4
  __b4:
    // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
    txa
    lsr
    // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
    clc
    adc.z items
    sta.z pivot
    lda #0
    adc.z items+1
    sta.z pivot+1
    // [230] (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
    // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    lda.z result+1
    bne __b6
    lda.z result
    bne __b6
    jmp __b8
    // bsearch16u::@8
  __b8:
    // [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
    lda.z pivot
    sta.z return
    lda.z pivot+1
    sta.z return+1
    jmp __breturn_from___b8
    // bsearch16u::@6
  __b6:
    // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
    lda.z result+1
    bmi __b7_from___b6
    bne !+
    lda.z result
    beq __b7_from___b6
  !:
    jmp __b9
    // bsearch16u::@9
  __b9:
    // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc.z pivot
    sta.z items
    lda #0
    adc.z pivot+1
    sta.z items+1
    // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
    dex
    // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
  __b7_from___b6:
  __b7_from___b9:
    // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
    // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
    jmp __b7
    // bsearch16u::@7
  __b7:
    // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
    txa
    lsr
    tax
    // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
  __b3_from___b7:
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
    jmp __b3
}
  // sqr
// Find the square of a byte value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte register(A) val)
sqr: {
    .label return = $1e
    .label return_1 = $1c
    // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [240] (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:
    // [241] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label squares = $14
    .label sqr = $1c
    // [243] call malloc 
    // [92] phi from init_squares to malloc [phi:init_squares->malloc]
  malloc_from_init_squares:
    // [92] 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
    // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
    jsr malloc
    jmp __b3
    // init_squares::@3
  __b3:
    // [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
    // [245] (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
    // [246] phi from init_squares::@3 to init_squares::@1 [phi:init_squares::@3->init_squares::@1]
  __b1_from___b3:
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@3->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@3->init_squares::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z sqr
    lda #>0
    sta.z sqr+1
    // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@3->init_squares::@1#2] -- vbuxx=vbuc1 
    ldx #0
    jmp __b1
    // init_squares::@1
  __b1:
    // [247] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#3) goto init_squares::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #NUM_SQUARES
    bcc __b2
    jmp __breturn
    // init_squares::@return
  __breturn:
    // [248] return 
    rts
    // init_squares::@2
  __b2:
    // [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
    // [246] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
  __b1_from___b2:
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@2->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
    // [246] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@2->init_squares::@1#2] -- register_copy 
    jmp __b1
}
  // 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 __b3
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __b2
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 __b2
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b5
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 __b5
Removing instruction jmp __b7
Removing instruction jmp __breturn
Removing instruction jmp __b9
Removing instruction jmp __b10
Removing instruction jmp __b13
Removing instruction jmp __b14
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b8
Removing instruction jmp __b9
Removing instruction jmp __b7
Removing instruction jmp __breturn
Removing instruction jmp __b3
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
Removing instruction lda #>0
Replacing instruction ldx #0 with TAX
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __bbegin with __b1
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 __b1_from___b4 with __b1
Replacing label __b7_from___b12 with __b7
Replacing label __b8_from___b7 with __b8
Replacing label __b17_from___b15 with __b17
Replacing label __b12_from___b19 with __b12
Replacing label __b19_from___b18 with __b19
Replacing label __b13_from___b14 with __b13
Replacing label __b6_from___b4 with __b6
Replacing label __b3_from___b1 with __b3
Replacing label __b1_from___b7 with __b1
Replacing label __b10_from___b8 with __b10
Replacing label __b4_from___b2 with __b4
Replacing label __b2_from___b5 with __b2
Replacing label __b2_from___b5 with __b2
Replacing label __breturn_from___b8 with __b2
Replacing label __b7_from___b6 with __b7
Replacing label __b7_from___b6 with __b7
Removing instruction __bbegin:
Removing instruction __b1_from___bbegin:
Removing instruction malloc_from___b1:
Removing instruction __b2_from___b7:
Removing instruction __bend_from___b2:
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 __b2_from___b1:
Removing instruction __b3_from___b1:
Removing instruction __b3_from___b2:
Removing instruction __b6_from___b4:
Removing instruction __b6_from___b5:
Removing instruction __b10_from___b6:
Removing instruction __b12_from___b10:
Removing instruction __b12_from___b19:
Removing instruction __b7_from___b12:
Removing instruction __b7_from___b21:
Removing instruction __b8_from___b7:
Removing instruction __b8_from___b9:
Removing instruction __breturn:
Removing instruction __b13_from___b11:
Removing instruction __b13_from___b14:
Removing instruction __b17_from___b15:
Removing instruction __b17_from___b16:
Removing instruction __b19_from___b18:
Removing instruction __b19_from___b20:
Removing instruction __b1_from___b7:
Removing instruction __b4_from___b2:
Removing instruction __b4_from___b3:
Removing instruction sqr_from___b4:
Removing instruction __b5_from___b12:
Removing instruction __b10_from___b8:
Removing instruction __b10_from___b9:
Removing instruction sqr_from___b10:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b5:
Removing instruction __breturn_from___b2:
Removing instruction __breturn_from___b8:
Removing instruction __breturn:
Removing instruction __b7_from___b6:
Removing instruction __b7_from___b9:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __b3:
Removing instruction malloc_from___b3:
Removing instruction __b4:
Removing instruction malloc_from___b4:
Removing instruction __b5:
Removing instruction malloc_from___b5:
Removing instruction __b6:
Removing instruction malloc_from___b6:
Removing instruction __b7:
Removing instruction __b2:
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 __b4:
Removing instruction __breturn:
Removing instruction __b5:
Removing instruction __b2_from___b5:
Removing instruction __b2:
Removing instruction __b5:
Removing instruction __b21:
Removing instruction __b9:
Removing instruction __b15:
Removing instruction __b16:
Removing instruction __b20:
Removing instruction __b10_from___b19:
Removing instruction init_squares_from_init_dist_screen:
Removing instruction __b11:
Removing instruction __b1_from___b11:
Removing instruction __b3:
Removing instruction __b12:
Removing instruction __b7:
Removing instruction __breturn:
Removing instruction __b9:
Removing instruction __b13:
Removing instruction __b14:
Removing instruction __b5_from___b14:
Removing instruction bsearch16u_from_sqrt:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __b3_from_bsearch16u:
Removing instruction __b5:
Removing instruction __b1:
Removing instruction __b8:
Removing instruction __b9:
Removing instruction __b3_from___b7:
Removing instruction __breturn:
Removing instruction malloc_from_init_squares:
Removing instruction __b3:
Removing instruction __b1_from___b3:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Succesful ASM optimization Pass5UnusedLabelElimination
Skipping double jump to __b2 in jmp __b1_from___b12
Replacing jump to rts with rts in jmp __b2
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 __b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction b1:
Succesful ASM optimization Pass5UnusedLabelElimination
Fixing long branch [649] beq __b12 to bne
Fixing long branch [543] bpl __b1 to bmi
Fixing long branch [555] bpl __b4 to bmi

FINAL SYMBOL TABLE
(label) @1
(label) @2
(label) @3
(label) @4
(label) @5
(label) @6
(label) @7
(label) @begin
(label) @end
(const byte*) BORDERCOL = (byte*) 53280
(word**) BUCKETS
(void*) BUCKETS#0 BUCKETS zp[2]:18 0.02531645569620253
(byte*) BUCKET_IDX
(void*) BUCKET_IDX#0 BUCKET_IDX zp[2]:24 0.0425531914893617
(byte*) BUCKET_SIZES
(void*) BUCKET_SIZES#0 BUCKET_SIZES zp[2]:16 0.024691358024691357
(const byte*) COLS = (byte*) 55296
(const word*) CORDIC_ATAN2_ANGLES_16[(const byte) CORDIC_ITERATIONS_16]  = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
        .word 256*2*256*atan(1/pow(2,i))/PI/2
 }}
(const byte) CORDIC_ITERATIONS_16 = (byte) $f
(const byte) FILL_CHAR = (byte) '*'
(const byte*) HEAP_TOP = (byte*) 40960
(const byte) NUM_BUCKETS = (byte) $30
(byte) NUM_SQUARES
(const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(const byte*) RASTER = (byte*) 53266
(byte*) SCREEN_ANGLE
(void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp[2]:14 0.046511627906976744
(byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:22 0.13333333333333333
(const byte*) SCREEN_FILL = (byte*) 1024
(const byte) SIZEOF_BYTE = (byte) 1
(const byte) SIZEOF_POINTER = (byte) 2
(const byte) SIZEOF_WORD = (byte) 2
(word*) SQUARES
(void*) SQUARES#1 SQUARES zp[2]:5 0.03225806451612903
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 zp[2]:5 4.0
(byte~) atan2_16::$22 reg byte a 2002.0
(byte~) atan2_16::$23 reg byte a 2002.0
(signed word~) atan2_16::$7 zp[2]: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[2]:10 3.0
(word) atan2_16::angle#11 angle zp[2]:10 4.0
(word) atan2_16::angle#12 angle zp[2]:10 190.66666666666666
(word) atan2_16::angle#13 angle zp[2]:10 1334.6666666666667
(word) atan2_16::angle#2 angle zp[2]:10 2002.0
(word) atan2_16::angle#3 angle zp[2]:10 2002.0
(word) atan2_16::angle#4 angle zp[2]:10 4.0
(word) atan2_16::angle#5 angle zp[2]:10 4.0
(word) atan2_16::angle#6 angle zp[2]: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[2]:10 34.99999999999999
(word) atan2_16::return#2 return zp[2]: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[2]:32 2.8684210526315796
(signed word) atan2_16::xd
(signed word) atan2_16::xd#1 xd zp[2]:28 6667.333333333333
(signed word) atan2_16::xd#10 xd zp[2]:28 1001.0
(signed word) atan2_16::xd#2 xd zp[2]:28 1001.0
(signed word) atan2_16::xd#3 xd zp[2]:28 7668.333333333332
(signed word) atan2_16::xd#5 xd zp[2]:28 1001.0
(signed word) atan2_16::xi
(signed word) atan2_16::xi#0 xi zp[2]:8 6.0
(signed word) atan2_16::xi#1 xi zp[2]:8 500.5
(signed word) atan2_16::xi#13 xi zp[2]:8 4.0
(signed word) atan2_16::xi#2 xi zp[2]:8 500.5
(signed word) atan2_16::xi#3 xi zp[2]:8 267.0666666666667
(signed word) atan2_16::xi#8 xi zp[2]:8 1001.0
(signed word) atan2_16::y
(signed word) atan2_16::y#0 y zp[2]:34 2.724999999999999
(signed word) atan2_16::yd
(signed word) atan2_16::yd#1 yd zp[2]:12 10001.0
(signed word) atan2_16::yd#10 yd zp[2]:12 2002.0
(signed word) atan2_16::yd#2 yd zp[2]:12 2002.0
(signed word) atan2_16::yd#3 yd zp[2]:12 4601.0
(signed word) atan2_16::yd#5 yd zp[2]:12 2002.0
(signed word) atan2_16::yi
(signed word) atan2_16::yi#0 yi zp[2]:5 1.2000000000000002
(signed word) atan2_16::yi#1 yi zp[2]:5 667.3333333333334
(signed word) atan2_16::yi#16 yi zp[2]:5 4.0
(signed word) atan2_16::yi#2 yi zp[2]:5 667.3333333333334
(signed word) atan2_16::yi#3 yi zp[2]:5 353.4117647058823
(signed word) atan2_16::yi#8 yi zp[2]: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 zp[2]:12 4.0
(byte~) bsearch16u::$6 reg byte a 2002.0
(label) bsearch16u::@1
(label) bsearch16u::@2
(label) bsearch16u::@3
(label) bsearch16u::@4
(label) bsearch16u::@5
(label) bsearch16u::@6
(label) bsearch16u::@7
(label) bsearch16u::@8
(label) bsearch16u::@9
(label) bsearch16u::@return
(word*) bsearch16u::items
(word*) bsearch16u::items#0 items zp[2]:12 1001.0
(word*) bsearch16u::items#1 items zp[2]:12 2.0
(word*) bsearch16u::items#2 items zp[2]:12 334.5555555555556
(word*) bsearch16u::items#8 items zp[2]:12 1501.5
(word) bsearch16u::key
(word) bsearch16u::key#0 key zp[2]:30 0.26666666666666666
(byte) bsearch16u::num
(byte) bsearch16u::num#0 reg byte x 2002.0
(byte) bsearch16u::num#1 reg byte x 2002.0
(byte) bsearch16u::num#3 reg byte x 556.1111111111111
(byte) bsearch16u::num#5 reg byte x 3003.0
(word*) bsearch16u::pivot
(word*) bsearch16u::pivot#0 pivot zp[2]:32 501.0
(signed word) bsearch16u::result
(signed word) bsearch16u::result#0 result zp[2]:34 1501.5
(word*) bsearch16u::return
(word*) bsearch16u::return#1 return zp[2]:12 2.0
(word*) bsearch16u::return#2 return zp[2]:12 6.0
(word*) bsearch16u::return#3 return zp[2]:12 4.0
(word*) bsearch16u::return#6 return zp[2]:12 4.0
(byte*) heap_head
(byte*) heap_head#1 heap_head zp[2]:2 0.24731182795698928
(byte*) heap_head#18 heap_head zp[2]:2 23.0
(void()) init_angle_screen((byte*) init_angle_screen::screen)
(word~) init_angle_screen::$11 zp[2]: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[1]:27 84.16666666666666
(word) init_angle_screen::angle_w
(word) init_angle_screen::angle_w#0 angle_w zp[2]:10 202.0
(byte*) init_angle_screen::screen
(byte*) init_angle_screen::screen#0 screen zp[2]:30 3.0
(byte*) init_angle_screen::screen_bottomline
(byte*) init_angle_screen::screen_bottomline#0 screen_bottomline zp[2]:30 4.0
(byte*) init_angle_screen::screen_bottomline#1 screen_bottomline zp[2]:30 7.333333333333333
(byte*) init_angle_screen::screen_bottomline#6 screen_bottomline zp[2]:30 9.04
(byte*) init_angle_screen::screen_topline
(byte*) init_angle_screen::screen_topline#0 screen_topline zp[2]:20 2.0
(byte*) init_angle_screen::screen_topline#1 screen_topline zp[2]:20 5.5
(byte*) init_angle_screen::screen_topline#6 screen_topline zp[2]:20 9.416666666666666
(byte) init_angle_screen::x
(byte) init_angle_screen::x#1 x zp[1]:4 101.0
(byte) init_angle_screen::x#2 x zp[1]:4 28.857142857142858
(byte) init_angle_screen::xb
(byte) init_angle_screen::xb#1 xb zp[1]:7 202.0
(byte) init_angle_screen::xb#2 xb zp[1]:7 18.363636363636363
(signed word) init_angle_screen::xw
(word) init_angle_screen::xw#0 xw zp[2]:32 33.666666666666664
(byte) init_angle_screen::y
(byte) init_angle_screen::y#1 y zp[1]:26 16.5
(byte) init_angle_screen::y#5 y zp[1]:26 4.730769230769231
(signed word) init_angle_screen::yw
(word) init_angle_screen::yw#0 yw zp[2]:34 50.5
(void()) init_buckets((byte*) init_buckets::screen)
(word~) init_buckets::$12 zp[2]:32 22.0
(word~) init_buckets::$13 zp[2]:34 22.0
(byte~) init_buckets::$14 reg byte a 22.0
(byte*~) init_buckets::$15 zp[2]:5 22.0
(word**~) init_buckets::$16 zp[2]:32 22.0
(word**~) init_buckets::$17 zp[2]:34 22.0
(void*~) init_buckets::$4 zp[2]:5 3.6666666666666665
(word~) init_buckets::$7 zp[2]:34 22.0
(word~) init_buckets::$8 zp[2]:28 11.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[2]:34 7.333333333333333
(byte*) init_buckets::dist
(byte*) init_buckets::dist#1 dist zp[2]:8 7.333333333333333
(byte*) init_buckets::dist#3 dist_1 zp[2]:2 7.333333333333333
(byte*) init_buckets::dist#4 dist zp[2]:8 23.0
(byte*) init_buckets::dist#5 dist_1 zp[2]:2 4.6000000000000005
(byte*) init_buckets::dist#6 dist zp[2]:8 4.0
(byte*) init_buckets::dist#8 dist_1 zp[2]:2 4.0
(byte) init_buckets::distance
(byte) init_buckets::distance#0 distance zp[1]:26 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[2]:10 16.5
(word) init_buckets::i1#2 i1 zp[2]:10 7.333333333333333
(word) init_buckets::i2
(word) init_buckets::i2#1 i2 zp[2]:20 16.5
(word) init_buckets::i2#2 i2 zp[2]:20 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[2]:30 16.5
(word) init_buckets::i4#2 i4 zp[2]:30 2.0
(byte*) init_buckets::screen
(byte*) init_buckets::screen#0 screen zp[2]:22 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[2]:30 202.0
(byte*) init_dist_screen::screen
(byte*) init_dist_screen::screen#0 screen zp[2]:8 1.5
(byte*) init_dist_screen::screen_bottomline
(byte*) init_dist_screen::screen_bottomline#0 screen_bottomline zp[2]:10 4.0
(byte*) init_dist_screen::screen_bottomline#1 screen_bottomline zp[2]:10 7.333333333333333
(byte*) init_dist_screen::screen_bottomline#11 screen_bottomline zp[2]:10 6.848484848484849
(byte*) init_dist_screen::screen_topline
(byte*) init_dist_screen::screen_topline#1 screen_topline zp[2]:8 5.5
(byte*) init_dist_screen::screen_topline#11 screen_topline zp[2]:8 7.0625
(byte) init_dist_screen::x
(byte) init_dist_screen::x#1 x zp[1]:27 101.0
(byte) init_dist_screen::x#2 x zp[1]:27 30.3
(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[1]:26 202.0
(byte) init_dist_screen::xb#2 xb zp[1]:26 19.238095238095237
(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[2]:30 202.0
(byte) init_dist_screen::y
(byte) init_dist_screen::y#1 y zp[1]:7 16.5
(byte) init_dist_screen::y#10 y zp[1]: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[2]:28 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::@3
(label) init_squares::@return
(byte) init_squares::i
(byte) init_squares::i#1 reg byte x 22.0
(byte) init_squares::i#2 reg byte x 6.285714285714286
(word) init_squares::sqr
(word) init_squares::sqr#1 sqr zp[2]:28 11.0
(word) init_squares::sqr#2 sqr zp[2]:28 5.5
(word*) init_squares::squares
(word*) init_squares::squares#0 squares zp[2]:20 4.0
(word*) init_squares::squares#1 squares zp[2]:20 4.4
(word*) init_squares::squares#2 squares zp[2]:20 11.666666666666666
(void()) main()
(byte~) main::$23 reg byte a 22.0
(byte~) main::$24 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[2]:24 151.5
(word*) main::bucket
(word*) main::bucket#0 bucket zp[2]:20 6.588235294117648
(byte) main::bucket_idx
(byte) main::bucket_idx#1 bucket_idx zp[1]:26 11.0
(byte) main::bucket_idx#6 bucket_idx zp[1]:26 2.64
(byte) main::bucket_size
(byte) main::bucket_size#0 bucket_size zp[1]:27 7.6875
(byte*) main::fill
(byte*) main::fill#0 fill zp[2]:22 202.0
(byte*) main::fill1
(byte*) main::fill1#0 fill1 zp[2]: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[1]:4 202.0
(byte) main::min_angle#2 min_angle zp[1]:4 40.4
(byte) main::min_angle#5 min_angle zp[1]:4 134.66666666666666
(word) main::min_offset
(word) main::min_offset#11 min_offset_1 zp[2]:10 202.0
(word) main::min_offset#2 min_offset zp[2]:8 36.11111111111111
(word) main::min_offset#5 min_offset_1 zp[2]:10 202.0
(word) main::min_offset#8 min_offset zp[2]:8 202.0
(word) main::min_offset#9 min_offset_1 zp[2]:10 202.0
(word) main::offset
(word) main::offset#0 offset zp[2]:10 67.33333333333333
(void*()) malloc((word) malloc::size)
(label) malloc::@return
(byte*) malloc::mem
(byte*) malloc::mem#0 mem zp[2]:5 0.4
(void*) malloc::return
(word) malloc::size
(word) malloc::size#6 size zp[2]:5 22.0
(word) malloc::size#7 size zp[2]: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[2]:30 28.5
(word) sqr::return#2 return_1 zp[2]:28 22.0
(word) sqr::return#3 return zp[2]:30 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 zp[2]:12 2.0
(word~) sqrt::$3 zp[2]:12 4.0
(label) sqrt::@1
(label) sqrt::@return
(word*) sqrt::found
(word*) sqrt::found#0 found zp[2]:12 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[2]:30 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[2]:2 [ heap_head#18 heap_head#1 init_buckets::dist#5 init_buckets::dist#8 init_buckets::dist#3 ]
zp[1]:4 [ init_angle_screen::x#2 init_angle_screen::x#1 main::min_angle#2 main::min_angle#5 main::min_angle#1 ]
zp[2]: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::$4 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[1]:7 [ init_dist_screen::y#10 init_dist_screen::y#1 init_angle_screen::xb#2 init_angle_screen::xb#1 ]
zp[2]: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[2]: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[2]:12 [ bsearch16u::return#1 bsearch16u::return#6 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::items#0 bsearch16u::return#3 sqrt::found#0 sqrt::$3 sqrt::$1 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 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[2]:14 [ SCREEN_ANGLE#0 ]
zp[2]:16 [ BUCKET_SIZES#0 ]
zp[2]:18 [ BUCKETS#0 ]
reg byte a [ main::$23 ]
zp[2]:20 [ main::bucket#0 init_squares::squares#2 init_squares::squares#1 init_squares::squares#0 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::$24 ]
zp[2]:22 [ main::fill#0 SCREEN_DIST#0 init_buckets::screen#0 ]
zp[2]:24 [ main::angle#0 BUCKET_IDX#0 ]
zp[1]:26 [ init_buckets::distance#0 init_dist_screen::xb#2 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[1]:27 [ init_angle_screen::ang_w#0 main::bucket_size#0 init_dist_screen::x#2 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::$23 ]
reg byte a [ atan2_16::$22 ]
reg byte a [ init_dist_screen::y2#0 ]
zp[2]:28 [ sqr::return#2 init_dist_screen::yds#0 init_buckets::$8 init_squares::sqr#2 init_squares::sqr#1 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
reg byte a [ init_dist_screen::x2#0 ]
zp[2]:30 [ 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::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 ]
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[2]:32 [ bsearch16u::pivot#0 init_angle_screen::xw#0 atan2_16::x#0 init_buckets::$12 init_buckets::$16 ]
zp[2]:34 [ bsearch16u::result#0 init_angle_screen::yw#0 atan2_16::y#0 init_buckets::$7 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: 1116714

  // 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(__b1)
.pc = $80d "Program"
  // Global Constants & labels
  .label RASTER = $d012
  .label BORDERCOL = $d020
  // Color Ram
  .label COLS = $d800
  .const SIZEOF_WORD = 2
  // The number of iterations performed during 16-bit CORDIC atan2 calculation
  .const CORDIC_ITERATIONS_16 = $f
  // Screen containing angle to center
  .label SCREEN_FILL = $400
  // Char to fill with
  .const FILL_CHAR = '*'
  // The number of buckets in our bucket sort
  .const NUM_BUCKETS = $30
  .const SIZEOF_BYTE = 1
  .const SIZEOF_POINTER = 2
  // Top of the heap used by malloc()
  .label HEAP_TOP = $a000
  // The number of squares to pre-calculate. Limits what values sqr() can calculate and the result of sqrt()
  .const NUM_SQUARES = $30
  // Head of the heap. Moved backward each malloc()
  .label heap_head = 2
  // Squares for each byte value SQUARES[i] = i*i
  // Initialized by init_squares()
  .label SQUARES = 5
  .label SCREEN_DIST = $16
  .label SCREEN_ANGLE = $e
  .label BUCKET_SIZES = $10
  .label BUCKETS = $12
  .label BUCKET_IDX = $18
  // @begin
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
__b1:
  // malloc(1000)
  // [2] call malloc 
  // [92] phi from @1 to malloc [phi:@1->malloc]
  // [92] 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
  // [92] phi (byte*) heap_head#18 = (const byte*) HEAP_TOP [phi:@1->malloc#1] -- pbuz1=pbuc1 
  lda #<HEAP_TOP
  sta.z heap_head
  lda #>HEAP_TOP
  sta.z heap_head+1
  jsr malloc
  // @3
  // malloc(1000)
  // [3] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_DIST
  lda.z malloc.mem+1
  sta.z SCREEN_DIST+1
  // [4] call malloc 
  // [92] phi from @3 to malloc [phi:@3->malloc]
  // [92] phi (word) malloc::size#7 = (word) $3e8 [phi:@3->malloc#0] -- vwuz1=vwuc1 
  lda #<$3e8
  sta.z malloc.size
  lda #>$3e8
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@3->malloc#1] -- register_copy 
  jsr malloc
  // @4
  // malloc(1000)
  // [5] (void*) SCREEN_ANGLE#0 ← (void*)(byte*) malloc::mem#0 -- pvoz1=pvoz2 
  lda.z malloc.mem
  sta.z SCREEN_ANGLE
  lda.z malloc.mem+1
  sta.z SCREEN_ANGLE+1
  // malloc(NUM_BUCKETS*sizeof(byte))
  // [6] call malloc 
  // [92] phi from @4 to malloc [phi:@4->malloc]
  // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@4->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@4->malloc#1] -- register_copy 
  jsr malloc
  // @5
  // malloc(NUM_BUCKETS*sizeof(byte))
  // [7] (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*))
  // [8] call malloc 
  // [92] phi from @5 to malloc [phi:@5->malloc]
  // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_POINTER [phi:@5->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_POINTER
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@5->malloc#1] -- register_copy 
  jsr malloc
  // @6
  // malloc(NUM_BUCKETS*sizeof(word*))
  // [9] (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))
  // [10] call malloc 
  // [92] phi from @6 to malloc [phi:@6->malloc]
  // [92] phi (word) malloc::size#7 = (const byte) NUM_BUCKETS*(const byte) SIZEOF_BYTE [phi:@6->malloc#0] -- vwuz1=vbuc1 
  lda #<NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size
  lda #>NUM_BUCKETS*SIZEOF_BYTE
  sta.z malloc.size+1
  // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:@6->malloc#1] -- register_copy 
  jsr malloc
  // @7
  // malloc(NUM_BUCKETS*sizeof(byte))
  // [11] (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
  // [12] phi from @7 to @2 [phi:@7->@2]
  // @2
  // [13] call main 
  jsr main
  rts
  // [14] phi from @2 to @end [phi:@2->@end]
  // @end
  // main
main: {
    .label bucket = $14
    .label bucket_size = $1b
    // Animate a spiral walking through the buckets one at a time
    .label bucket_idx = $1a
    .label offset = $a
    .label fill = $16
    .label angle = $18
    // Find the minimum unfilled angle in the current bucket
    .label min_angle = 4
    .label fill1 = 8
    .label min_offset = 8
    .label min_offset_1 = $a
    // asm
    // asm { sei  }
    sei
    // init_dist_screen(SCREEN_DIST)
    // [16] (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
    // [17] call init_dist_screen 
    // [170] phi from main to init_dist_screen [phi:main->init_dist_screen]
    jsr init_dist_screen
    // main::@15
    // init_angle_screen(SCREEN_ANGLE)
    // [18] (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
    // [19] call init_angle_screen 
    jsr init_angle_screen
    // main::@16
    // init_buckets(SCREEN_DIST)
    // [20] (byte*) init_buckets::screen#0 ← (byte*)(void*) SCREEN_DIST#0
    // [21] call init_buckets 
    // [52] phi from main::@16 to init_buckets [phi:main::@16->init_buckets]
    jsr init_buckets
    // [22] phi from main::@16 to main::@1 [phi:main::@16->main::@1]
    // [22] 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)
    // [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne __b2
    // main::@3
    // (*BORDERCOL)++;
    // [24] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
    // bucket = BUCKETS[bucket_idx]
    // [25] (byte~) main::$23 ← (byte) main::bucket_idx#6 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z bucket_idx
    asl
    // [26] (word*) main::bucket#0 ← *((word**)(void*) BUCKETS#0 + (byte~) main::$23) -- 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]
    // [27] (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)
    // [28] if((byte) main::bucket_size#0<=(byte) 0) goto main::@4 -- vbuz1_le_0_then_la1 
    cmp #0
    beq __b4
    // [29] phi from main::@3 to main::@5 [phi:main::@3->main::@5]
    // [29] phi (byte) main::min_angle#2 = (byte) $ff [phi:main::@3->main::@5#0] -- vbuz1=vbuc1 
    lda #$ff
    sta.z min_angle
    // [29] 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
    // [29] 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++)
    // [30] 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)
    // [31] 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
    // [32] (byte*) main::fill1#0 ← (const byte*) SCREEN_FILL + (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
    // [33] *((byte*) main::fill1#0) ← (const byte) FILL_CHAR -- _deref_pbuz1=vbuc1 
    lda #FILL_CHAR
    ldy #0
    sta (fill1),y
    // (*BORDERCOL)--;
    // [34] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // [22] phi from main::@11 main::@12 to main::@1 [phi:main::@11/main::@12->main::@1]
    // [22] 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++;
    // [35] (byte) main::bucket_idx#1 ← ++ (byte) main::bucket_idx#6 -- vbuz1=_inc_vbuz1 
    inc.z bucket_idx
    // if(bucket_idx==NUM_BUCKETS)
    // [36] if((byte) main::bucket_idx#1!=(const byte) NUM_BUCKETS) goto main::@12 -- vbuz1_neq_vbuc1_then_la1 
    lda #NUM_BUCKETS
    cmp.z bucket_idx
    bne __b12
    // main::@13
    // (*BORDERCOL)--;
    // [37] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // main::@14
  __b14:
    // (*(COLS+999))++;
    // [38] *((const byte*) COLS+(word) $3e7) ← ++ *((const byte*) COLS+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc COLS+$3e7
    jmp __b14
    // main::@12
  __b12:
    // (*BORDERCOL)--;
    // [39] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    jmp __b2
    // main::@6
  __b6:
    // offset = bucket[i]
    // [40] (byte~) main::$24 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [41] (word) main::offset#0 ← *((word*) main::bucket#0 + (byte~) main::$24) -- vwuz1=pwuz2_derefidx_vbuaa 
    tay
    lda (bucket),y
    sta.z offset
    iny
    lda (bucket),y
    sta.z offset+1
    // fill = SCREEN_FILL+offset
    // [42] (byte*) main::fill#0 ← (const byte*) SCREEN_FILL + (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)
    // [43] if(*((byte*) main::fill#0)==(const byte) FILL_CHAR) 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
    // [44] (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)
    // [45] 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
    // [46] (byte) main::min_angle#1 ← *((byte*) main::angle#0) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (angle),y
    sta.z min_angle
    // [47] phi from main::@10 main::@17 main::@18 to main::@8 [phi:main::@10/main::@17/main::@18->main::@8]
    // [47] phi (byte) main::min_angle#5 = (byte) main::min_angle#1 [phi:main::@10/main::@17/main::@18->main::@8#0] -- register_copy 
    // [47] 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++)
    // [48] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [49] (word) main::min_offset#8 ← (word) main::min_offset#5 -- vwuz1=vwuz2 
    lda.z min_offset_1
    sta.z min_offset
    lda.z min_offset_1+1
    sta.z min_offset+1
    // [29] phi from main::@8 to main::@5 [phi:main::@8->main::@5]
    // [29] phi (byte) main::min_angle#2 = (byte) main::min_angle#5 [phi:main::@8->main::@5#0] -- register_copy 
    // [29] phi (word) main::min_offset#2 = (word) main::min_offset#8 [phi:main::@8->main::@5#1] -- register_copy 
    // [29] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@8->main::@5#2] -- register_copy 
    jmp __b5
    // main::@17
  __b17:
    // [50] (word) main::min_offset#9 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_1
    lda.z min_offset+1
    sta.z min_offset_1+1
    jmp __b8
    // main::@18
  __b18:
    // [51] (word) main::min_offset#11 ← (word) main::min_offset#2 -- vwuz1=vwuz2 
    lda.z min_offset
    sta.z min_offset_1
    lda.z min_offset+1
    sta.z min_offset_1+1
    jmp __b8
}
  // init_buckets
// Initialize buckets containing indices of chars on the screen with specific distances to the center.
// init_buckets(byte* zp($16) screen)
init_buckets: {
    .label __4 = 5
    .label __7 = $22
    .label __8 = $1c
    .label __12 = $20
    .label __13 = $22
    .label screen = $16
    .label dist = 8
    .label i1 = $a
    .label i2 = $14
    .label distance = $1a
    .label bucket = $22
    .label dist_1 = 2
    .label i4 = $1e
    .label __15 = 5
    .label __16 = $20
    .label __17 = $22
    // [53] phi from init_buckets to init_buckets::@1 [phi:init_buckets->init_buckets::@1]
    // [53] phi (byte) init_buckets::i#2 = (byte) 0 [phi:init_buckets->init_buckets::@1#0] -- vbuyy=vbuc1 
    ldy #0
  // Init bucket sizes to 0
    // [53] phi from init_buckets::@1 to init_buckets::@1 [phi:init_buckets::@1->init_buckets::@1]
    // [53] 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
    // [54] *((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)
    // [55] (byte) init_buckets::i#1 ← ++ (byte) init_buckets::i#2 -- vbuyy=_inc_vbuyy 
    iny
    // [56] if((byte) init_buckets::i#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@1 -- vbuyy_neq_vbuc1_then_la1 
    cpy #NUM_BUCKETS-1+1
    bne __b1
    // init_buckets::@2
    // [57] (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
    // [58] phi from init_buckets::@2 to init_buckets::@3 [phi:init_buckets::@2->init_buckets::@3]
    // [58] 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
    // [58] phi (byte*) init_buckets::dist#4 = (byte*) init_buckets::dist#6 [phi:init_buckets::@2->init_buckets::@3#1] -- register_copy 
    // [58] phi from init_buckets::@3 to init_buckets::@3 [phi:init_buckets::@3->init_buckets::@3]
    // [58] phi (word) init_buckets::i1#2 = (word) init_buckets::i1#1 [phi:init_buckets::@3->init_buckets::@3#0] -- register_copy 
    // [58] 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]++;
    // [59] *((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++;
    // [60] (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)
    // [61] (word) init_buckets::i1#1 ← ++ (word) init_buckets::i1#2 -- vwuz1=_inc_vwuz1 
    inc.z i1
    bne !+
    inc.z i1+1
  !:
    // [62] 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
    // [63] phi from init_buckets::@3 to init_buckets::@4 [phi:init_buckets::@3->init_buckets::@4]
    // [63] 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
    // [63] phi from init_buckets::@8 to init_buckets::@4 [phi:init_buckets::@8->init_buckets::@4]
    // [63] 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*))
    // [64] (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
    // [65] (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
    // [66] call malloc 
    // [92] phi from init_buckets::@4 to malloc [phi:init_buckets::@4->malloc]
    // [92] phi (word) malloc::size#7 = (word) malloc::size#6 [phi:init_buckets::@4->malloc#0] -- register_copy 
    // [92] 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*))
    // [67] (void*~) init_buckets::$4 ← (void*)(byte*) malloc::mem#0
    // BUCKETS[i] = malloc(BUCKET_SIZES[i]*sizeof(byte*))
    // [68] (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
    // [69] (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
    // [70] *((word**~) init_buckets::$16) ← (word*)(void*~) init_buckets::$4 -- _deref_pptz1=pwuz2 
    ldy #0
    lda.z __4
    sta (__16),y
    iny
    lda.z __4+1
    sta (__16),y
    // for( word i:0..NUM_BUCKETS-1)
    // [71] (word) init_buckets::i2#1 ← ++ (word) init_buckets::i2#2 -- vwuz1=_inc_vwuz1 
    inc.z i2
    bne !+
    inc.z i2+1
  !:
    // [72] if((word) init_buckets::i2#1!=(const byte) NUM_BUCKETS-(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
    // [73] phi from init_buckets::@8 to init_buckets::@5 [phi:init_buckets::@8->init_buckets::@5]
    // [73] 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
    // [73] phi from init_buckets::@5 to init_buckets::@5 [phi:init_buckets::@5->init_buckets::@5]
    // [73] 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
    // [74] *((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)
    // [75] (byte) init_buckets::i3#1 ← ++ (byte) init_buckets::i3#2 -- vbuyy=_inc_vbuyy 
    iny
    // [76] if((byte) init_buckets::i3#1!=(const byte) NUM_BUCKETS-(byte) 1+(byte) 1) goto init_buckets::@5 -- vbuyy_neq_vbuc1_then_la1 
    cpy #NUM_BUCKETS-1+1
    bne __b5
    // init_buckets::@6
    // [77] (byte*) init_buckets::dist#8 ← (byte*) init_buckets::screen#0 -- pbuz1=pbuz2 
    lda.z screen
    sta.z dist_1
    lda.z screen+1
    sta.z dist_1+1
    // [78] phi from init_buckets::@6 to init_buckets::@7 [phi:init_buckets::@6->init_buckets::@7]
    // [78] 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
    // [78] phi (byte*) init_buckets::dist#5 = (byte*) init_buckets::dist#8 [phi:init_buckets::@6->init_buckets::@7#1] -- register_copy 
    // [78] phi from init_buckets::@7 to init_buckets::@7 [phi:init_buckets::@7->init_buckets::@7]
    // [78] phi (word) init_buckets::i4#2 = (word) init_buckets::i4#1 [phi:init_buckets::@7->init_buckets::@7#0] -- register_copy 
    // [78] 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
    // [79] (byte) init_buckets::distance#0 ← *((byte*) init_buckets::dist#5) -- vbuz1=_deref_pbuz2 
    ldy #0
    lda (dist_1),y
    sta.z distance
    // (word)distance
    // [80] (word~) init_buckets::$7 ← (word)(byte) init_buckets::distance#0 -- vwuz1=_word_vbuz2 
    sta.z __7
    tya
    sta.z __7+1
    // bucket = BUCKETS[(word)distance]
    // [81] (word~) init_buckets::$13 ← (word~) init_buckets::$7 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z __13
    rol.z __13+1
    // [82] (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
    // [83] (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
    // [84] (word~) init_buckets::$8 ← (byte*) init_buckets::dist#5 - (byte*) init_buckets::screen#0 -- vwuz1=pbuz2_minus_pbuz3 
    lda.z dist_1
    sec
    sbc.z screen
    sta.z __8
    lda.z dist_1+1
    sbc.z screen+1
    sta.z __8+1
    // bucket[BUCKET_IDX[distance]] = dist-screen
    // [85] (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
    // [86] *((word*) init_buckets::bucket#0 + (byte~) init_buckets::$14) ← (word~) init_buckets::$8 -- pwuz1_derefidx_vbuaa=vwuz2 
    tay
    lda.z __8
    sta (bucket),y
    iny
    lda.z __8+1
    sta (bucket),y
    // BUCKET_IDX[distance]++;
    // [87] *((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++;
    // [88] (byte*) init_buckets::dist#3 ← ++ (byte*) init_buckets::dist#5 -- pbuz1=_inc_pbuz1 
    inc.z dist_1
    bne !+
    inc.z dist_1+1
  !:
    // for(word i:0..999)
    // [89] (word) init_buckets::i4#1 ← ++ (word) init_buckets::i4#2 -- vwuz1=_inc_vwuz1 
    inc.z i4
    bne !+
    inc.z i4+1
  !:
    // [90] 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
    // }
    // [91] 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 zp(5) size)
malloc: {
    .label mem = 5
    .label size = 5
    // mem = heap_head-size
    // [93] (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
    // [94] (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
    // }
    // [95] 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* zp($1e) screen)
init_angle_screen: {
    .label __11 = $a
    .label screen = $1e
    .label screen_topline = $14
    .label screen_bottomline = $1e
    .label xw = $20
    .label yw = $22
    .label angle_w = $a
    .label ang_w = $1b
    .label x = 4
    .label xb = 7
    .label y = $1a
    // screen_topline = screen+40*12
    // [96] (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
    // [97] (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
    // [98] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
    // [98] 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 
    // [98] 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 
    // [98] 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
    // [98] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
    // [98] 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 
    // [98] 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 
    // [98] 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:
    // [99] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [99] phi (byte) init_angle_screen::x#2 = (byte) 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    // init_angle_screen::@2
  __b2:
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [100] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b3
    // init_angle_screen::@4
    // screen_topline -= 40
    // [101] (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
    // [102] (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)
    // [103] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [104] 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
    // }
    // [105] return 
    rts
    // init_angle_screen::@3
  __b3:
    // x*2
    // [106] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // 39-x*2
    // [107] (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 }
    // [108] (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
    // [109] (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 }
    // [110] (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)
    // [111] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0
    // [112] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0
    // [113] call atan2_16 
    jsr atan2_16
    // [114] (word) atan2_16::return#2 ← (word) atan2_16::return#0
    // init_angle_screen::@5
    // angle_w = atan2_16(xw, yw)
    // [115] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2
    // angle_w+0x0080
    // [116] (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)
    // [117] (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
    // [118] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3 
    ldy.z xb
    sta (screen_bottomline),y
    // -ang_w
    // [119] (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
    // [120] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_topline),y
    // 0x80+ang_w
    // [121] (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
    // [122] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // 0x80-ang_w
    // [123] (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
    // [124] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [125] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [126] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [99] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
    // [99] phi (byte) init_angle_screen::xb#2 = (byte) init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy 
    // [99] phi (byte) init_angle_screen::x#2 = (byte) init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy 
    jmp __b2
}
  // atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($20) x, signed word zp($22) y)
atan2_16: {
    .label __2 = 5
    .label __7 = 8
    .label yi = 5
    .label xi = 8
    .label angle = $a
    .label xd = $1c
    .label yd = $c
    .label return = $a
    .label x = $20
    .label y = $22
    // (y>=0)?y:-y
    // [127] 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
    // [128] (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
    // [129] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
    // [129] 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
    // [130] 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
    // [131] (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
    // [132] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
    // [132] 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:
    // [133] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
    // [133] phi (word) atan2_16::angle#12 = (word) 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z angle
    sta.z angle+1
    // [133] phi (byte) atan2_16::i#2 = (byte) 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1 
    tax
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy 
    // [133] 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)
    // [134] 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
    // [135] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
    // [135] 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
    // [136] (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)
    // [137] 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
    // [138] (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
    // [139] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
    // [139] 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)
    // [140] 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
    // [141] (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
    // [142] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
    // [142] 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
    // }
    // [143] return 
    rts
    // atan2_16::@11
  __b11:
    // [144] (byte) atan2_16::shift#5 ← (byte) atan2_16::i#2 -- vbuyy=vbuxx 
    txa
    tay
    // [145] (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
    // [146] (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
    // [147] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
    // [147] 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 
    // [147] 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 
    // [147] 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)
    // [148] 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)
    // [149] 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
    // [150] (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
    // [151] (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
    // [152] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
    // [152] 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 
    // [152] 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)
    // [153] 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
    // [154] (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
    // [155] (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]
    // [156] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [157] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa 
    tay
    sec
    lda.z angle
    sbc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle
    lda.z angle+1
    sbc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle+1
    // [158] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
    // [158] 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 
    // [158] phi (word) atan2_16::angle#13 = (word) atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy 
    // [158] 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)
    // [159] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [160] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1 
    cpx #CORDIC_ITERATIONS_16-1+1
    bne !__b12+
    jmp __b12
  !__b12:
    // [133] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
    // [133] phi (word) atan2_16::angle#12 = (word) atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy 
    // [133] phi (byte) atan2_16::i#2 = (byte) atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy 
    // [133] phi (signed word) atan2_16::xi#3 = (signed word) atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy 
    // [133] 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
    // [161] (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
    // [162] (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]
    // [163] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 << (byte) 1 -- vbuaa=vbuxx_rol_1 
    txa
    asl
    // [164] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$22) -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa 
    tay
    clc
    lda.z angle
    adc CORDIC_ATAN2_ANGLES_16,y
    sta.z angle
    lda.z angle+1
    adc CORDIC_ATAN2_ANGLES_16+1,y
    sta.z angle+1
    jmp __b19
    // atan2_16::@14
  __b14:
    // xd >>= 2
    // [165] (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
    // [166] (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
    // [167] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 -- vbuyy=vbuyy_minus_2 
    dey
    dey
    jmp __b13
    // atan2_16::@4
  __b4:
    // [168] (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:
    // [169] (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* zp(8) screen)
init_dist_screen: {
    .label screen = 8
    .label screen_bottomline = $a
    .label yds = $1c
    .label screen_topline = 8
    .label y = 7
    .label xds = $1e
    .label ds = $1e
    .label x = $1b
    .label xb = $1a
    // init_squares()
    // [171] call init_squares 
    // [242] 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
    // [172] (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
    // [173] phi from init_dist_screen::@11 to init_dist_screen::@1 [phi:init_dist_screen::@11->init_dist_screen::@1]
    // [173] 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 
    // [173] 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 
    // [173] 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
    // [173] phi from init_dist_screen::@7 to init_dist_screen::@1 [phi:init_dist_screen::@7->init_dist_screen::@1]
    // [173] 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 
    // [173] 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 
    // [173] 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
    // [174] (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)
    // [175] 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
    // [176] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$18+1
    // [177] 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]
    // [177] 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)
    // [178] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
    // [179] call sqr 
    // [238] phi from init_dist_screen::@4 to sqr [phi:init_dist_screen::@4->sqr]
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#0 [phi:init_dist_screen::@4->sqr#0] -- register_copy 
    jsr sqr
    // sqr(yd)
    // [180] (word) sqr::return#2 ← (word) sqr::return#0 -- vwuz1=vwuz2 
    lda.z sqr.return
    sta.z sqr.return_1
    lda.z sqr.return+1
    sta.z sqr.return_1+1
    // init_dist_screen::@12
    // yds = sqr(yd)
    // [181] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
    // [182] phi from init_dist_screen::@12 to init_dist_screen::@5 [phi:init_dist_screen::@12->init_dist_screen::@5]
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) $27 [phi:init_dist_screen::@12->init_dist_screen::@5#0] -- vbuz1=vbuc1 
    lda #$27
    sta.z xb
    // [182] phi (byte) init_dist_screen::x#2 = (byte) 0 [phi:init_dist_screen::@12->init_dist_screen::@5#1] -- vbuz1=vbuc1 
    lda #0
    sta.z x
    // init_dist_screen::@5
  __b5:
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [183] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 -- vbuz1_lt_vbuc1_then_la1 
    lda.z x
    cmp #$13+1
    bcc __b6
    // init_dist_screen::@7
    // screen_topline += 40
    // [184] (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
    // [185] (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)
    // [186] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [187] 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
    // }
    // [188] return 
    rts
    // init_dist_screen::@6
  __b6:
    // x2 = x*2
    // [189] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 
    lda.z x
    asl
    // (x2>=39)?(x2-39):(39-x2)
    // [190] 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
    // [191] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 -- vbuaa=vbuc1_minus_vbuaa 
    eor #$ff
    clc
    adc #$27+1
    // [192] 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]
    // [192] 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)
    // [193] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
    // [194] call sqr 
    // [238] phi from init_dist_screen::@10 to sqr [phi:init_dist_screen::@10->sqr]
    // [238] phi (byte) sqr::val#2 = (byte) sqr::val#1 [phi:init_dist_screen::@10->sqr#0] -- register_copy 
    jsr sqr
    // sqr(xd)
    // [195] (word) sqr::return#3 ← (word) sqr::return#0
    // init_dist_screen::@13
    // xds = sqr(xd)
    // [196] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
    // ds = xds+yds
    // [197] (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)
    // [198] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
    // [199] call sqrt 
    jsr sqrt
    // [200] (byte) sqrt::return#2 ← (byte) sqrt::return#0
    // init_dist_screen::@14
    // d = sqrt(ds)
    // [201] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
    // screen_topline[x] = d
    // [202] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z x
    sta (screen_topline),y
    // screen_bottomline[x] = d
    // [203] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // screen_topline[xb] = d
    // [204] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy.z xb
    sta (screen_topline),y
    // screen_bottomline[xb] = d
    // [205] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 -- pbuz1_derefidx_vbuz2=vbuaa 
    sta (screen_bottomline),y
    // for( byte x=0,xb=39; x<=19; x++, xb--)
    // [206] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 -- vbuz1=_inc_vbuz1 
    inc.z x
    // [207] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 -- vbuz1=_dec_vbuz1 
    dec.z xb
    // [182] phi from init_dist_screen::@14 to init_dist_screen::@5 [phi:init_dist_screen::@14->init_dist_screen::@5]
    // [182] phi (byte) init_dist_screen::xb#2 = (byte) init_dist_screen::xb#1 [phi:init_dist_screen::@14->init_dist_screen::@5#0] -- register_copy 
    // [182] phi (byte) init_dist_screen::x#2 = (byte) init_dist_screen::x#1 [phi:init_dist_screen::@14->init_dist_screen::@5#1] -- register_copy 
    jmp __b5
    // init_dist_screen::@8
  __b8:
    // (x2>=39)?(x2-39):(39-x2)
    // [208] (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)
    // [209] (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 zp($1e) val)
sqrt: {
    .label __1 = $c
    .label __3 = $c
    .label found = $c
    .label val = $1e
    // bsearch16u(val, SQUARES, NUM_SQUARES)
    // [210] (word) bsearch16u::key#0 ← (word) sqrt::val#0
    // [211] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 -- pwuz1=pwuz2 
    lda.z SQUARES
    sta.z bsearch16u.items
    lda.z SQUARES+1
    sta.z bsearch16u.items+1
    // [212] call bsearch16u 
    // [219] phi from sqrt to bsearch16u [phi:sqrt->bsearch16u]
    jsr bsearch16u
    // bsearch16u(val, SQUARES, NUM_SQUARES)
    // [213] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
    // sqrt::@1
    // found = bsearch16u(val, SQUARES, NUM_SQUARES)
    // [214] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
    // found-SQUARES
    // [215] (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
    // [216] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z __1+1
    ror.z __1
    // (byte)(found-SQUARES)
    // [217] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 -- vbuaa=_byte_vwuz1 
    lda.z __1
    // sqrt::@return
    // }
    // [218] 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 zp($1e) key, word* zp($c) items, byte register(X) num)
bsearch16u: {
    .label __2 = $c
    .label pivot = $20
    .label result = $22
    .label return = $c
    .label items = $c
    .label key = $1e
    // [220] phi from bsearch16u to bsearch16u::@3 [phi:bsearch16u->bsearch16u::@3]
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#1 [phi:bsearch16u->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (const byte) NUM_SQUARES#3 [phi:bsearch16u->bsearch16u::@3#1] -- vbuxx=vbuc1 
    ldx #NUM_SQUARES
    // bsearch16u::@3
  __b3:
    // while (num > 0)
    // [221] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 -- vbuxx_gt_0_then_la1 
    cpx #0
    bne __b4
    // bsearch16u::@5
    // *items<=key?items:items-1
    // [222] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 -- _deref_pwuz1_le_vwuz2_then_la1 
    ldy #1
    lda (items),y
    cmp.z key+1
    bne !+
    dey
    lda (items),y
    cmp.z key
    beq __b2
  !:
    bcc __b2
    // bsearch16u::@1
    // [223] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz1_minus_vwuc1 
    lda.z __2
    sec
    sbc #<1*SIZEOF_WORD
    sta.z __2
    lda.z __2+1
    sbc #>1*SIZEOF_WORD
    sta.z __2+1
    // [224] phi from bsearch16u::@1 bsearch16u::@5 to bsearch16u::@2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2]
    // [224] phi (word*) bsearch16u::return#2 = (word*~) bsearch16u::$2 [phi:bsearch16u::@1/bsearch16u::@5->bsearch16u::@2#0] -- register_copy 
    // bsearch16u::@2
  __b2:
    // [225] phi from bsearch16u::@2 bsearch16u::@8 to bsearch16u::@return [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return]
    // [225] phi (word*) bsearch16u::return#1 = (word*) bsearch16u::return#2 [phi:bsearch16u::@2/bsearch16u::@8->bsearch16u::@return#0] -- register_copy 
    // bsearch16u::@return
    // }
    // [226] return 
    rts
    // bsearch16u::@4
  __b4:
    // num >> 1
    // [227] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 -- vbuaa=vbuxx_ror_1 
    txa
    lsr
    // items + (num >> 1)
    // [228] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [229] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 -- pwuz1=pwuz2_plus_vbuaa 
    clc
    adc.z items
    sta.z pivot
    lda #0
    adc.z items+1
    sta.z pivot+1
    // result = (signed int)key-(signed int)*pivot
    // [230] (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)
    // [231] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 -- vwsz1_neq_0_then_la1 
    bne __b6
    lda.z result
    bne __b6
    // bsearch16u::@8
    // [232] (word*) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 -- pwuz1=pwuz2 
    lda.z pivot
    sta.z return
    lda.z pivot+1
    sta.z return+1
    rts
    // bsearch16u::@6
  __b6:
    // if (result > 0)
    // [233] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 -- vwsz1_le_0_then_la1 
    lda.z result+1
    bmi __b7
    bne !+
    lda.z result
    beq __b7
  !:
    // bsearch16u::@9
    // items = pivot+1
    // [234] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD -- pwuz1=pwuz2_plus_vbuc1 
    lda #1*SIZEOF_WORD
    clc
    adc.z pivot
    sta.z items
    lda #0
    adc.z pivot+1
    sta.z items+1
    // num--;
    // [235] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 -- vbuxx=_dec_vbuxx 
    dex
    // [236] phi from bsearch16u::@6 bsearch16u::@9 to bsearch16u::@7 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7]
    // [236] phi (word*) bsearch16u::items#8 = (word*) bsearch16u::items#2 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#0] -- register_copy 
    // [236] phi (byte) bsearch16u::num#5 = (byte) bsearch16u::num#3 [phi:bsearch16u::@6/bsearch16u::@9->bsearch16u::@7#1] -- register_copy 
    // bsearch16u::@7
  __b7:
    // num >>= 1
    // [237] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 -- vbuxx=vbuxx_ror_1 
    txa
    lsr
    tax
    // [220] phi from bsearch16u::@7 to bsearch16u::@3 [phi:bsearch16u::@7->bsearch16u::@3]
    // [220] phi (word*) bsearch16u::items#2 = (word*) bsearch16u::items#8 [phi:bsearch16u::@7->bsearch16u::@3#0] -- register_copy 
    // [220] phi (byte) bsearch16u::num#3 = (byte) bsearch16u::num#0 [phi:bsearch16u::@7->bsearch16u::@3#1] -- register_copy 
    jmp __b3
}
  // sqr
// Find the square of a byte value
// Uses a table of squares that must be initialized by calling init_squares()
// sqr(byte register(A) val)
sqr: {
    .label return = $1e
    .label return_1 = $1c
    // return SQUARES[val];
    // [239] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 -- vbuaa=vbuaa_rol_1 
    asl
    // [240] (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
    // }
    // [241] return 
    rts
}
  // init_squares
// Initialize squares table
// Uses iterative formula (x+1)^2 = x^2 + 2*x + 1
init_squares: {
    .label squares = $14
    .label sqr = $1c
    // malloc(NUM_SQUARES*sizeof(word))
    // [243] call malloc 
    // [92] phi from init_squares to malloc [phi:init_squares->malloc]
    // [92] 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
    // [92] phi (byte*) heap_head#18 = (byte*) heap_head#1 [phi:init_squares->malloc#1] -- register_copy 
    jsr malloc
    // init_squares::@3
    // malloc(NUM_SQUARES*sizeof(word))
    // [244] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
    // squares = SQUARES
    // [245] (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
    // [246] phi from init_squares::@3 to init_squares::@1 [phi:init_squares::@3->init_squares::@1]
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#0 [phi:init_squares::@3->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) 0 [phi:init_squares::@3->init_squares::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z sqr
    sta.z sqr+1
    // [246] phi (byte) init_squares::i#2 = (byte) 0 [phi:init_squares::@3->init_squares::@1#2] -- vbuxx=vbuc1 
    tax
    // init_squares::@1
  __b1:
    // for(byte i=0;i<NUM_SQUARES;i++)
    // [247] if((byte) init_squares::i#2<(const byte) NUM_SQUARES#3) goto init_squares::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #NUM_SQUARES
    bcc __b2
    // init_squares::@return
    // }
    // [248] return 
    rts
    // init_squares::@2
  __b2:
    // *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;i<NUM_SQUARES;i++)
    // [254] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [246] phi from init_squares::@2 to init_squares::@1 [phi:init_squares::@2->init_squares::@1]
    // [246] phi (word*) init_squares::squares#2 = (word*) init_squares::squares#1 [phi:init_squares::@2->init_squares::@1#0] -- register_copy 
    // [246] phi (word) init_squares::sqr#2 = (word) init_squares::sqr#1 [phi:init_squares::@2->init_squares::@1#1] -- register_copy 
    // [246] phi (byte) init_squares::i#2 = (byte) init_squares::i#1 [phi:init_squares::@2->init_squares::@1#2] -- register_copy 
    jmp __b1
}
  // 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


