@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
  to:@2
@2: scope:[]  from @4
  [6] phi()
  [7] call main 
  to:@end
@end: scope:[]  from @2
  [8] phi()

(void()) main()
main: scope:[main]  from @2
  [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0
  [10] call init_dist_screen 
  to:main::@5
main::@5: scope:[main]  from main
  [11] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE#0
  [12] call init_angle_screen 
  to:main::@6
main::@6: scope:[main]  from main::@5
  [13] phi()
  [14] call make_plasma_charset 
  to:main::@7
main::@7: scope:[main]  from main::@6
  [15] phi()
  [16] call memset 
  to:main::@1
main::@1: scope:[main]  from main::@4 main::@7
  [17] (byte) sin_offset_y#14 ← phi( main::@7/(byte) 0 main::@4/(byte) sin_offset_y#12 )
  [17] (byte) sin_offset_x#14 ← phi( main::@7/(byte) 0 main::@4/(byte) sin_offset_x#12 )
  to:main::@2
main::@2: scope:[main]  from main::@1
  [18] phi()
  [19] call doplasma 
  to:main::toD0181
main::toD0181: scope:[main]  from main::@2
  [20] phi()
  to:main::@3
main::@3: scope:[main]  from main::toD0181
  [21] *((const byte*) D018) ← (const byte) main::toD0181_return#0
  [22] call doplasma 
  to:main::toD0182
main::toD0182: scope:[main]  from main::@3
  [23] phi()
  to:main::@4
main::@4: scope:[main]  from main::toD0182
  [24] *((const byte*) D018) ← (const byte) main::toD0182_return#0
  to:main::@1

(void()) doplasma((byte*) doplasma::screen)
doplasma: scope:[doplasma]  from main::@2 main::@3
  [25] (byte*) doplasma::screen#6 ← phi( main::@2/(const byte*) SCREEN1 main::@3/(const byte*) SCREEN2 )
  [25] (byte) sin_offset_y#10 ← phi( main::@2/(byte) sin_offset_y#14 main::@3/(byte) sin_offset_y#12 )
  [25] (byte) sin_offset_x#10 ← phi( main::@2/(byte) sin_offset_x#14 main::@3/(byte) sin_offset_x#12 )
  [26] (byte*) doplasma::angle#0 ← (byte*)(void*) SCREEN_ANGLE#0
  [27] (byte*) doplasma::dist#0 ← (byte*)(void*) SCREEN_DIST#0
  [28] (byte*) doplasma::sin_x#0 ← (const byte*) SINTABLE + (byte) sin_offset_x#10
  [29] (byte*) doplasma::sin_y#0 ← (const byte*) SINTABLE + (byte) sin_offset_y#10
  to:doplasma::@1
doplasma::@1: scope:[doplasma]  from doplasma doplasma::@3
  [30] (byte) doplasma::y#4 ← phi( doplasma/(byte) 0 doplasma::@3/(byte) doplasma::y#1 )
  [30] (byte*) doplasma::screen#5 ← phi( doplasma/(byte*) doplasma::screen#6 doplasma::@3/(byte*) doplasma::screen#2 )
  [30] (byte*) doplasma::dist#4 ← phi( doplasma/(byte*) doplasma::dist#0 doplasma::@3/(byte*) doplasma::dist#1 )
  [30] (byte*) doplasma::angle#4 ← phi( doplasma/(byte*) doplasma::angle#0 doplasma::@3/(byte*) doplasma::angle#1 )
  to:doplasma::@2
doplasma::@2: scope:[doplasma]  from doplasma::@1 doplasma::@2
  [31] (byte) doplasma::x#2 ← phi( doplasma::@1/(byte) 0 doplasma::@2/(byte) doplasma::x#1 )
  [32] (byte~) doplasma::$2 ← *((byte*) doplasma::sin_x#0 + *((byte*) doplasma::angle#4 + (byte) doplasma::x#2)) + *((byte*) doplasma::sin_y#0 + *((byte*) doplasma::dist#4 + (byte) doplasma::x#2))
  [33] *((byte*) doplasma::screen#5 + (byte) doplasma::x#2) ← (byte~) doplasma::$2
  [34] (byte) doplasma::x#1 ← ++ (byte) doplasma::x#2
  [35] if((byte) doplasma::x#1!=(byte) $28) goto doplasma::@2
  to:doplasma::@3
doplasma::@3: scope:[doplasma]  from doplasma::@2
  [36] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28
  [37] (byte*) doplasma::angle#1 ← (byte*) doplasma::angle#4 + (byte) $28
  [38] (byte*) doplasma::dist#1 ← (byte*) doplasma::dist#4 + (byte) $28
  [39] (byte) doplasma::y#1 ← ++ (byte) doplasma::y#4
  [40] if((byte) doplasma::y#1!=(byte) $1a) goto doplasma::@1
  to:doplasma::@4
doplasma::@4: scope:[doplasma]  from doplasma::@3
  [41] (byte) sin_offset_x#12 ← (byte) sin_offset_x#10 - (byte) 3
  [42] (byte) sin_offset_y#12 ← (byte) sin_offset_y#10 - (byte) 7
  to:doplasma::@return
doplasma::@return: scope:[doplasma]  from doplasma::@4
  [43] return 
  to:@return

(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset]  from main::@7 print_cls
  [44] (byte) memset::c#4 ← phi( main::@7/(const byte) BLACK print_cls/(byte) ' ' )
  [44] (void*) memset::str#3 ← phi( main::@7/(void*)(const byte*) COLS print_cls/(void*)(const byte*) print_line_cursor#0 )
  to:memset::@1
memset::@1: scope:[memset]  from memset
  [45] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8
  [46] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
  to:memset::@2
memset::@2: scope:[memset]  from memset::@1 memset::@3
  [47] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
  [48] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
  to:memset::@return
memset::@return: scope:[memset]  from memset::@2
  [49] return 
  to:@return
memset::@3: scope:[memset]  from memset::@2
  [50] *((byte*) memset::dst#2) ← (byte) memset::c#4
  [51] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
  to:memset::@2

(void()) make_plasma_charset((byte*) make_plasma_charset::charset)
make_plasma_charset: scope:[make_plasma_charset]  from main::@6
  [52] phi()
  [53] call sid_rnd_init 
  to:make_plasma_charset::@12
make_plasma_charset::@12: scope:[make_plasma_charset]  from make_plasma_charset
  [54] phi()
  [55] call print_cls 
  to:make_plasma_charset::@1
make_plasma_charset::@1: scope:[make_plasma_charset]  from make_plasma_charset::@11 make_plasma_charset::@12
  [56] (byte*) print_char_cursor#18 ← phi( make_plasma_charset::@11/(byte*) print_char_cursor#30 make_plasma_charset::@12/(const byte*) print_line_cursor#0 )
  [56] (word) make_plasma_charset::c#2 ← phi( make_plasma_charset::@11/(word) make_plasma_charset::c#1 make_plasma_charset::@12/(word) 0 )
  [57] if((word) make_plasma_charset::c#2<(word) $100) goto make_plasma_charset::@2
  to:make_plasma_charset::@return
make_plasma_charset::@return: scope:[make_plasma_charset]  from make_plasma_charset::@1
  [58] return 
  to:@return
make_plasma_charset::@2: scope:[make_plasma_charset]  from make_plasma_charset::@1
  [59] (byte~) make_plasma_charset::$3 ← < (word) make_plasma_charset::c#2
  [60] (byte) make_plasma_charset::s#0 ← *((const byte*) SINTABLE + (byte~) make_plasma_charset::$3)
  to:make_plasma_charset::@3
make_plasma_charset::@3: scope:[make_plasma_charset]  from make_plasma_charset::@2 make_plasma_charset::@7
  [61] (byte) make_plasma_charset::i#2 ← phi( make_plasma_charset::@2/(byte) 0 make_plasma_charset::@7/(byte) make_plasma_charset::i#1 )
  [62] if((byte) make_plasma_charset::i#2<(byte) 8) goto make_plasma_charset::@5
  to:make_plasma_charset::@4
make_plasma_charset::@4: scope:[make_plasma_charset]  from make_plasma_charset::@3
  [63] (byte~) make_plasma_charset::$12 ← (word) make_plasma_charset::c#2 & (byte) 7
  [64] if((byte~) make_plasma_charset::$12!=(byte) 0) goto make_plasma_charset::@11
  to:make_plasma_charset::@10
make_plasma_charset::@10: scope:[make_plasma_charset]  from make_plasma_charset::@4
  [65] phi()
  [66] call print_char 
  to:make_plasma_charset::@11
make_plasma_charset::@11: scope:[make_plasma_charset]  from make_plasma_charset::@10 make_plasma_charset::@4
  [67] (byte*) print_char_cursor#30 ← phi( make_plasma_charset::@10/(byte*) print_char_cursor#1 make_plasma_charset::@4/(byte*) print_char_cursor#18 )
  [68] (word) make_plasma_charset::c#1 ← ++ (word) make_plasma_charset::c#2
  to:make_plasma_charset::@1
make_plasma_charset::@5: scope:[make_plasma_charset]  from make_plasma_charset::@3 make_plasma_charset::@8
  [69] (byte) make_plasma_charset::b#2 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::b#6 make_plasma_charset::@3/(byte) 0 )
  [69] (byte) make_plasma_charset::ii#2 ← phi( make_plasma_charset::@8/(byte) make_plasma_charset::ii#1 make_plasma_charset::@3/(byte) 0 )
  [70] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@6
  to:make_plasma_charset::@7
make_plasma_charset::@7: scope:[make_plasma_charset]  from make_plasma_charset::@5
  [71] (word~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#2 << (byte) 3
  [72] (word~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#2
  [73] (byte*~) make_plasma_charset::$16 ← (const byte*) CHARSET + (word~) make_plasma_charset::$11
  [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2
  [75] (byte) make_plasma_charset::i#1 ← ++ (byte) make_plasma_charset::i#2
  to:make_plasma_charset::@3
make_plasma_charset::@6: scope:[make_plasma_charset]  from make_plasma_charset::@5
  [76] phi()
  [77] call sid_rnd 
  [78] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
  to:make_plasma_charset::@13
make_plasma_charset::@13: scope:[make_plasma_charset]  from make_plasma_charset::@6
  [79] (byte~) make_plasma_charset::$6 ← (byte) sid_rnd::return#2
  [80] (byte~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff
  [81] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@8
  to:make_plasma_charset::@9
make_plasma_charset::@9: scope:[make_plasma_charset]  from make_plasma_charset::@13
  [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2)
  to:make_plasma_charset::@8
make_plasma_charset::@8: scope:[make_plasma_charset]  from make_plasma_charset::@13 make_plasma_charset::@9
  [83] (byte) make_plasma_charset::b#6 ← phi( make_plasma_charset::@9/(byte) make_plasma_charset::b#1 make_plasma_charset::@13/(byte) make_plasma_charset::b#2 )
  [84] (byte) make_plasma_charset::ii#1 ← ++ (byte) make_plasma_charset::ii#2
  to:make_plasma_charset::@5

(byte()) sid_rnd()
sid_rnd: scope:[sid_rnd]  from make_plasma_charset::@6
  [85] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC)
  to:sid_rnd::@return
sid_rnd::@return: scope:[sid_rnd]  from sid_rnd
  [86] return 
  to:@return

(void()) print_char((byte) print_char::ch)
print_char: scope:[print_char]  from make_plasma_charset::@10
  [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0
  [88] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#18
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  [89] return 
  to:@return

(void()) print_cls()
print_cls: scope:[print_cls]  from make_plasma_charset::@12
  [90] phi()
  [91] call memset 
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls
  [92] return 
  to:@return

(void()) sid_rnd_init()
sid_rnd_init: scope:[sid_rnd_init]  from make_plasma_charset
  [93] *((const word*) SID_VOICE3_FREQ) ← (word) $ffff
  [94] *((const byte*) SID_VOICE3_CONTROL) ← (const byte) SID_CONTROL_NOISE
  to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init]  from sid_rnd_init
  [95] return 
  to:@return

(void()) init_angle_screen((byte*) init_angle_screen::screen)
init_angle_screen: scope:[init_angle_screen]  from main::@5
  [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

(void*()) malloc((word) malloc::size)
malloc: scope:[malloc]  from @1 @3 init_squares
  [255] (word) malloc::size#3 ← phi( @1/(word) $3e8 @3/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
  [255] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 )
  [256] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3
  [257] (byte*) heap_head#1 ← (byte*) malloc::mem#0
  to:malloc::@return
malloc::@return: scope:[malloc]  from malloc
  [258] return 
  to:@return
