@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 ← (void*)(byte*) malloc::mem#0 [4] call malloc to:@4 @4: scope:[] from @3 [5] (void*) SCREEN_ANGLE ← (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 [10] call init_dist_screen to:main::@8 main::@8: scope:[main] from main [11] (byte*) init_angle_screen::screen#0 ← (byte*)(void*) SCREEN_ANGLE [12] call init_angle_screen to:main::@1 main::@1: scope:[main] from main::@7 main::@8 [13] (byte*) main::dist#0 ← (byte*)(void*) SCREEN_DIST [14] (byte*) main::angle#0 ← (byte*)(void*) SCREEN_ANGLE to:main::@2 main::@2: scope:[main] from main::@1 main::@9 [15] (byte*) main::min_fill#5 ← phi( main::@1/(const byte*) SCREEN_FILL main::@9/(byte*) main::min_fill#2 ) [15] (word) main::min_dist_angle#2 ← phi( main::@1/(word) $ffff main::@9/(word~) main::min_dist_angle#6 ) [15] (byte*) main::angle#2 ← phi( main::@1/(byte*) main::angle#0 main::@9/(byte*) main::angle#1 ) [15] (byte*) main::dist#2 ← phi( main::@1/(byte*) main::dist#0 main::@9/(byte*) main::dist#1 ) [15] (byte*) main::fill#2 ← phi( main::@1/(const byte*) SCREEN_FILL main::@9/(byte*) main::fill#1 ) [16] if(*((byte*) main::fill#2)==(const byte) FILL_CHAR) goto main::@10 to:main::@4 main::@4: scope:[main] from main::@2 [17] (word) main::dist_angle#0 ← *((byte*) main::dist#2) w= *((byte*) main::angle#2) [18] if((word) main::dist_angle#0>=(word) main::min_dist_angle#2) goto main::@11 to:main::@5 main::@5: scope:[main] from main::@4 [19] (byte*~) main::min_fill#10 ← (byte*) main::fill#2 to:main::@3 main::@3: scope:[main] from main::@10 main::@11 main::@5 [20] (byte*) main::min_fill#2 ← phi( main::@10/(byte*) main::min_fill#5 main::@11/(byte*) main::min_fill#5 main::@5/(byte*~) main::min_fill#10 ) [20] (word) main::min_dist_angle#3 ← phi( main::@10/(word~) main::min_dist_angle#7 main::@11/(word~) main::min_dist_angle#8 main::@5/(word) main::dist_angle#0 ) [21] (byte*) main::dist#1 ← ++ (byte*) main::dist#2 [22] (byte*) main::angle#1 ← ++ (byte*) main::angle#2 [23] (byte*) main::fill#1 ← ++ (byte*) main::fill#2 [24] if((byte*) main::fill#1<(const byte*) SCREEN_FILL+(word) $3e8) goto main::@9 to:main::@6 main::@6: scope:[main] from main::@3 [25] if((word) main::min_dist_angle#3!=(word) $ffff) goto main::@7 to:main::@return main::@return: scope:[main] from main::@6 [26] return to:@return main::@7: scope:[main] from main::@6 [27] *((byte*) main::min_fill#2) ← (const byte) FILL_CHAR to:main::@1 main::@9: scope:[main] from main::@3 [28] (word~) main::min_dist_angle#6 ← (word) main::min_dist_angle#3 to:main::@2 main::@11: scope:[main] from main::@4 [29] (word~) main::min_dist_angle#8 ← (word) main::min_dist_angle#2 to:main::@3 main::@10: scope:[main] from main::@2 [30] (word~) main::min_dist_angle#7 ← (word) main::min_dist_angle#2 to:main::@3 (void()) init_angle_screen((byte*) init_angle_screen::screen) init_angle_screen: scope:[init_angle_screen] from main::@8 [31] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [32] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c to:init_angle_screen::@1 init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4 [33] (byte*) init_angle_screen::screen_bottomline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_bottomline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_bottomline#1 ) [33] (byte*) init_angle_screen::screen_topline#6 ← phi( init_angle_screen/(byte*) init_angle_screen::screen_topline#0 init_angle_screen::@4/(byte*) init_angle_screen::screen_topline#1 ) [33] (byte) init_angle_screen::y#5 ← phi( init_angle_screen/(byte) 0 init_angle_screen::@4/(byte) init_angle_screen::y#1 ) to:init_angle_screen::@2 init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5 [34] (byte) init_angle_screen::xb#2 ← phi( init_angle_screen::@1/(byte) $27 init_angle_screen::@5/(byte) init_angle_screen::xb#1 ) [34] (byte) init_angle_screen::x#2 ← phi( init_angle_screen::@1/(byte) 0 init_angle_screen::@5/(byte) init_angle_screen::x#1 ) [35] if((byte) init_angle_screen::x#2<(byte) $13+(byte) 1) goto init_angle_screen::@3 to:init_angle_screen::@4 init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2 [36] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [37] (byte*) init_angle_screen::screen_bottomline#1 ← (byte*) init_angle_screen::screen_bottomline#6 + (byte) $28 [38] (byte) init_angle_screen::y#1 ← ++ (byte) init_angle_screen::y#5 [39] if((byte) init_angle_screen::y#1!=(byte) $d) goto init_angle_screen::@1 to:init_angle_screen::@return init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4 [40] return to:@return init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2 [41] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 << (byte) 1 [42] (byte~) init_angle_screen::$4 ← (byte) $27 - (byte~) init_angle_screen::$3 [43] (word) init_angle_screen::xw#0 ← (byte~) init_angle_screen::$4 w= (byte) 0 [44] (byte~) init_angle_screen::$7 ← (byte) init_angle_screen::y#5 << (byte) 1 [45] (word) init_angle_screen::yw#0 ← (byte~) init_angle_screen::$7 w= (byte) 0 [46] (signed word) atan2_16::x#0 ← (signed word)(word) init_angle_screen::xw#0 [47] (signed word) atan2_16::y#0 ← (signed word)(word) init_angle_screen::yw#0 [48] call atan2_16 [49] (word) atan2_16::return#2 ← (word) atan2_16::return#0 to:init_angle_screen::@5 init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3 [50] (word) init_angle_screen::angle_w#0 ← (word) atan2_16::return#2 [51] (word~) init_angle_screen::$11 ← (word) init_angle_screen::angle_w#0 + (byte) $80 [52] (byte) init_angle_screen::ang_w#0 ← > (word~) init_angle_screen::$11 [53] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::xb#2) ← (byte) init_angle_screen::ang_w#0 [54] (byte~) init_angle_screen::$13 ← - (byte) init_angle_screen::ang_w#0 [55] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::xb#2) ← (byte~) init_angle_screen::$13 [56] (byte~) init_angle_screen::$14 ← (byte) $80 + (byte) init_angle_screen::ang_w#0 [57] *((byte*) init_angle_screen::screen_topline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$14 [58] (byte~) init_angle_screen::$15 ← (byte) $80 - (byte) init_angle_screen::ang_w#0 [59] *((byte*) init_angle_screen::screen_bottomline#6 + (byte) init_angle_screen::x#2) ← (byte~) init_angle_screen::$15 [60] (byte) init_angle_screen::x#1 ← ++ (byte) init_angle_screen::x#2 [61] (byte) init_angle_screen::xb#1 ← -- (byte) init_angle_screen::xb#2 to:init_angle_screen::@2 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) atan2_16: scope:[atan2_16] from init_angle_screen::@3 [62] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 to:atan2_16::@2 atan2_16::@2: scope:[atan2_16] from atan2_16 [63] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 to:atan2_16::@3 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 [64] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#16 atan2_16::@2/(signed word~) atan2_16::$2 ) [65] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 to:atan2_16::@5 atan2_16::@5: scope:[atan2_16] from atan2_16::@3 [66] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 [67] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#13 atan2_16::@5/(signed word~) atan2_16::$7 ) to:atan2_16::@10 atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6 [68] (word) atan2_16::angle#12 ← phi( atan2_16::@19/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) [68] (byte) atan2_16::i#2 ← phi( atan2_16::@19/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [68] (signed word) atan2_16::xi#3 ← phi( atan2_16::@19/(signed word) atan2_16::xi#8 atan2_16::@6/(signed word) atan2_16::xi#0 ) [68] (signed word) atan2_16::yi#3 ← phi( atan2_16::@19/(signed word) atan2_16::yi#8 atan2_16::@6/(signed word) atan2_16::yi#0 ) [69] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 to:atan2_16::@12 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19 [70] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@19/(word) atan2_16::angle#13 ) [71] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [72] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 to:atan2_16::@21 atan2_16::@21: scope:[atan2_16] from atan2_16::@12 [73] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 to:atan2_16::@7 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21 [74] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@21/(word) atan2_16::angle#4 ) [75] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 to:atan2_16::@9 atan2_16::@9: scope:[atan2_16] from atan2_16::@7 [76] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 to:atan2_16::@8 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 [77] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) to:atan2_16::@return atan2_16::@return: scope:[atan2_16] from atan2_16::@8 [78] return to:@return atan2_16::@11: scope:[atan2_16] from atan2_16::@10 [79] (byte~) atan2_16::shift#5 ← (byte) atan2_16::i#2 [80] (signed word~) atan2_16::xd#10 ← (signed word) atan2_16::xi#3 [81] (signed word~) atan2_16::yd#10 ← (signed word) atan2_16::yi#3 to:atan2_16::@13 atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14 [82] (signed word) atan2_16::yd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::yd#10 atan2_16::@14/(signed word) atan2_16::yd#1 ) [82] (signed word) atan2_16::xd#3 ← phi( atan2_16::@11/(signed word~) atan2_16::xd#10 atan2_16::@14/(signed word) atan2_16::xd#1 ) [82] (byte) atan2_16::shift#2 ← phi( atan2_16::@11/(byte~) atan2_16::shift#5 atan2_16::@14/(byte) atan2_16::shift#1 ) [83] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 to:atan2_16::@15 atan2_16::@15: scope:[atan2_16] from atan2_16::@13 [84] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 to:atan2_16::@16 atan2_16::@16: scope:[atan2_16] from atan2_16::@15 [85] (signed word) atan2_16::xd#2 ← (signed word) atan2_16::xd#3 >> (signed byte) 1 [86] (signed word) atan2_16::yd#2 ← (signed word) atan2_16::yd#3 >> (signed byte) 1 to:atan2_16::@17 atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16 [87] (signed word) atan2_16::xd#5 ← phi( atan2_16::@15/(signed word) atan2_16::xd#3 atan2_16::@16/(signed word) atan2_16::xd#2 ) [87] (signed word) atan2_16::yd#5 ← phi( atan2_16::@15/(signed word) atan2_16::yd#3 atan2_16::@16/(signed word) atan2_16::yd#2 ) [88] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 to:atan2_16::@20 atan2_16::@20: scope:[atan2_16] from atan2_16::@17 [89] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#5 [90] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#5 [91] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [92] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$24) to:atan2_16::@19 atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20 [93] (signed word) atan2_16::xi#8 ← phi( atan2_16::@18/(signed word) atan2_16::xi#1 atan2_16::@20/(signed word) atan2_16::xi#2 ) [93] (word) atan2_16::angle#13 ← phi( atan2_16::@18/(word) atan2_16::angle#2 atan2_16::@20/(word) atan2_16::angle#3 ) [93] (signed word) atan2_16::yi#8 ← phi( atan2_16::@18/(signed word) atan2_16::yi#1 atan2_16::@20/(signed word) atan2_16::yi#2 ) [94] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 [95] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16-(byte) 1+(byte) 1) goto atan2_16::@12 to:atan2_16::@10 atan2_16::@18: scope:[atan2_16] from atan2_16::@17 [96] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#5 [97] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#5 [98] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [99] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16]) CORDIC_ATAN2_ANGLES_16 + (byte~) atan2_16::$23) to:atan2_16::@19 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 [100] (signed word) atan2_16::xd#1 ← (signed word) atan2_16::xd#3 >> (signed byte) 2 [101] (signed word) atan2_16::yd#1 ← (signed word) atan2_16::yd#3 >> (signed byte) 2 [102] (byte) atan2_16::shift#1 ← (byte) atan2_16::shift#2 - (byte) 2 to:atan2_16::@13 atan2_16::@4: scope:[atan2_16] from atan2_16::@3 [103] (signed word~) atan2_16::xi#13 ← (signed word) atan2_16::x#0 to:atan2_16::@6 atan2_16::@1: scope:[atan2_16] from atan2_16 [104] (signed word~) atan2_16::yi#16 ← (signed word) atan2_16::y#0 to:atan2_16::@3 (void()) init_dist_screen((byte*) init_dist_screen::screen) init_dist_screen: scope:[init_dist_screen] from main [105] phi() [106] call init_squares to:init_dist_screen::@11 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen [107] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 to:init_dist_screen::@1 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@7 [108] (byte*) init_dist_screen::screen_bottomline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen_bottomline#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_bottomline#1 ) [108] (byte*) init_dist_screen::screen_topline#11 ← phi( init_dist_screen::@11/(byte*) init_dist_screen::screen#0 init_dist_screen::@7/(byte*) init_dist_screen::screen_topline#1 ) [108] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@7/(byte) init_dist_screen::y#1 ) [109] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [110] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 to:init_dist_screen::@3 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 [111] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 to:init_dist_screen::@4 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 [112] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) [113] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 [114] call sqr [115] (word) sqr::return#2 ← (word) sqr::return#0 to:init_dist_screen::@12 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@4 [116] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 to:init_dist_screen::@5 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@14 [117] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@12/(byte) $27 init_dist_screen::@14/(byte) init_dist_screen::xb#1 ) [117] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@12/(byte) 0 init_dist_screen::@14/(byte) init_dist_screen::x#1 ) [118] if((byte) init_dist_screen::x#2<(byte) $13+(byte) 1) goto init_dist_screen::@6 to:init_dist_screen::@7 init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 [119] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#11 + (byte) $28 [120] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#11 - (byte) $28 [121] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 [122] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 to:init_dist_screen::@return init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@7 [123] return to:@return init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 [124] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [125] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@8 to:init_dist_screen::@9 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@6 [126] (byte~) init_dist_screen::$14 ← (byte) $27 - (byte) init_dist_screen::x2#0 to:init_dist_screen::@10 init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@9 [127] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@8/(byte~) init_dist_screen::$16 init_dist_screen::@9/(byte~) init_dist_screen::$14 ) [128] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 [129] call sqr [130] (word) sqr::return#3 ← (word) sqr::return#0 to:init_dist_screen::@13 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@10 [131] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [132] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [133] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [134] call sqrt [135] (byte) sqrt::return#2 ← (byte) sqrt::return#0 to:init_dist_screen::@14 init_dist_screen::@14: scope:[init_dist_screen] from init_dist_screen::@13 [136] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 [137] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [138] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [139] *((byte*) init_dist_screen::screen_topline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [140] *((byte*) init_dist_screen::screen_bottomline#11 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [141] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 [142] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 to:init_dist_screen::@5 init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 [143] (byte~) init_dist_screen::$16 ← (byte) init_dist_screen::x2#0 - (byte) $27 to:init_dist_screen::@10 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 [144] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 to:init_dist_screen::@4 (byte()) sqrt((word) sqrt::val) sqrt: scope:[sqrt] from init_dist_screen::@13 [145] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [146] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [147] call bsearch16u [148] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 to:sqrt::@1 sqrt::@1: scope:[sqrt] from sqrt [149] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [150] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [151] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [152] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 to:sqrt::@return sqrt::@return: scope:[sqrt] from sqrt::@1 [153] return to:@return (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) bsearch16u: scope:[bsearch16u] from sqrt [154] phi() to:bsearch16u::@3 bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 [155] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) [155] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) [156] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 to:bsearch16u::@5 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 [157] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 to:bsearch16u::@1 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 [158] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD to:bsearch16u::@2 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 [159] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) to:bsearch16u::@return bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 [160] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) [161] return to:@return bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 [162] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [163] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [164] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [165] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [166] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 to:bsearch16u::@8 bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 [167] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 to:bsearch16u::@return bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 [168] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 to:bsearch16u::@9 bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 [169] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [170] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 to:bsearch16u::@7 bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 [171] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) [171] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) [172] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 to:bsearch16u::@3 (word()) sqr((byte) sqr::val) sqr: scope:[sqr] from init_dist_screen::@10 init_dist_screen::@4 [173] (byte) sqr::val#2 ← phi( init_dist_screen::@10/(byte) sqr::val#1 init_dist_screen::@4/(byte) sqr::val#0 ) [174] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [175] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) to:sqr::@return sqr::@return: scope:[sqr] from sqr [176] return to:@return (void()) init_squares() init_squares: scope:[init_squares] from init_dist_screen [177] phi() [178] call malloc to:init_squares::@2 init_squares::@2: scope:[init_squares] from init_squares [179] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [180] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 to:init_squares::@1 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 [181] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) [181] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) [181] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) [182] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [183] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [184] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [185] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 [186] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [187] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 [188] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 to:init_squares::@return init_squares::@return: scope:[init_squares] from init_squares::@1 [189] return to:@return (void*()) malloc((word) malloc::size) malloc: scope:[malloc] from @1 @3 init_squares [190] (word) malloc::size#3 ← phi( @1/(word) $3e8 @3/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) [190] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_TOP @3/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) [191] (byte*) malloc::mem#0 ← (byte*) heap_head#12 - (word) malloc::size#3 [192] (byte*) heap_head#1 ← (byte*) malloc::mem#0 to:malloc::@return malloc::@return: scope:[malloc] from malloc [193] return to:@return