@begin: scope:[]  from
  [0] phi()
  to:@40
@40: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @40
  [3] phi()
main: scope:[main]  from @40
  [4] phi()
  [5] call sin8s_gen 
  to:main::@5
main::@5: scope:[main]  from main
  [6] phi()
  [7] call print_cls 
  to:main::@1
main::@1: scope:[main]  from main::@5 main::@8
  [8] (byte*) print_char_cursor#45 ← phi( main::@5/(const byte*) print_line_cursor#0 main::@8/(byte*) print_char_cursor#2 )
  [8] (byte) main::i#2 ← phi( main::@5/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@8/(byte) main::i#1 )
  [9] (signed byte) main::sb#0 ← *((const signed byte[192]) main::sintab2#0 + (byte) main::i#2) - (signed byte)*((const byte[]) main::sintabref#0 + (byte) main::i#2)
  [10] if((signed byte) main::sb#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@1
  [11] phi()
  [12] call print_str 
  to:main::@2
main::@2: scope:[main]  from main::@1 main::@3
  [13] (byte*) print_char_cursor#44 ← phi( main::@1/(byte*) print_char_cursor#45 main::@3/(byte*) print_char_cursor#2 )
  [14] (signed byte) print_sbyte::b#1 ← (signed byte) main::sb#0
  [15] call print_sbyte 
  to:main::@7
main::@7: scope:[main]  from main::@2
  [16] phi()
  [17] call print_str 
  to:main::@8
main::@8: scope:[main]  from main::@7
  [18] (byte) main::i#1 ← ++ (byte) main::i#2
  [19] if((byte) main::i#1!=(byte/word/signed word/dword/signed dword) 192) goto main::@1
  to:main::@return
main::@return: scope:[main]  from main::@8
  [20] return 
  to:@return
print_str: scope:[print_str]  from main::@3 main::@7
  [21] (byte*) print_char_cursor#47 ← phi( main::@3/(byte*) print_char_cursor#45 main::@7/(byte*) print_char_cursor#10 )
  [21] (byte*) print_str::str#5 ← phi( main::@3/(const string) main::str1 main::@7/(const string) main::str )
  to:print_str::@1
print_str::@1: scope:[print_str]  from print_str print_str::@2
  [22] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#47 print_str::@2/(byte*) print_char_cursor#1 )
  [22] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 )
  [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2
  to:print_str::@return
print_str::@return: scope:[print_str]  from print_str::@1
  [24] return 
  to:@return
print_str::@2: scope:[print_str]  from print_str::@1
  [25] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3)
  [26] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2
  [27] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3
  to:print_str::@1
print_sbyte: scope:[print_sbyte]  from main::@2
  [28] if((signed byte) print_sbyte::b#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1
  to:print_sbyte::@3
print_sbyte::@3: scope:[print_sbyte]  from print_sbyte
  [29] phi()
  [30] call print_char 
  to:print_sbyte::@2
print_sbyte::@2: scope:[print_sbyte]  from print_sbyte::@3 print_sbyte::@5
  [31] (signed byte) print_sbyte::b#4 ← phi( print_sbyte::@5/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#1 )
  [32] call print_byte 
  to:print_sbyte::@return
print_sbyte::@return: scope:[print_sbyte]  from print_sbyte::@2
  [33] return 
  to:@return
print_sbyte::@1: scope:[print_sbyte]  from print_sbyte
  [34] phi()
  [35] call print_char 
  to:print_sbyte::@5
print_sbyte::@5: scope:[print_sbyte]  from print_sbyte::@1
  [36] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#1
  to:print_sbyte::@2
print_char: scope:[print_char]  from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3
  [37] (byte*) print_char_cursor#29 ← phi( print_byte/(byte*) print_char_cursor#10 print_byte::@1/(byte*) print_char_cursor#10 print_sbyte::@1/(byte*) print_char_cursor#44 print_sbyte::@3/(byte*) print_char_cursor#44 )
  [37] (byte) print_char::ch#4 ← phi( print_byte/(byte) print_char::ch#2 print_byte::@1/(byte) print_char::ch#3 print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' )
  [38] *((byte*) print_char_cursor#29) ← (byte) print_char::ch#4
  [39] (byte*) print_char_cursor#10 ← ++ (byte*) print_char_cursor#29
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  [40] return 
  to:@return
print_byte: scope:[print_byte]  from print_sbyte::@2
  [41] (byte~) print_byte::$0 ← (byte)(signed byte) print_sbyte::b#4 >> (byte/signed byte/word/signed word/dword/signed dword) 4
  [42] (byte) print_char::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0)
  [43] call print_char 
  to:print_byte::@1
print_byte::@1: scope:[print_byte]  from print_byte
  [44] (byte~) print_byte::$2 ← (byte)(signed byte) print_sbyte::b#4 & (byte/signed byte/word/signed word/dword/signed dword) 15
  [45] (byte) print_char::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2)
  [46] call print_char 
  to:print_byte::@return
print_byte::@return: scope:[print_byte]  from print_byte::@1
  [47] return 
  to:@return
print_cls: scope:[print_cls]  from main::@5
  [48] phi()
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls print_cls::@1
  [49] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_line_cursor#0 print_cls::@1/(byte*) print_cls::sc#1 )
  [50] *((byte*) print_cls::sc#2) ← (byte) ' '
  [51] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
  [52] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@1
  [53] return 
  to:@return
sin8s_gen: scope:[sin8s_gen]  from main
  [54] phi()
  [55] call div16u 
  [56] (word) div16u::return#2 ← (word) div16u::return#0
  to:sin8s_gen::@3
sin8s_gen::@3: scope:[sin8s_gen]  from sin8s_gen
  [57] (word) sin8s_gen::step#0 ← (word) div16u::return#2
  to:sin8s_gen::@1
sin8s_gen::@1: scope:[sin8s_gen]  from sin8s_gen::@3 sin8s_gen::@4
  [58] (word) sin8s_gen::i#2 ← phi( sin8s_gen::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s_gen::@4/(word) sin8s_gen::i#1 )
  [58] (signed byte*) sin8s_gen::sintab#2 ← phi( sin8s_gen::@3/(const signed byte[192]) main::sintab2#0 sin8s_gen::@4/(signed byte*) sin8s_gen::sintab#0 )
  [58] (word) sin8s_gen::x#2 ← phi( sin8s_gen::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s_gen::@4/(word) sin8s_gen::x#1 )
  [59] (word) sin8s::x#0 ← (word) sin8s_gen::x#2
  [60] call sin8s 
  [61] (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#1
  to:sin8s_gen::@4
sin8s_gen::@4: scope:[sin8s_gen]  from sin8s_gen::@1
  [62] (signed byte~) sin8s_gen::$1 ← (signed byte) sin8s::return#0
  [63] *((signed byte*) sin8s_gen::sintab#2) ← (signed byte~) sin8s_gen::$1
  [64] (signed byte*) sin8s_gen::sintab#0 ← ++ (signed byte*) sin8s_gen::sintab#2
  [65] (word) sin8s_gen::x#1 ← (word) sin8s_gen::x#2 + (word) sin8s_gen::step#0
  [66] (word) sin8s_gen::i#1 ← ++ (word) sin8s_gen::i#2
  [67] if((word) sin8s_gen::i#1<(const word) main::wavelength#0) goto sin8s_gen::@1
  to:sin8s_gen::@return
sin8s_gen::@return: scope:[sin8s_gen]  from sin8s_gen::@4
  [68] return 
  to:@return
sin8s: scope:[sin8s]  from sin8s_gen::@1
  [69] if((word) sin8s::x#0<(const word) PI_u4f12#0) goto sin8s::@1
  to:sin8s::@5
sin8s::@5: scope:[sin8s]  from sin8s
  [70] (word) sin8s::x#1 ← (word) sin8s::x#0 - (const word) PI_u4f12#0
  to:sin8s::@1
sin8s::@1: scope:[sin8s]  from sin8s sin8s::@5
  [71] (byte) sin8s::isUpper#10 ← phi( sin8s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s::@5/(byte/signed byte/word/signed word/dword/signed dword) 1 )
  [71] (word) sin8s::x#4 ← phi( sin8s/(word) sin8s::x#0 sin8s::@5/(word) sin8s::x#1 )
  [72] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2
  to:sin8s::@6
sin8s::@6: scope:[sin8s]  from sin8s::@1
  [73] (word) sin8s::x#2 ← (const word) PI_u4f12#0 - (word) sin8s::x#4
  to:sin8s::@2
sin8s::@2: scope:[sin8s]  from sin8s::@1 sin8s::@6
  [74] (word) sin8s::x#6 ← phi( sin8s::@1/(word) sin8s::x#4 sin8s::@6/(word) sin8s::x#2 )
  [75] (word~) sin8s::$6 ← (word) sin8s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
  [76] (byte) sin8s::x1#0 ← > (word~) sin8s::$6
  [77] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0
  [78] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0
  [79] call mulu8_sel 
  [80] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12
  to:sin8s::@10
sin8s::@10: scope:[sin8s]  from sin8s::@2
  [81] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0
  [82] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0
  [83] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0
  [84] call mulu8_sel 
  [85] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12
  to:sin8s::@11
sin8s::@11: scope:[sin8s]  from sin8s::@10
  [86] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1
  [87] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0
  [88] call mulu8_sel 
  [89] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12
  to:sin8s::@12
sin8s::@12: scope:[sin8s]  from sin8s::@11
  [90] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2
  [91] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0
  [92] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0
  [93] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0
  [94] call mulu8_sel 
  [95] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12
  to:sin8s::@13
sin8s::@13: scope:[sin8s]  from sin8s::@12
  [96] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10
  [97] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0
  [98] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0
  [99] call mulu8_sel 
  [100] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12
  to:sin8s::@14
sin8s::@14: scope:[sin8s]  from sin8s::@13
  [101] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11
  [102] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
  [103] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0
  [104] if((byte) sin8s::usinx#1<(byte/word/signed word/dword/signed dword) 128) goto sin8s::@3
  to:sin8s::@7
sin8s::@7: scope:[sin8s]  from sin8s::@14
  [105] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1
  to:sin8s::@3
sin8s::@3: scope:[sin8s]  from sin8s::@14 sin8s::@7
  [106] (byte) sin8s::usinx#4 ← phi( sin8s::@14/(byte) sin8s::usinx#1 sin8s::@7/(byte) sin8s::usinx#2 )
  [107] if((byte) sin8s::isUpper#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin8s::@18
  to:sin8s::@8
sin8s::@8: scope:[sin8s]  from sin8s::@3
  [108] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4
  to:sin8s::@4
sin8s::@4: scope:[sin8s]  from sin8s::@18 sin8s::@8
  [109] (signed byte) sin8s::return#1 ← phi( sin8s::@18/(signed byte~) sin8s::return#5 sin8s::@8/(signed byte) sin8s::sinx#1 )
  to:sin8s::@return
sin8s::@return: scope:[sin8s]  from sin8s::@4
  [110] return 
  to:@return
sin8s::@18: scope:[sin8s]  from sin8s::@3
  [111] (signed byte~) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4
  to:sin8s::@4
mulu8_sel: scope:[mulu8_sel]  from sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@13 sin8s::@2
  [112] (byte) mulu8_sel::select#5 ← phi( sin8s::@10/(byte/signed byte/word/signed word/dword/signed dword) 1 sin8s::@11/(byte/signed byte/word/signed word/dword/signed dword) 1 sin8s::@12/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s::@13/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [112] (byte) mulu8_sel::v2#5 ← phi( sin8s::@10/(byte) mulu8_sel::v2#1 sin8s::@11/(const byte) sin8s::DIV_6#0 sin8s::@12/(byte) mulu8_sel::v2#3 sin8s::@13/(byte) mulu8_sel::v2#4 sin8s::@2/(byte) mulu8_sel::v2#0 )
  [112] (byte) mulu8_sel::v1#5 ← phi( sin8s::@10/(byte) mulu8_sel::v1#1 sin8s::@11/(byte) mulu8_sel::v1#2 sin8s::@12/(byte) mulu8_sel::v1#3 sin8s::@13/(byte) mulu8_sel::v1#4 sin8s::@2/(byte) mulu8_sel::v1#0 )
  [113] (byte) mul8u::a#1 ← (byte) mulu8_sel::v1#5
  [114] (byte) mul8u::b#0 ← (byte) mulu8_sel::v2#5
  [115] call mul8u 
  [116] (word) mul8u::return#2 ← (word) mul8u::res#2
  to:mulu8_sel::@2
mulu8_sel::@2: scope:[mulu8_sel]  from mulu8_sel
  [117] (word~) mulu8_sel::$0 ← (word) mul8u::return#2
  [118] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5
  [119] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1
  to:mulu8_sel::@return
mulu8_sel::@return: scope:[mulu8_sel]  from mulu8_sel::@2
  [120] return 
  to:@return
mul8u: scope:[mul8u]  from mulu8_sel
  [121] (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#0
  to:mul8u::@1
mul8u::@1: scope:[mul8u]  from mul8u mul8u::@4
  [122] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 )
  [122] (word) mul8u::res#2 ← phi( mul8u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u::@4/(word) mul8u::res#6 )
  [122] (byte) mul8u::a#2 ← phi( mul8u/(byte) mul8u::a#1 mul8u::@4/(byte) mul8u::a#0 )
  [123] if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2
  to:mul8u::@return
mul8u::@return: scope:[mul8u]  from mul8u::@1
  [124] return 
  to:@return
mul8u::@2: scope:[mul8u]  from mul8u::@1
  [125] (byte~) mul8u::$1 ← (byte) mul8u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1
  [126] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4
  to:mul8u::@7
mul8u::@7: scope:[mul8u]  from mul8u::@2
  [127] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
  to:mul8u::@4
mul8u::@4: scope:[mul8u]  from mul8u::@2 mul8u::@7
  [128] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@7/(word) mul8u::res#1 )
  [129] (byte) mul8u::a#0 ← (byte) mul8u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1
  [130] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
  to:mul8u::@1
div16u: scope:[div16u]  from sin8s_gen
  [131] phi()
  [132] call divr16u 
  [133] (word) divr16u::return#2 ← (word) divr16u::return#0
  to:div16u::@2
div16u::@2: scope:[div16u]  from div16u
  [134] (word) div16u::return#0 ← (word) divr16u::return#2
  to:div16u::@return
div16u::@return: scope:[div16u]  from div16u::@2
  [135] return 
  to:@return
divr16u: scope:[divr16u]  from div16u
  [136] phi()
  to:divr16u::@1
divr16u::@1: scope:[divr16u]  from divr16u divr16u::@3
  [137] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
  [137] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
  [137] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12#0 divr16u::@3/(word) divr16u::dividend#0 )
  [137] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 )
  [138] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [139] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2
  [140] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
  [141] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
  to:divr16u::@4
divr16u::@4: scope:[divr16u]  from divr16u::@1
  [142] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
  to:divr16u::@2
divr16u::@2: scope:[divr16u]  from divr16u::@1 divr16u::@4
  [143] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
  [144] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [145] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [146] if((word) divr16u::rem#5<(const word) main::wavelength#0) goto divr16u::@3
  to:divr16u::@5
divr16u::@5: scope:[divr16u]  from divr16u::@2
  [147] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
  [148] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::wavelength#0
  to:divr16u::@3
divr16u::@3: scope:[divr16u]  from divr16u::@2 divr16u::@5
  [149] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
  [149] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 )
  [150] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
  [151] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
  to:divr16u::@6
divr16u::@6: scope:[divr16u]  from divr16u::@3
  [152] (word) rem16u#1 ← (word) divr16u::rem#10
  to:divr16u::@return
divr16u::@return: scope:[divr16u]  from divr16u::@6
  [153] return 
  to:@return
