CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@1 @1: scope:[] from @begin (word) rem16u#0 ← (word) 0 to:@2 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@1/(word) divr16u::divisor#1 ) (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@1/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@1/(word) divr16u::rem#4 ) (word) divr16u::quotient#0 ← (word) 0 (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) (word) divr16u::divisor#4 ← phi( divr16u/(word) divr16u::divisor#6 divr16u::@3/(word) divr16u::divisor#7 ) (word) divr16u::quotient#6 ← phi( divr16u/(word) divr16u::quotient#0 divr16u::@3/(word) divr16u::quotient#8 ) (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#6 ) (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 (word) divr16u::rem#0 ← (word~) divr16u::$0 (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 (bool~) divr16u::$3 ← (number~) divr16u::$2 != (number) 0 (bool~) divr16u::$4 ← ! (bool~) divr16u::$3 if((bool~) divr16u::$4) goto divr16u::@2 to:divr16u::@4 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 (byte) divr16u::i#3 ← phi( divr16u::@1/(byte) divr16u::i#5 divr16u::@4/(byte) divr16u::i#6 ) (word) divr16u::divisor#2 ← phi( divr16u::@1/(word) divr16u::divisor#4 divr16u::@4/(word) divr16u::divisor#5 ) (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) (word) divr16u::quotient#3 ← phi( divr16u::@1/(word) divr16u::quotient#6 divr16u::@4/(word) divr16u::quotient#7 ) (word) divr16u::dividend#4 ← phi( divr16u::@1/(word) divr16u::dividend#3 divr16u::@4/(word) divr16u::dividend#7 ) (word~) divr16u::$6 ← (word) divr16u::dividend#4 << (number) 1 (word) divr16u::dividend#0 ← (word~) divr16u::$6 (word~) divr16u::$7 ← (word) divr16u::quotient#3 << (number) 1 (word) divr16u::quotient#1 ← (word~) divr16u::$7 (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2 (bool~) divr16u::$9 ← ! (bool~) divr16u::$8 if((bool~) divr16u::$9) goto divr16u::@3 to:divr16u::@5 divr16u::@4: scope:[divr16u] from divr16u::@1 (byte) divr16u::i#6 ← phi( divr16u::@1/(byte) divr16u::i#5 ) (word) divr16u::divisor#5 ← phi( divr16u::@1/(word) divr16u::divisor#4 ) (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 ) (word) divr16u::dividend#7 ← phi( divr16u::@1/(word) divr16u::dividend#3 ) (word) divr16u::rem#7 ← phi( divr16u::@1/(word) divr16u::rem#0 ) (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 (word) divr16u::rem#1 ← (number~) divr16u::$5 to:divr16u::@2 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#7 ← phi( divr16u::@2/(word) divr16u::divisor#2 divr16u::@5/(word) divr16u::divisor#3 ) (word) divr16u::quotient#8 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) (word) divr16u::dividend#6 ← phi( divr16u::@2/(word) divr16u::dividend#0 divr16u::@5/(word) divr16u::dividend#8 ) (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) (byte) divr16u::i#2 ← phi( divr16u::@2/(byte) divr16u::i#3 divr16u::@5/(byte) divr16u::i#4 ) (byte) divr16u::i#1 ← (byte) divr16u::i#2 + rangenext(0,$f) (bool~) divr16u::$11 ← (byte) divr16u::i#1 != rangelast(0,$f) if((bool~) divr16u::$11) goto divr16u::@1 to:divr16u::@6 divr16u::@5: scope:[divr16u] from divr16u::@2 (word) divr16u::dividend#8 ← phi( divr16u::@2/(word) divr16u::dividend#0 ) (byte) divr16u::i#4 ← phi( divr16u::@2/(byte) divr16u::i#3 ) (word) divr16u::divisor#3 ← phi( divr16u::@2/(word) divr16u::divisor#2 ) (word) divr16u::rem#8 ← phi( divr16u::@2/(word) divr16u::rem#6 ) (word) divr16u::quotient#4 ← phi( divr16u::@2/(word) divr16u::quotient#1 ) (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#4 (word~) divr16u::$10 ← (word) divr16u::rem#8 - (word) divr16u::divisor#3 (word) divr16u::rem#2 ← (word~) divr16u::$10 to:divr16u::@3 divr16u::@6: scope:[divr16u] from divr16u::@3 (word) divr16u::quotient#5 ← phi( divr16u::@3/(word) divr16u::quotient#8 ) (word) divr16u::rem#9 ← phi( divr16u::@3/(word) divr16u::rem#11 ) (word) rem16u#1 ← (word) divr16u::rem#9 (word) divr16u::return#0 ← (word) divr16u::quotient#5 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 (word) rem16u#14 ← phi( divr16u::@6/(word) rem16u#1 ) (word) divr16u::return#4 ← phi( divr16u::@6/(word) divr16u::return#0 ) (word) divr16u::return#1 ← (word) divr16u::return#4 (word) rem16u#2 ← (word) rem16u#14 return to:@return (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen sin16s_genb (word) rem16u#26 ← phi( sin16s_gen/(word) rem16u#27 sin16s_genb/(word) rem16u#29 ) (word) div32u16u::divisor#2 ← phi( sin16s_gen/(word) div32u16u::divisor#0 sin16s_genb/(word) div32u16u::divisor#1 ) (dword) div32u16u::dividend#2 ← phi( sin16s_gen/(dword) div32u16u::dividend#0 sin16s_genb/(dword) div32u16u::dividend#1 ) (word~) div32u16u::$0 ← > (dword) div32u16u::dividend#2 (word) divr16u::dividend#1 ← (word~) div32u16u::$0 (word) divr16u::divisor#0 ← (word) div32u16u::divisor#2 (word) divr16u::rem#3 ← (number) 0 call divr16u (word) divr16u::return#2 ← (word) divr16u::return#1 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u (word) div32u16u::divisor#3 ← phi( div32u16u/(word) div32u16u::divisor#2 ) (dword) div32u16u::dividend#3 ← phi( div32u16u/(dword) div32u16u::dividend#2 ) (word) rem16u#15 ← phi( div32u16u/(word) rem16u#2 ) (word) divr16u::return#5 ← phi( div32u16u/(word) divr16u::return#2 ) (word~) div32u16u::$1 ← (word) divr16u::return#5 (word) rem16u#3 ← (word) rem16u#15 (word) div32u16u::quotient_hi#0 ← (word~) div32u16u::$1 (word~) div32u16u::$2 ← < (dword) div32u16u::dividend#3 (word) divr16u::dividend#2 ← (word~) div32u16u::$2 (word) divr16u::divisor#1 ← (word) div32u16u::divisor#3 (word) divr16u::rem#4 ← (word) rem16u#3 call divr16u (word) divr16u::return#3 ← (word) divr16u::return#1 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 (word) div32u16u::quotient_hi#1 ← phi( div32u16u::@1/(word) div32u16u::quotient_hi#0 ) (word) rem16u#16 ← phi( div32u16u::@1/(word) rem16u#2 ) (word) divr16u::return#6 ← phi( div32u16u::@1/(word) divr16u::return#3 ) (word~) div32u16u::$3 ← (word) divr16u::return#6 (word) rem16u#4 ← (word) rem16u#16 (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3 (dword) div32u16u::quotient#0 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 } (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 (word) rem16u#17 ← phi( div32u16u::@2/(word) rem16u#4 ) (dword) div32u16u::return#4 ← phi( div32u16u::@2/(dword) div32u16u::return#0 ) (dword) div32u16u::return#1 ← (dword) div32u16u::return#4 (word) rem16u#5 ← (word) rem16u#17 return to:@return (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mulu16_sel (word) mul16u::a#5 ← phi( mulu16_sel/(word) mul16u::a#1 ) (word) mul16u::b#1 ← phi( mulu16_sel/(word) mul16u::b#0 ) (dword) mul16u::res#0 ← (dword) 0 (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#1 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@4 (dword) mul16u::mb#5 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) (dword) mul16u::res#4 ← phi( mul16u/(dword) mul16u::res#0 mul16u::@4/(dword) mul16u::res#6 ) (word) mul16u::a#2 ← phi( mul16u/(word) mul16u::a#5 mul16u::@4/(word) mul16u::a#0 ) (bool~) mul16u::$0 ← (word) mul16u::a#2 != (number) 0 if((bool~) mul16u::$0) goto mul16u::@2 to:mul16u::@3 mul16u::@2: scope:[mul16u] from mul16u::@1 (dword) mul16u::res#5 ← phi( mul16u::@1/(dword) mul16u::res#4 ) (dword) mul16u::mb#4 ← phi( mul16u::@1/(dword) mul16u::mb#5 ) (word) mul16u::a#3 ← phi( mul16u::@1/(word) mul16u::a#2 ) (number~) mul16u::$1 ← (word) mul16u::a#3 & (number) 1 (bool~) mul16u::$2 ← (number~) mul16u::$1 != (number) 0 (bool~) mul16u::$3 ← ! (bool~) mul16u::$2 if((bool~) mul16u::$3) goto mul16u::@4 to:mul16u::@5 mul16u::@3: scope:[mul16u] from mul16u::@1 (dword) mul16u::res#2 ← phi( mul16u::@1/(dword) mul16u::res#4 ) (dword) mul16u::return#0 ← (dword) mul16u::res#2 to:mul16u::@return mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@5 (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#5 mul16u::@5/(dword) mul16u::res#1 ) (dword) mul16u::mb#2 ← phi( mul16u::@2/(dword) mul16u::mb#4 mul16u::@5/(dword) mul16u::mb#3 ) (word) mul16u::a#4 ← phi( mul16u::@2/(word) mul16u::a#3 mul16u::@5/(word) mul16u::a#6 ) (word~) mul16u::$5 ← (word) mul16u::a#4 >> (number) 1 (word) mul16u::a#0 ← (word~) mul16u::$5 (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (number) 1 (dword) mul16u::mb#1 ← (dword~) mul16u::$6 to:mul16u::@1 mul16u::@5: scope:[mul16u] from mul16u::@2 (word) mul16u::a#6 ← phi( mul16u::@2/(word) mul16u::a#3 ) (dword) mul16u::mb#3 ← phi( mul16u::@2/(dword) mul16u::mb#4 ) (dword) mul16u::res#3 ← phi( mul16u::@2/(dword) mul16u::res#5 ) (dword~) mul16u::$4 ← (dword) mul16u::res#3 + (dword) mul16u::mb#3 (dword) mul16u::res#1 ← (dword~) mul16u::$4 to:mul16u::@4 mul16u::@return: scope:[mul16u] from mul16u::@3 (dword) mul16u::return#3 ← phi( mul16u::@3/(dword) mul16u::return#0 ) (dword) mul16u::return#1 ← (dword) mul16u::return#3 return to:@return (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) sin16s_gen: scope:[sin16s_gen] from main (signed word*) sin16s_gen::sintab#6 ← phi( main/(signed word*) sin16s_gen::sintab#1 ) (word) rem16u#27 ← phi( main/(word) rem16u#31 ) (word) sin16s_gen::wavelength#1 ← phi( main/(word) sin16s_gen::wavelength#0 ) (dword) div32u16u::dividend#0 ← (const nomodify dword) PI2_u4f28 (word) div32u16u::divisor#0 ← (word) sin16s_gen::wavelength#1 call div32u16u (dword) div32u16u::return#2 ← (dword) div32u16u::return#1 to:sin16s_gen::@3 sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen (signed word*) sin16s_gen::sintab#5 ← phi( sin16s_gen/(signed word*) sin16s_gen::sintab#6 ) (word) sin16s_gen::wavelength#3 ← phi( sin16s_gen/(word) sin16s_gen::wavelength#1 ) (word) rem16u#18 ← phi( sin16s_gen/(word) rem16u#5 ) (dword) div32u16u::return#5 ← phi( sin16s_gen/(dword) div32u16u::return#2 ) (dword~) sin16s_gen::$0 ← (dword) div32u16u::return#5 (word) rem16u#6 ← (word) rem16u#18 (dword) sin16s_gen::step#0 ← (dword~) sin16s_gen::$0 (dword) sin16s_gen::x#0 ← (dword) 0 (word) sin16s_gen::i#0 ← (word) 0 to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 (dword) sin16s_gen::step#3 ← phi( sin16s_gen::@3/(dword) sin16s_gen::step#0 sin16s_gen::@4/(dword) sin16s_gen::step#1 ) (signed word*) sin16s_gen::sintab#4 ← phi( sin16s_gen::@3/(signed word*) sin16s_gen::sintab#5 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) (word) rem16u#28 ← phi( sin16s_gen::@3/(word) rem16u#6 sin16s_gen::@4/(word) rem16u#34 ) (dword) sin16s_gen::x#4 ← phi( sin16s_gen::@3/(dword) sin16s_gen::x#0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) (word) sin16s_gen::wavelength#2 ← phi( sin16s_gen::@3/(word) sin16s_gen::wavelength#3 sin16s_gen::@4/(word) sin16s_gen::wavelength#4 ) (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(word) sin16s_gen::i#0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) (bool~) sin16s_gen::$1 ← (word) sin16s_gen::i#2 < (word) sin16s_gen::wavelength#2 if((bool~) sin16s_gen::$1) goto sin16s_gen::@2 to:sin16s_gen::@return sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 (word) rem16u#38 ← phi( sin16s_gen::@1/(word) rem16u#28 ) (word) sin16s_gen::wavelength#5 ← phi( sin16s_gen::@1/(word) sin16s_gen::wavelength#2 ) (word) sin16s_gen::i#4 ← phi( sin16s_gen::@1/(word) sin16s_gen::i#2 ) (dword) sin16s_gen::step#2 ← phi( sin16s_gen::@1/(dword) sin16s_gen::step#3 ) (signed word*) sin16s_gen::sintab#3 ← phi( sin16s_gen::@1/(signed word*) sin16s_gen::sintab#4 ) (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@1/(dword) sin16s_gen::x#4 ) (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 call sin16s (signed word) sin16s::return#0 ← (signed word) sin16s::return#2 to:sin16s_gen::@4 sin16s_gen::@4: scope:[sin16s_gen] from sin16s_gen::@2 (word) rem16u#34 ← phi( sin16s_gen::@2/(word) rem16u#38 ) (word) sin16s_gen::wavelength#4 ← phi( sin16s_gen::@2/(word) sin16s_gen::wavelength#5 ) (word) sin16s_gen::i#3 ← phi( sin16s_gen::@2/(word) sin16s_gen::i#4 ) (dword) sin16s_gen::step#1 ← phi( sin16s_gen::@2/(dword) sin16s_gen::step#2 ) (dword) sin16s_gen::x#3 ← phi( sin16s_gen::@2/(dword) sin16s_gen::x#2 ) (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@2/(signed word*) sin16s_gen::sintab#3 ) (signed word) sin16s::return#3 ← phi( sin16s_gen::@2/(signed word) sin16s::return#0 ) (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#3 *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD (dword~) sin16s_gen::$3 ← (dword) sin16s_gen::x#3 + (dword) sin16s_gen::step#1 (dword) sin16s_gen::x#1 ← (dword~) sin16s_gen::$3 (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#3 to:sin16s_gen::@1 sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 (word) rem16u#19 ← phi( sin16s_gen::@1/(word) rem16u#28 ) (word) rem16u#7 ← (word) rem16u#19 return to:@return (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen::@2 (dword) sin16s::x#3 ← phi( sin16s_gen::@2/(dword) sin16s::x#0 ) (byte) sin16s::isUpper#0 ← (byte) 0 (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const nomodify dword) PI_u4f28 (bool~) sin16s::$1 ← ! (bool~) sin16s::$0 if((bool~) sin16s::$1) goto sin16s::@1 to:sin16s::@4 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 (byte) sin16s::isUpper#8 ← phi( sin16s/(byte) sin16s::isUpper#0 sin16s::@4/(byte) sin16s::isUpper#1 ) (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#3 sin16s::@4/(dword) sin16s::x#1 ) (bool~) sin16s::$2 ← (dword) sin16s::x#4 >= (const nomodify dword) PI_HALF_u4f28 (bool~) sin16s::$3 ← ! (bool~) sin16s::$2 if((bool~) sin16s::$3) goto sin16s::@2 to:sin16s::@5 sin16s::@4: scope:[sin16s] from sin16s (dword) sin16s::x#5 ← phi( sin16s/(dword) sin16s::x#3 ) (dword~) sin16s::$16 ← (dword) sin16s::x#5 - (const nomodify dword) PI_u4f28 (dword) sin16s::x#1 ← (dword~) sin16s::$16 (byte) sin16s::isUpper#1 ← (number) 1 to:sin16s::@1 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 (byte) sin16s::isUpper#7 ← phi( sin16s::@1/(byte) sin16s::isUpper#8 sin16s::@5/(byte) sin16s::isUpper#9 ) (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3 (word~) sin16s::$5 ← > (dword~) sin16s::$4 (word) sin16s::x1#0 ← (word~) sin16s::$5 (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 (byte) mulu16_sel::select#0 ← (number) 0 call mulu16_sel (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#6 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 (byte) sin16s::isUpper#6 ← phi( sin16s::@2/(byte) sin16s::isUpper#7 ) (word) sin16s::x1#1 ← phi( sin16s::@2/(word) sin16s::x1#0 ) (word) mulu16_sel::return#12 ← phi( sin16s::@2/(word) mulu16_sel::return#0 ) (word~) sin16s::$6 ← (word) mulu16_sel::return#12 (word) sin16s::x2#0 ← (word~) sin16s::$6 (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 (word) mulu16_sel::v2#1 ← (word) sin16s::x1#1 (byte) mulu16_sel::select#1 ← (number) 1 call mulu16_sel (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#6 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 (byte) sin16s::isUpper#5 ← phi( sin16s::@7/(byte) sin16s::isUpper#6 ) (word) sin16s::x1#4 ← phi( sin16s::@7/(word) sin16s::x1#1 ) (word) mulu16_sel::return#13 ← phi( sin16s::@7/(word) mulu16_sel::return#1 ) (word~) sin16s::$7 ← (word) mulu16_sel::return#13 (word) sin16s::x3#0 ← (word~) sin16s::$7 (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 (word) mulu16_sel::v2#2 ← (number) $10000/(number) 6 (byte) mulu16_sel::select#2 ← (number) 1 call mulu16_sel (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#6 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 (byte) sin16s::isUpper#4 ← phi( sin16s::@8/(byte) sin16s::isUpper#5 ) (word) sin16s::x3#1 ← phi( sin16s::@8/(word) sin16s::x3#0 ) (word) sin16s::x1#2 ← phi( sin16s::@8/(word) sin16s::x1#4 ) (word) mulu16_sel::return#14 ← phi( sin16s::@8/(word) mulu16_sel::return#2 ) (word~) sin16s::$8 ← (word) mulu16_sel::return#14 (word) sin16s::x3_6#0 ← (word~) sin16s::$8 (word~) sin16s::$9 ← (word) sin16s::x1#2 - (word) sin16s::x3_6#0 (word) sin16s::usinx#0 ← (word~) sin16s::$9 (word) mulu16_sel::v1#3 ← (word) sin16s::x3#1 (word) mulu16_sel::v2#3 ← (word) sin16s::x1#2 (byte) mulu16_sel::select#3 ← (number) 0 call mulu16_sel (word) mulu16_sel::return#3 ← (word) mulu16_sel::return#6 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 (byte) sin16s::isUpper#3 ← phi( sin16s::@9/(byte) sin16s::isUpper#4 ) (word) sin16s::usinx#4 ← phi( sin16s::@9/(word) sin16s::usinx#0 ) (word) sin16s::x1#3 ← phi( sin16s::@9/(word) sin16s::x1#2 ) (word) mulu16_sel::return#15 ← phi( sin16s::@9/(word) mulu16_sel::return#3 ) (word~) sin16s::$10 ← (word) mulu16_sel::return#15 (word) sin16s::x4#0 ← (word~) sin16s::$10 (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 (word) mulu16_sel::v2#4 ← (word) sin16s::x1#3 (byte) mulu16_sel::select#4 ← (number) 0 call mulu16_sel (word) mulu16_sel::return#4 ← (word) mulu16_sel::return#6 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 (byte) sin16s::isUpper#2 ← phi( sin16s::@10/(byte) sin16s::isUpper#3 ) (word) sin16s::usinx#2 ← phi( sin16s::@10/(word) sin16s::usinx#4 ) (word) mulu16_sel::return#16 ← phi( sin16s::@10/(word) mulu16_sel::return#4 ) (word~) sin16s::$11 ← (word) mulu16_sel::return#16 (word) sin16s::x5#0 ← (word~) sin16s::$11 (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4 (word) sin16s::x5_128#0 ← (word~) sin16s::$12 (word~) sin16s::$13 ← (word) sin16s::usinx#2 + (word) sin16s::x5_128#0 (word) sin16s::usinx#1 ← (word~) sin16s::$13 (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 (bool~) sin16s::$14 ← (byte) sin16s::isUpper#2 != (number) 0 (bool~) sin16s::$15 ← ! (bool~) sin16s::$14 if((bool~) sin16s::$15) goto sin16s::@3 to:sin16s::@6 sin16s::@5: scope:[sin16s] from sin16s::@1 (byte) sin16s::isUpper#9 ← phi( sin16s::@1/(byte) sin16s::isUpper#8 ) (dword) sin16s::x#7 ← phi( sin16s::@1/(dword) sin16s::x#4 ) (dword~) sin16s::$17 ← (const nomodify dword) PI_u4f28 - (dword) sin16s::x#7 (dword) sin16s::x#2 ← (dword~) sin16s::$17 to:sin16s::@2 sin16s::@3: scope:[sin16s] from sin16s::@11 sin16s::@6 (signed word) sin16s::sinx#2 ← phi( sin16s::@11/(signed word) sin16s::sinx#0 sin16s::@6/(signed word) sin16s::sinx#1 ) (signed word) sin16s::return#1 ← (signed word) sin16s::sinx#2 to:sin16s::@return sin16s::@6: scope:[sin16s] from sin16s::@11 (word) sin16s::usinx#3 ← phi( sin16s::@11/(word) sin16s::usinx#1 ) (signed word~) sin16s::$18 ← - (signed word)(word) sin16s::usinx#3 (signed word) sin16s::sinx#1 ← (signed word~) sin16s::$18 to:sin16s::@3 sin16s::@return: scope:[sin16s] from sin16s::@3 (signed word) sin16s::return#4 ← phi( sin16s::@3/(signed word) sin16s::return#1 ) (signed word) sin16s::return#2 ← (signed word) sin16s::return#4 return to:@return (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 sin16sb::@10 sin16sb::@2 sin16sb::@7 sin16sb::@8 sin16sb::@9 (byte) mulu16_sel::select#11 ← phi( sin16s::@10/(byte) mulu16_sel::select#4 sin16s::@2/(byte) mulu16_sel::select#0 sin16s::@7/(byte) mulu16_sel::select#1 sin16s::@8/(byte) mulu16_sel::select#2 sin16s::@9/(byte) mulu16_sel::select#3 sin16sb::@10/(byte) mulu16_sel::select#9 sin16sb::@2/(byte) mulu16_sel::select#5 sin16sb::@7/(byte) mulu16_sel::select#6 sin16sb::@8/(byte) mulu16_sel::select#7 sin16sb::@9/(byte) mulu16_sel::select#8 ) (word) mulu16_sel::v2#10 ← phi( sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word) mulu16_sel::v2#2 sin16s::@9/(word) mulu16_sel::v2#3 sin16sb::@10/(word) mulu16_sel::v2#9 sin16sb::@2/(word) mulu16_sel::v2#5 sin16sb::@7/(word) mulu16_sel::v2#6 sin16sb::@8/(word) mulu16_sel::v2#7 sin16sb::@9/(word) mulu16_sel::v2#8 ) (word) mulu16_sel::v1#10 ← phi( sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 sin16s::@9/(word) mulu16_sel::v1#3 sin16sb::@10/(word) mulu16_sel::v1#9 sin16sb::@2/(word) mulu16_sel::v1#5 sin16sb::@7/(word) mulu16_sel::v1#6 sin16sb::@8/(word) mulu16_sel::v1#7 sin16sb::@9/(word) mulu16_sel::v1#8 ) (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 call mul16u (dword) mul16u::return#2 ← (dword) mul16u::return#1 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel (byte) mulu16_sel::select#10 ← phi( mulu16_sel/(byte) mulu16_sel::select#11 ) (dword) mul16u::return#4 ← phi( mulu16_sel/(dword) mul16u::return#2 ) (dword~) mulu16_sel::$0 ← (dword) mul16u::return#4 (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 (word~) mulu16_sel::$2 ← > (dword~) mulu16_sel::$1 (word) mulu16_sel::return#5 ← (word~) mulu16_sel::$2 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 (word) mulu16_sel::return#17 ← phi( mulu16_sel::@1/(word) mulu16_sel::return#5 ) (word) mulu16_sel::return#6 ← (word) mulu16_sel::return#17 return to:@return (void()) sin16s_genb((signed word*) sin16s_genb::sintab , (word) sin16s_genb::wavelength) sin16s_genb: scope:[sin16s_genb] from main::@4 (signed word*) sin16s_genb::sintab#6 ← phi( main::@4/(signed word*) sin16s_genb::sintab#1 ) (word) rem16u#29 ← phi( main::@4/(word) rem16u#10 ) (word) sin16s_genb::wavelength#1 ← phi( main::@4/(word) sin16s_genb::wavelength#0 ) (dword) div32u16u::dividend#1 ← (const nomodify dword) PI2_u4f28 (word) div32u16u::divisor#1 ← (word) sin16s_genb::wavelength#1 call div32u16u (dword) div32u16u::return#3 ← (dword) div32u16u::return#1 to:sin16s_genb::@3 sin16s_genb::@3: scope:[sin16s_genb] from sin16s_genb (signed word*) sin16s_genb::sintab#5 ← phi( sin16s_genb/(signed word*) sin16s_genb::sintab#6 ) (word) sin16s_genb::wavelength#3 ← phi( sin16s_genb/(word) sin16s_genb::wavelength#1 ) (word) rem16u#20 ← phi( sin16s_genb/(word) rem16u#5 ) (dword) div32u16u::return#6 ← phi( sin16s_genb/(dword) div32u16u::return#3 ) (dword~) sin16s_genb::$0 ← (dword) div32u16u::return#6 (word) rem16u#8 ← (word) rem16u#20 (dword) sin16s_genb::step#0 ← (dword~) sin16s_genb::$0 (dword) sin16s_genb::x#0 ← (dword) 0 (word) sin16s_genb::i#0 ← (word) 0 to:sin16s_genb::@1 sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@3 sin16s_genb::@4 (dword) sin16s_genb::step#3 ← phi( sin16s_genb::@3/(dword) sin16s_genb::step#0 sin16s_genb::@4/(dword) sin16s_genb::step#1 ) (signed word*) sin16s_genb::sintab#4 ← phi( sin16s_genb::@3/(signed word*) sin16s_genb::sintab#5 sin16s_genb::@4/(signed word*) sin16s_genb::sintab#0 ) (word) rem16u#30 ← phi( sin16s_genb::@3/(word) rem16u#8 sin16s_genb::@4/(word) rem16u#35 ) (dword) sin16s_genb::x#4 ← phi( sin16s_genb::@3/(dword) sin16s_genb::x#0 sin16s_genb::@4/(dword) sin16s_genb::x#1 ) (word) sin16s_genb::wavelength#2 ← phi( sin16s_genb::@3/(word) sin16s_genb::wavelength#3 sin16s_genb::@4/(word) sin16s_genb::wavelength#4 ) (word) sin16s_genb::i#2 ← phi( sin16s_genb::@3/(word) sin16s_genb::i#0 sin16s_genb::@4/(word) sin16s_genb::i#1 ) (bool~) sin16s_genb::$1 ← (word) sin16s_genb::i#2 < (word) sin16s_genb::wavelength#2 if((bool~) sin16s_genb::$1) goto sin16s_genb::@2 to:sin16s_genb::@return sin16s_genb::@2: scope:[sin16s_genb] from sin16s_genb::@1 (word) rem16u#39 ← phi( sin16s_genb::@1/(word) rem16u#30 ) (word) sin16s_genb::wavelength#5 ← phi( sin16s_genb::@1/(word) sin16s_genb::wavelength#2 ) (word) sin16s_genb::i#4 ← phi( sin16s_genb::@1/(word) sin16s_genb::i#2 ) (dword) sin16s_genb::step#2 ← phi( sin16s_genb::@1/(dword) sin16s_genb::step#3 ) (signed word*) sin16s_genb::sintab#3 ← phi( sin16s_genb::@1/(signed word*) sin16s_genb::sintab#4 ) (dword) sin16s_genb::x#2 ← phi( sin16s_genb::@1/(dword) sin16s_genb::x#4 ) (word~) sin16s_genb::$2 ← > (dword) sin16s_genb::x#2 (word) sin16sb::x#0 ← (word~) sin16s_genb::$2 call sin16sb (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#2 to:sin16s_genb::@4 sin16s_genb::@4: scope:[sin16s_genb] from sin16s_genb::@2 (word) rem16u#35 ← phi( sin16s_genb::@2/(word) rem16u#39 ) (word) sin16s_genb::wavelength#4 ← phi( sin16s_genb::@2/(word) sin16s_genb::wavelength#5 ) (word) sin16s_genb::i#3 ← phi( sin16s_genb::@2/(word) sin16s_genb::i#4 ) (dword) sin16s_genb::step#1 ← phi( sin16s_genb::@2/(dword) sin16s_genb::step#2 ) (dword) sin16s_genb::x#3 ← phi( sin16s_genb::@2/(dword) sin16s_genb::x#2 ) (signed word*) sin16s_genb::sintab#2 ← phi( sin16s_genb::@2/(signed word*) sin16s_genb::sintab#3 ) (signed word) sin16sb::return#3 ← phi( sin16s_genb::@2/(signed word) sin16sb::return#0 ) (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#3 *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD (dword~) sin16s_genb::$4 ← (dword) sin16s_genb::x#3 + (dword) sin16s_genb::step#1 (dword) sin16s_genb::x#1 ← (dword~) sin16s_genb::$4 (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#3 to:sin16s_genb::@1 sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@1 (word) rem16u#21 ← phi( sin16s_genb::@1/(word) rem16u#30 ) (word) rem16u#9 ← (word) rem16u#21 return to:@return (signed word()) sin16sb((word) sin16sb::x) sin16sb: scope:[sin16sb] from sin16s_genb::@2 (word) sin16sb::x#3 ← phi( sin16s_genb::@2/(word) sin16sb::x#0 ) (byte) sin16sb::isUpper#0 ← (byte) 0 (bool~) sin16sb::$0 ← (word) sin16sb::x#3 >= (const nomodify word) PI_u4f12 (bool~) sin16sb::$1 ← ! (bool~) sin16sb::$0 if((bool~) sin16sb::$1) goto sin16sb::@1 to:sin16sb::@4 sin16sb::@1: scope:[sin16sb] from sin16sb sin16sb::@4 (byte) sin16sb::isUpper#8 ← phi( sin16sb/(byte) sin16sb::isUpper#0 sin16sb::@4/(byte) sin16sb::isUpper#1 ) (word) sin16sb::x#4 ← phi( sin16sb/(word) sin16sb::x#3 sin16sb::@4/(word) sin16sb::x#1 ) (bool~) sin16sb::$2 ← (word) sin16sb::x#4 >= (const nomodify word) PI_HALF_u4f12 (bool~) sin16sb::$3 ← ! (bool~) sin16sb::$2 if((bool~) sin16sb::$3) goto sin16sb::@2 to:sin16sb::@5 sin16sb::@4: scope:[sin16sb] from sin16sb (word) sin16sb::x#5 ← phi( sin16sb/(word) sin16sb::x#3 ) (word~) sin16sb::$15 ← (word) sin16sb::x#5 - (const nomodify word) PI_u4f12 (word) sin16sb::x#1 ← (word~) sin16sb::$15 (byte) sin16sb::isUpper#1 ← (number) 1 to:sin16sb::@1 sin16sb::@2: scope:[sin16sb] from sin16sb::@1 sin16sb::@5 (byte) sin16sb::isUpper#7 ← phi( sin16sb::@1/(byte) sin16sb::isUpper#8 sin16sb::@5/(byte) sin16sb::isUpper#9 ) (word) sin16sb::x#6 ← phi( sin16sb::@1/(word) sin16sb::x#4 sin16sb::@5/(word) sin16sb::x#2 ) (number~) sin16sb::$4 ← (word) sin16sb::x#6 * (number) 8 (word) sin16sb::x1#0 ← (number~) sin16sb::$4 (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 (byte) mulu16_sel::select#5 ← (number) 0 call mulu16_sel (word) mulu16_sel::return#7 ← (word) mulu16_sel::return#6 to:sin16sb::@7 sin16sb::@7: scope:[sin16sb] from sin16sb::@2 (byte) sin16sb::isUpper#6 ← phi( sin16sb::@2/(byte) sin16sb::isUpper#7 ) (word) sin16sb::x1#1 ← phi( sin16sb::@2/(word) sin16sb::x1#0 ) (word) mulu16_sel::return#18 ← phi( sin16sb::@2/(word) mulu16_sel::return#7 ) (word~) sin16sb::$5 ← (word) mulu16_sel::return#18 (word) sin16sb::x2#0 ← (word~) sin16sb::$5 (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#1 (byte) mulu16_sel::select#6 ← (number) 1 call mulu16_sel (word) mulu16_sel::return#8 ← (word) mulu16_sel::return#6 to:sin16sb::@8 sin16sb::@8: scope:[sin16sb] from sin16sb::@7 (byte) sin16sb::isUpper#5 ← phi( sin16sb::@7/(byte) sin16sb::isUpper#6 ) (word) sin16sb::x1#4 ← phi( sin16sb::@7/(word) sin16sb::x1#1 ) (word) mulu16_sel::return#19 ← phi( sin16sb::@7/(word) mulu16_sel::return#8 ) (word~) sin16sb::$6 ← (word) mulu16_sel::return#19 (word) sin16sb::x3#0 ← (word~) sin16sb::$6 (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 (word) mulu16_sel::v2#7 ← (number) $10000/(number) 6 (byte) mulu16_sel::select#7 ← (number) 1 call mulu16_sel (word) mulu16_sel::return#9 ← (word) mulu16_sel::return#6 to:sin16sb::@9 sin16sb::@9: scope:[sin16sb] from sin16sb::@8 (byte) sin16sb::isUpper#4 ← phi( sin16sb::@8/(byte) sin16sb::isUpper#5 ) (word) sin16sb::x3#1 ← phi( sin16sb::@8/(word) sin16sb::x3#0 ) (word) sin16sb::x1#2 ← phi( sin16sb::@8/(word) sin16sb::x1#4 ) (word) mulu16_sel::return#20 ← phi( sin16sb::@8/(word) mulu16_sel::return#9 ) (word~) sin16sb::$7 ← (word) mulu16_sel::return#20 (word) sin16sb::x3_6#0 ← (word~) sin16sb::$7 (word~) sin16sb::$8 ← (word) sin16sb::x1#2 - (word) sin16sb::x3_6#0 (word) sin16sb::usinx#0 ← (word~) sin16sb::$8 (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#1 (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#2 (byte) mulu16_sel::select#8 ← (number) 0 call mulu16_sel (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#6 to:sin16sb::@10 sin16sb::@10: scope:[sin16sb] from sin16sb::@9 (byte) sin16sb::isUpper#3 ← phi( sin16sb::@9/(byte) sin16sb::isUpper#4 ) (word) sin16sb::usinx#4 ← phi( sin16sb::@9/(word) sin16sb::usinx#0 ) (word) sin16sb::x1#3 ← phi( sin16sb::@9/(word) sin16sb::x1#2 ) (word) mulu16_sel::return#21 ← phi( sin16sb::@9/(word) mulu16_sel::return#10 ) (word~) sin16sb::$9 ← (word) mulu16_sel::return#21 (word) sin16sb::x4#0 ← (word~) sin16sb::$9 (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#3 (byte) mulu16_sel::select#9 ← (number) 0 call mulu16_sel (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#6 to:sin16sb::@11 sin16sb::@11: scope:[sin16sb] from sin16sb::@10 (byte) sin16sb::isUpper#2 ← phi( sin16sb::@10/(byte) sin16sb::isUpper#3 ) (word) sin16sb::usinx#2 ← phi( sin16sb::@10/(word) sin16sb::usinx#4 ) (word) mulu16_sel::return#22 ← phi( sin16sb::@10/(word) mulu16_sel::return#11 ) (word~) sin16sb::$10 ← (word) mulu16_sel::return#22 (word) sin16sb::x5#0 ← (word~) sin16sb::$10 (number~) sin16sb::$11 ← (word) sin16sb::x5#0 / (number) $10 (word) sin16sb::x5_128#0 ← (number~) sin16sb::$11 (word~) sin16sb::$12 ← (word) sin16sb::usinx#2 + (word) sin16sb::x5_128#0 (word) sin16sb::usinx#1 ← (word~) sin16sb::$12 (signed word) sin16sb::sinx#0 ← (signed word)(word) sin16sb::usinx#1 (bool~) sin16sb::$13 ← (byte) sin16sb::isUpper#2 != (number) 0 (bool~) sin16sb::$14 ← ! (bool~) sin16sb::$13 if((bool~) sin16sb::$14) goto sin16sb::@3 to:sin16sb::@6 sin16sb::@5: scope:[sin16sb] from sin16sb::@1 (byte) sin16sb::isUpper#9 ← phi( sin16sb::@1/(byte) sin16sb::isUpper#8 ) (word) sin16sb::x#7 ← phi( sin16sb::@1/(word) sin16sb::x#4 ) (word~) sin16sb::$16 ← (const nomodify word) PI_u4f12 - (word) sin16sb::x#7 (word) sin16sb::x#2 ← (word~) sin16sb::$16 to:sin16sb::@2 sin16sb::@3: scope:[sin16sb] from sin16sb::@11 sin16sb::@6 (signed word) sin16sb::sinx#2 ← phi( sin16sb::@11/(signed word) sin16sb::sinx#0 sin16sb::@6/(signed word) sin16sb::sinx#1 ) (signed word) sin16sb::return#1 ← (signed word) sin16sb::sinx#2 to:sin16sb::@return sin16sb::@6: scope:[sin16sb] from sin16sb::@11 (word) sin16sb::usinx#3 ← phi( sin16sb::@11/(word) sin16sb::usinx#1 ) (signed word~) sin16sb::$17 ← - (signed word)(word) sin16sb::usinx#3 (signed word) sin16sb::sinx#1 ← (signed word~) sin16sb::$17 to:sin16sb::@3 sin16sb::@return: scope:[sin16sb] from sin16sb::@3 (signed word) sin16sb::return#4 ← phi( sin16sb::@3/(signed word) sin16sb::return#1 ) (signed word) sin16sb::return#2 ← (signed word) sin16sb::return#4 return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls (byte) memset::c#4 ← phi( print_cls/(byte) memset::c#0 ) (void*) memset::str#3 ← phi( print_cls/(void*) memset::str#0 ) (word) memset::num#1 ← phi( print_cls/(word) memset::num#0 ) (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 (bool~) memset::$1 ← ! (bool~) memset::$0 if((bool~) memset::$1) goto memset::@1 to:memset::@2 memset::@1: scope:[memset] from memset memset::@3 (void*) memset::str#1 ← phi( memset/(void*) memset::str#3 memset::@3/(void*) memset::str#4 ) (void*) memset::return#0 ← (void*) memset::str#1 to:memset::@return memset::@2: scope:[memset] from memset (byte) memset::c#3 ← phi( memset/(byte) memset::c#4 ) (word) memset::num#2 ← phi( memset/(word) memset::num#1 ) (void*) memset::str#2 ← phi( memset/(void*) memset::str#3 ) (byte*~) memset::$4 ← (byte*)(void*) memset::str#2 (byte*~) memset::$2 ← (byte*~) memset::$4 + (word) memset::num#2 (byte*) memset::end#0 ← (byte*~) memset::$2 (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#2 to:memset::@3 memset::@3: scope:[memset] from memset::@2 memset::@4 (byte) memset::c#2 ← phi( memset::@2/(byte) memset::c#3 memset::@4/(byte) memset::c#1 ) (void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@4/(void*) memset::str#5 ) (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@4/(byte*) memset::end#2 ) (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@4/(byte*) memset::dst#1 ) (bool~) memset::$3 ← (byte*) memset::dst#2 != (byte*) memset::end#1 if((bool~) memset::$3) goto memset::@4 to:memset::@1 memset::@4: scope:[memset] from memset::@3 (void*) memset::str#5 ← phi( memset::@3/(void*) memset::str#4 ) (byte*) memset::end#2 ← phi( memset::@3/(byte*) memset::end#1 ) (byte*) memset::dst#3 ← phi( memset::@3/(byte*) memset::dst#2 ) (byte) memset::c#1 ← phi( memset::@3/(byte) memset::c#2 ) *((byte*) memset::dst#3) ← (byte) memset::c#1 (byte*) memset::dst#1 ← ++ (byte*) memset::dst#3 to:memset::@3 memset::@return: scope:[memset] from memset::@1 (void*) memset::return#3 ← phi( memset::@1/(void*) memset::return#0 ) (void*) memset::return#1 ← (void*) memset::return#3 return to:@return @2: scope:[] from @1 (word) rem16u#37 ← phi( @1/(word) rem16u#0 ) (byte*) print_screen#0 ← (byte*)(number) $400 (byte*) print_line_cursor#0 ← (byte*) print_screen#0 (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0 to:@3 (void()) print_str((byte*) print_str::str) print_str: scope:[print_str] from main::@3 main::@7 (byte*) print_char_cursor#55 ← phi( main::@3/(byte*) print_char_cursor#53 main::@7/(byte*) print_char_cursor#18 ) (byte*) print_str::str#6 ← phi( main::@3/(byte*) print_str::str#2 main::@7/(byte*) print_str::str#1 ) to:print_str::@1 print_str::@1: scope:[print_str] from print_str print_str::@3 (byte*) print_char_cursor#45 ← phi( print_str/(byte*) print_char_cursor#55 print_str::@3/(byte*) print_char_cursor#1 ) (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#6 print_str::@3/(byte*) print_str::str#0 ) (bool~) print_str::$1 ← (number) 0 != *((byte*) print_str::str#3) if((bool~) print_str::$1) goto print_str::@2 to:print_str::@return print_str::@2: scope:[print_str] from print_str::@1 (byte*) print_char_cursor#44 ← phi( print_str::@1/(byte*) print_char_cursor#45 ) (byte*) print_str::str#4 ← phi( print_str::@1/(byte*) print_str::str#3 ) (byte) print_char::ch#0 ← *((byte*) print_str::str#4) call print_char to:print_str::@3 print_str::@3: scope:[print_str] from print_str::@2 (byte*) print_str::str#5 ← phi( print_str::@2/(byte*) print_str::str#4 ) (byte*) print_char_cursor#23 ← phi( print_str::@2/(byte*) print_char_cursor#14 ) (byte*) print_char_cursor#1 ← (byte*) print_char_cursor#23 (byte*) print_str::str#0 ← ++ (byte*) print_str::str#5 to:print_str::@1 print_str::@return: scope:[print_str] from print_str::@1 (byte*) print_char_cursor#24 ← phi( print_str::@1/(byte*) print_char_cursor#45 ) (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#24 return to:@return (void()) print_sint((signed word) print_sint::w) print_sint: scope:[print_sint] from main::@2 (byte*) print_char_cursor#56 ← phi( main::@2/(byte*) print_char_cursor#52 ) (signed word) print_sint::w#2 ← phi( main::@2/(signed word) print_sint::w#1 ) (bool~) print_sint::$0 ← (signed word) print_sint::w#2 < (number) 0 if((bool~) print_sint::$0) goto print_sint::@1 to:print_sint::@3 print_sint::@1: scope:[print_sint] from print_sint (signed word) print_sint::w#5 ← phi( print_sint/(signed word) print_sint::w#2 ) (byte*) print_char_cursor#46 ← phi( print_sint/(byte*) print_char_cursor#56 ) (byte) print_char::ch#1 ← (byte) '-' call print_char to:print_sint::@4 print_sint::@4: scope:[print_sint] from print_sint::@1 (signed word) print_sint::w#3 ← phi( print_sint::@1/(signed word) print_sint::w#5 ) (byte*) print_char_cursor#25 ← phi( print_sint::@1/(byte*) print_char_cursor#14 ) (byte*) print_char_cursor#3 ← (byte*) print_char_cursor#25 (signed word~) print_sint::$4 ← - (signed word) print_sint::w#3 (signed word) print_sint::w#0 ← (signed word~) print_sint::$4 to:print_sint::@2 print_sint::@3: scope:[print_sint] from print_sint (signed word) print_sint::w#7 ← phi( print_sint/(signed word) print_sint::w#2 ) (byte*) print_char_cursor#47 ← phi( print_sint/(byte*) print_char_cursor#56 ) (byte) print_char::ch#2 ← (byte) ' ' call print_char to:print_sint::@5 print_sint::@5: scope:[print_sint] from print_sint::@3 (signed word) print_sint::w#6 ← phi( print_sint::@3/(signed word) print_sint::w#7 ) (byte*) print_char_cursor#26 ← phi( print_sint::@3/(byte*) print_char_cursor#14 ) (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#26 to:print_sint::@2 print_sint::@2: scope:[print_sint] from print_sint::@4 print_sint::@5 (byte*) print_char_cursor#48 ← phi( print_sint::@4/(byte*) print_char_cursor#3 print_sint::@5/(byte*) print_char_cursor#4 ) (signed word) print_sint::w#4 ← phi( print_sint::@4/(signed word) print_sint::w#0 print_sint::@5/(signed word) print_sint::w#6 ) (word) print_uint::w#0 ← (word)(signed word) print_sint::w#4 call print_uint to:print_sint::@6 print_sint::@6: scope:[print_sint] from print_sint::@2 (byte*) print_char_cursor#27 ← phi( print_sint::@2/(byte*) print_char_cursor#9 ) (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#27 to:print_sint::@return print_sint::@return: scope:[print_sint] from print_sint::@6 (byte*) print_char_cursor#28 ← phi( print_sint::@6/(byte*) print_char_cursor#5 ) (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#28 return to:@return (void()) print_uint((word) print_uint::w) print_uint: scope:[print_uint] from print_sint::@2 (byte*) print_char_cursor#49 ← phi( print_sint::@2/(byte*) print_char_cursor#48 ) (word) print_uint::w#1 ← phi( print_sint::@2/(word) print_uint::w#0 ) (byte~) print_uint::$0 ← > (word) print_uint::w#1 (byte) print_uchar::b#0 ← (byte~) print_uint::$0 call print_uchar to:print_uint::@1 print_uint::@1: scope:[print_uint] from print_uint (word) print_uint::w#2 ← phi( print_uint/(word) print_uint::w#1 ) (byte*) print_char_cursor#29 ← phi( print_uint/(byte*) print_char_cursor#12 ) (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#29 (byte~) print_uint::$2 ← < (word) print_uint::w#2 (byte) print_uchar::b#1 ← (byte~) print_uint::$2 call print_uchar to:print_uint::@2 print_uint::@2: scope:[print_uint] from print_uint::@1 (byte*) print_char_cursor#30 ← phi( print_uint::@1/(byte*) print_char_cursor#12 ) (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#30 to:print_uint::@return print_uint::@return: scope:[print_uint] from print_uint::@2 (byte*) print_char_cursor#31 ← phi( print_uint::@2/(byte*) print_char_cursor#8 ) (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#31 return to:@return (void()) print_uchar((byte) print_uchar::b) print_uchar: scope:[print_uchar] from print_uint print_uint::@1 (byte*) print_char_cursor#50 ← phi( print_uint/(byte*) print_char_cursor#49 print_uint::@1/(byte*) print_char_cursor#7 ) (byte) print_uchar::b#2 ← phi( print_uint/(byte) print_uchar::b#0 print_uint::@1/(byte) print_uchar::b#1 ) (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (number) 4 (byte) print_char::ch#3 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) call print_char to:print_uchar::@1 print_uchar::@1: scope:[print_uchar] from print_uchar (byte) print_uchar::b#3 ← phi( print_uchar/(byte) print_uchar::b#2 ) (byte*) print_char_cursor#32 ← phi( print_uchar/(byte*) print_char_cursor#14 ) (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#32 (number~) print_uchar::$2 ← (byte) print_uchar::b#3 & (number) $f (byte) print_char::ch#4 ← *((const to_nomodify byte*) print_hextab + (number~) print_uchar::$2) call print_char to:print_uchar::@2 print_uchar::@2: scope:[print_uchar] from print_uchar::@1 (byte*) print_char_cursor#33 ← phi( print_uchar::@1/(byte*) print_char_cursor#14 ) (byte*) print_char_cursor#11 ← (byte*) print_char_cursor#33 to:print_uchar::@return print_uchar::@return: scope:[print_uchar] from print_uchar::@2 (byte*) print_char_cursor#34 ← phi( print_uchar::@2/(byte*) print_char_cursor#11 ) (byte*) print_char_cursor#12 ← (byte*) print_char_cursor#34 return to:@return (void()) print_char((byte) print_char::ch) print_char: scope:[print_char] from print_sint::@1 print_sint::@3 print_str::@2 print_uchar print_uchar::@1 (byte*) print_char_cursor#35 ← phi( print_sint::@1/(byte*) print_char_cursor#46 print_sint::@3/(byte*) print_char_cursor#47 print_str::@2/(byte*) print_char_cursor#44 print_uchar/(byte*) print_char_cursor#50 print_uchar::@1/(byte*) print_char_cursor#10 ) (byte) print_char::ch#5 ← phi( print_sint::@1/(byte) print_char::ch#1 print_sint::@3/(byte) print_char::ch#2 print_str::@2/(byte) print_char::ch#0 print_uchar/(byte) print_char::ch#3 print_uchar::@1/(byte) print_char::ch#4 ) *((byte*) print_char_cursor#35) ← (byte) print_char::ch#5 (byte*) print_char_cursor#13 ← ++ (byte*) print_char_cursor#35 to:print_char::@return print_char::@return: scope:[print_char] from print_char (byte*) print_char_cursor#36 ← phi( print_char/(byte*) print_char_cursor#13 ) (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#36 return to:@return (void()) print_cls() print_cls: scope:[print_cls] from main::@5 (byte*) print_screen#1 ← phi( main::@5/(byte*) print_screen#3 ) (void*) memset::str#0 ← (void*)(byte*) print_screen#1 (byte) memset::c#0 ← (byte) ' ' (word) memset::num#0 ← (number) $3e8 call memset (void*) memset::return#2 ← (void*) memset::return#1 to:print_cls::@1 print_cls::@1: scope:[print_cls] from print_cls (byte*) print_screen#2 ← phi( print_cls/(byte*) print_screen#1 ) (byte*) print_line_cursor#1 ← (byte*) print_screen#2 (byte*) print_char_cursor#15 ← (byte*) print_line_cursor#1 to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls::@1 (byte*) print_char_cursor#37 ← phi( print_cls::@1/(byte*) print_char_cursor#15 ) (byte*) print_line_cursor#6 ← phi( print_cls::@1/(byte*) print_line_cursor#1 ) (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#6 (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#37 return to:@return (void()) main() main: scope:[main] from @3 (byte*) print_char_cursor#59 ← phi( @3/(byte*) print_char_cursor#54 ) (byte*) print_line_cursor#15 ← phi( @3/(byte*) print_line_cursor#12 ) (byte*) print_screen#5 ← phi( @3/(byte*) print_screen#6 ) (word) rem16u#31 ← phi( @3/(word) rem16u#33 ) (signed word*) sin16s_gen::sintab#1 ← (const signed word*) main::sintab1 (word) sin16s_gen::wavelength#0 ← (const word) main::wavelength call sin16s_gen to:main::@4 main::@4: scope:[main] from main (byte*) print_char_cursor#57 ← phi( main/(byte*) print_char_cursor#59 ) (byte*) print_line_cursor#13 ← phi( main/(byte*) print_line_cursor#15 ) (byte*) print_screen#4 ← phi( main/(byte*) print_screen#5 ) (word) rem16u#22 ← phi( main/(word) rem16u#7 ) (word) rem16u#10 ← (word) rem16u#22 (signed word*) sin16s_genb::sintab#1 ← (const signed word*) main::sintab2 (word) sin16s_genb::wavelength#0 ← (const word) main::wavelength call sin16s_genb to:main::@5 main::@5: scope:[main] from main::@4 (byte*) print_char_cursor#51 ← phi( main::@4/(byte*) print_char_cursor#57 ) (byte*) print_line_cursor#10 ← phi( main::@4/(byte*) print_line_cursor#13 ) (byte*) print_screen#3 ← phi( main::@4/(byte*) print_screen#4 ) (word) rem16u#23 ← phi( main::@4/(word) rem16u#9 ) (word) rem16u#11 ← (word) rem16u#23 call print_cls to:main::@6 main::@6: scope:[main] from main::@5 (word) rem16u#43 ← phi( main::@5/(word) rem16u#11 ) (byte*) print_char_cursor#38 ← phi( main::@5/(byte*) print_char_cursor#16 ) (byte*) print_line_cursor#7 ← phi( main::@5/(byte*) print_line_cursor#2 ) (byte*) print_line_cursor#3 ← (byte*) print_line_cursor#7 (byte*) print_char_cursor#17 ← (byte*) print_char_cursor#38 (signed word*) main::st1#0 ← (const signed word*) main::sintab1 (signed word*) main::st2#0 ← (const signed word*) main::sintab2 (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@6 main::@8 (byte*) print_line_cursor#17 ← phi( main::@6/(byte*) print_line_cursor#3 main::@8/(byte*) print_line_cursor#11 ) (word) rem16u#41 ← phi( main::@6/(word) rem16u#43 main::@8/(word) rem16u#32 ) (byte) main::i#5 ← phi( main::@6/(byte) main::i#0 main::@8/(byte) main::i#1 ) (byte*) print_char_cursor#58 ← phi( main::@6/(byte*) print_char_cursor#17 main::@8/(byte*) print_char_cursor#19 ) (signed word*) main::st2#2 ← phi( main::@6/(signed word*) main::st2#0 main::@8/(signed word*) main::st2#1 ) (signed word*) main::st1#2 ← phi( main::@6/(signed word*) main::st1#0 main::@8/(signed word*) main::st1#1 ) (signed word~) main::$3 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) (signed word) main::sw#0 ← (signed word~) main::$3 (bool~) main::$4 ← (signed word) main::sw#0 >= (number) 0 (bool~) main::$5 ← ! (bool~) main::$4 if((bool~) main::$5) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@9 (byte*) print_line_cursor#16 ← phi( main::@1/(byte*) print_line_cursor#17 main::@9/(byte*) print_line_cursor#18 ) (word) rem16u#40 ← phi( main::@1/(word) rem16u#41 main::@9/(word) rem16u#42 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#5 main::@9/(byte) main::i#6 ) (signed word*) main::st2#5 ← phi( main::@1/(signed word*) main::st2#2 main::@9/(signed word*) main::st2#6 ) (signed word*) main::st1#5 ← phi( main::@1/(signed word*) main::st1#2 main::@9/(signed word*) main::st1#6 ) (byte*) print_char_cursor#52 ← phi( main::@1/(byte*) print_char_cursor#58 main::@9/(byte*) print_char_cursor#20 ) (signed word) main::sw#1 ← phi( main::@1/(signed word) main::sw#0 main::@9/(signed word) main::sw#2 ) (signed word) print_sint::w#1 ← (signed word) main::sw#1 call print_sint to:main::@7 main::@7: scope:[main] from main::@2 (byte*) print_line_cursor#14 ← phi( main::@2/(byte*) print_line_cursor#16 ) (word) rem16u#36 ← phi( main::@2/(word) rem16u#40 ) (byte) main::i#3 ← phi( main::@2/(byte) main::i#4 ) (signed word*) main::st2#4 ← phi( main::@2/(signed word*) main::st2#5 ) (signed word*) main::st1#4 ← phi( main::@2/(signed word*) main::st1#5 ) (byte*) print_char_cursor#39 ← phi( main::@2/(byte*) print_char_cursor#6 ) (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#39 (byte*) print_str::str#1 ← (const byte*) main::str call print_str to:main::@8 main::@8: scope:[main] from main::@7 (byte*) print_line_cursor#11 ← phi( main::@7/(byte*) print_line_cursor#14 ) (word) rem16u#32 ← phi( main::@7/(word) rem16u#36 ) (byte) main::i#2 ← phi( main::@7/(byte) main::i#3 ) (signed word*) main::st2#3 ← phi( main::@7/(signed word*) main::st2#4 ) (signed word*) main::st1#3 ← phi( main::@7/(signed word*) main::st1#4 ) (byte*) print_char_cursor#40 ← phi( main::@7/(byte*) print_char_cursor#2 ) (byte*) print_char_cursor#19 ← (byte*) print_char_cursor#40 (signed word*) main::st1#1 ← (signed word*) main::st1#3 + (const byte) SIZEOF_SIGNED_WORD (signed word*) main::st2#1 ← (signed word*) main::st2#3 + (const byte) SIZEOF_SIGNED_WORD (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,$77) (bool~) main::$9 ← (byte) main::i#1 != rangelast(0,$77) if((bool~) main::$9) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 (byte*) print_line_cursor#19 ← phi( main::@1/(byte*) print_line_cursor#17 ) (word) rem16u#44 ← phi( main::@1/(word) rem16u#41 ) (byte) main::i#7 ← phi( main::@1/(byte) main::i#5 ) (signed word*) main::st2#7 ← phi( main::@1/(signed word*) main::st2#2 ) (signed word*) main::st1#7 ← phi( main::@1/(signed word*) main::st1#2 ) (signed word) main::sw#3 ← phi( main::@1/(signed word) main::sw#0 ) (byte*) print_char_cursor#53 ← phi( main::@1/(byte*) print_char_cursor#58 ) (byte*) print_str::str#2 ← (const byte*) main::str1 call print_str to:main::@9 main::@9: scope:[main] from main::@3 (byte*) print_line_cursor#18 ← phi( main::@3/(byte*) print_line_cursor#19 ) (word) rem16u#42 ← phi( main::@3/(word) rem16u#44 ) (byte) main::i#6 ← phi( main::@3/(byte) main::i#7 ) (signed word*) main::st2#6 ← phi( main::@3/(signed word*) main::st2#7 ) (signed word*) main::st1#6 ← phi( main::@3/(signed word*) main::st1#7 ) (signed word) main::sw#2 ← phi( main::@3/(signed word) main::sw#3 ) (byte*) print_char_cursor#41 ← phi( main::@3/(byte*) print_char_cursor#2 ) (byte*) print_char_cursor#20 ← (byte*) print_char_cursor#41 to:main::@2 main::@return: scope:[main] from main::@8 (byte*) print_char_cursor#42 ← phi( main::@8/(byte*) print_char_cursor#19 ) (byte*) print_line_cursor#8 ← phi( main::@8/(byte*) print_line_cursor#11 ) (word) rem16u#24 ← phi( main::@8/(word) rem16u#32 ) (word) rem16u#12 ← (word) rem16u#24 (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#8 (byte*) print_char_cursor#21 ← (byte*) print_char_cursor#42 return to:@return @3: scope:[] from @2 (byte*) print_screen#6 ← phi( @2/(byte*) print_screen#0 ) (byte*) print_char_cursor#54 ← phi( @2/(byte*) print_char_cursor#0 ) (byte*) print_line_cursor#12 ← phi( @2/(byte*) print_line_cursor#0 ) (word) rem16u#33 ← phi( @2/(word) rem16u#37 ) call main to:@4 @4: scope:[] from @3 (byte*) print_char_cursor#43 ← phi( @3/(byte*) print_char_cursor#21 ) (byte*) print_line_cursor#9 ← phi( @3/(byte*) print_line_cursor#4 ) (word) rem16u#25 ← phi( @3/(word) rem16u#12 ) (word) rem16u#13 ← (word) rem16u#25 (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#9 (byte*) print_char_cursor#22 ← (byte*) print_char_cursor#43 to:@end @end: scope:[] from @4 SYMBOL TABLE SSA (label) @1 (label) @2 (label) @3 (label) @4 (label) @begin (label) @end (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify word) PI_HALF_u4f12 = (word) $1922 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify word) PI_u4f12 = (word) $3244 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 (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) SIZEOF_SIGNED_WORD = (byte) 2 (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (word~) div32u16u::$0 (word~) div32u16u::$1 (word~) div32u16u::$2 (word~) div32u16u::$3 (label) div32u16u::@1 (label) div32u16u::@2 (label) div32u16u::@return (dword) div32u16u::dividend (dword) div32u16u::dividend#0 (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#2 (dword) div32u16u::dividend#3 (word) div32u16u::divisor (word) div32u16u::divisor#0 (word) div32u16u::divisor#1 (word) div32u16u::divisor#2 (word) div32u16u::divisor#3 (dword) div32u16u::quotient (dword) div32u16u::quotient#0 (word) div32u16u::quotient_hi (word) div32u16u::quotient_hi#0 (word) div32u16u::quotient_hi#1 (word) div32u16u::quotient_lo (word) div32u16u::quotient_lo#0 (dword) div32u16u::return (dword) div32u16u::return#0 (dword) div32u16u::return#1 (dword) div32u16u::return#2 (dword) div32u16u::return#3 (dword) div32u16u::return#4 (dword) div32u16u::return#5 (dword) div32u16u::return#6 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (word~) divr16u::$0 (byte~) divr16u::$1 (word~) divr16u::$10 (bool~) divr16u::$11 (number~) divr16u::$2 (bool~) divr16u::$3 (bool~) divr16u::$4 (number~) divr16u::$5 (word~) divr16u::$6 (word~) divr16u::$7 (bool~) divr16u::$8 (bool~) divr16u::$9 (label) divr16u::@1 (label) divr16u::@2 (label) divr16u::@3 (label) divr16u::@4 (label) divr16u::@5 (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend (word) divr16u::dividend#0 (word) divr16u::dividend#1 (word) divr16u::dividend#2 (word) divr16u::dividend#3 (word) divr16u::dividend#4 (word) divr16u::dividend#5 (word) divr16u::dividend#6 (word) divr16u::dividend#7 (word) divr16u::dividend#8 (word) divr16u::divisor (word) divr16u::divisor#0 (word) divr16u::divisor#1 (word) divr16u::divisor#2 (word) divr16u::divisor#3 (word) divr16u::divisor#4 (word) divr16u::divisor#5 (word) divr16u::divisor#6 (word) divr16u::divisor#7 (byte) divr16u::i (byte) divr16u::i#0 (byte) divr16u::i#1 (byte) divr16u::i#2 (byte) divr16u::i#3 (byte) divr16u::i#4 (byte) divr16u::i#5 (byte) divr16u::i#6 (word) divr16u::quotient (word) divr16u::quotient#0 (word) divr16u::quotient#1 (word) divr16u::quotient#2 (word) divr16u::quotient#3 (word) divr16u::quotient#4 (word) divr16u::quotient#5 (word) divr16u::quotient#6 (word) divr16u::quotient#7 (word) divr16u::quotient#8 (word) divr16u::rem (word) divr16u::rem#0 (word) divr16u::rem#1 (word) divr16u::rem#10 (word) divr16u::rem#11 (word) divr16u::rem#2 (word) divr16u::rem#3 (word) divr16u::rem#4 (word) divr16u::rem#5 (word) divr16u::rem#6 (word) divr16u::rem#7 (word) divr16u::rem#8 (word) divr16u::rem#9 (word) divr16u::return (word) divr16u::return#0 (word) divr16u::return#1 (word) divr16u::return#2 (word) divr16u::return#3 (word) divr16u::return#4 (word) divr16u::return#5 (word) divr16u::return#6 (void()) main() (signed word~) main::$3 (bool~) main::$4 (bool~) main::$5 (bool~) main::$9 (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@5 (label) main::@6 (label) main::@7 (label) main::@8 (label) main::@9 (label) main::@return (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::i#7 (const signed word*) main::sintab1[(number) $78] = { fill( $78, 0) } (const signed word*) main::sintab2[(number) $78] = { fill( $78, 0) } (signed word*) main::st1 (signed word*) main::st1#0 (signed word*) main::st1#1 (signed word*) main::st1#2 (signed word*) main::st1#3 (signed word*) main::st1#4 (signed word*) main::st1#5 (signed word*) main::st1#6 (signed word*) main::st1#7 (signed word*) main::st2 (signed word*) main::st2#0 (signed word*) main::st2#1 (signed word*) main::st2#2 (signed word*) main::st2#3 (signed word*) main::st2#4 (signed word*) main::st2#5 (signed word*) main::st2#6 (signed word*) main::st2#7 (const byte*) main::str[(byte) 4] = (byte*) " " (const byte*) main::str1[(byte) 2] = (byte*) " " (signed word) main::sw (signed word) main::sw#0 (signed word) main::sw#1 (signed word) main::sw#2 (signed word) main::sw#3 (const word) main::wavelength = (word) $78 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (bool~) memset::$0 (bool~) memset::$1 (byte*~) memset::$2 (bool~) memset::$3 (byte*~) memset::$4 (label) memset::@1 (label) memset::@2 (label) memset::@3 (label) memset::@4 (label) memset::@return (byte) memset::c (byte) memset::c#0 (byte) memset::c#1 (byte) memset::c#2 (byte) memset::c#3 (byte) memset::c#4 (byte*) memset::dst (byte*) memset::dst#0 (byte*) memset::dst#1 (byte*) memset::dst#2 (byte*) memset::dst#3 (byte*) memset::end (byte*) memset::end#0 (byte*) memset::end#1 (byte*) memset::end#2 (word) memset::num (word) memset::num#0 (word) memset::num#1 (word) memset::num#2 (void*) memset::return (void*) memset::return#0 (void*) memset::return#1 (void*) memset::return#2 (void*) memset::return#3 (void*) memset::str (void*) memset::str#0 (void*) memset::str#1 (void*) memset::str#2 (void*) memset::str#3 (void*) memset::str#4 (void*) memset::str#5 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (bool~) mul16u::$0 (number~) mul16u::$1 (bool~) mul16u::$2 (bool~) mul16u::$3 (dword~) mul16u::$4 (word~) mul16u::$5 (dword~) mul16u::$6 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@3 (label) mul16u::@4 (label) mul16u::@5 (label) mul16u::@return (word) mul16u::a (word) mul16u::a#0 (word) mul16u::a#1 (word) mul16u::a#2 (word) mul16u::a#3 (word) mul16u::a#4 (word) mul16u::a#5 (word) mul16u::a#6 (word) mul16u::b (word) mul16u::b#0 (word) mul16u::b#1 (dword) mul16u::mb (dword) mul16u::mb#0 (dword) mul16u::mb#1 (dword) mul16u::mb#2 (dword) mul16u::mb#3 (dword) mul16u::mb#4 (dword) mul16u::mb#5 (dword) mul16u::res (dword) mul16u::res#0 (dword) mul16u::res#1 (dword) mul16u::res#2 (dword) mul16u::res#3 (dword) mul16u::res#4 (dword) mul16u::res#5 (dword) mul16u::res#6 (dword) mul16u::return (dword) mul16u::return#0 (dword) mul16u::return#1 (dword) mul16u::return#2 (dword) mul16u::return#3 (dword) mul16u::return#4 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) (dword~) mulu16_sel::$0 (dword~) mulu16_sel::$1 (word~) mulu16_sel::$2 (label) mulu16_sel::@1 (label) mulu16_sel::@return (word) mulu16_sel::return (word) mulu16_sel::return#0 (word) mulu16_sel::return#1 (word) mulu16_sel::return#10 (word) mulu16_sel::return#11 (word) mulu16_sel::return#12 (word) mulu16_sel::return#13 (word) mulu16_sel::return#14 (word) mulu16_sel::return#15 (word) mulu16_sel::return#16 (word) mulu16_sel::return#17 (word) mulu16_sel::return#18 (word) mulu16_sel::return#19 (word) mulu16_sel::return#2 (word) mulu16_sel::return#20 (word) mulu16_sel::return#21 (word) mulu16_sel::return#22 (word) mulu16_sel::return#3 (word) mulu16_sel::return#4 (word) mulu16_sel::return#5 (word) mulu16_sel::return#6 (word) mulu16_sel::return#7 (word) mulu16_sel::return#8 (word) mulu16_sel::return#9 (byte) mulu16_sel::select (byte) mulu16_sel::select#0 (byte) mulu16_sel::select#1 (byte) mulu16_sel::select#10 (byte) mulu16_sel::select#11 (byte) mulu16_sel::select#2 (byte) mulu16_sel::select#3 (byte) mulu16_sel::select#4 (byte) mulu16_sel::select#5 (byte) mulu16_sel::select#6 (byte) mulu16_sel::select#7 (byte) mulu16_sel::select#8 (byte) mulu16_sel::select#9 (word) mulu16_sel::v1 (word) mulu16_sel::v1#0 (word) mulu16_sel::v1#1 (word) mulu16_sel::v1#10 (word) mulu16_sel::v1#2 (word) mulu16_sel::v1#3 (word) mulu16_sel::v1#4 (word) mulu16_sel::v1#5 (word) mulu16_sel::v1#6 (word) mulu16_sel::v1#7 (word) mulu16_sel::v1#8 (word) mulu16_sel::v1#9 (word) mulu16_sel::v2 (word) mulu16_sel::v2#0 (word) mulu16_sel::v2#1 (word) mulu16_sel::v2#10 (word) mulu16_sel::v2#2 (word) mulu16_sel::v2#3 (word) mulu16_sel::v2#4 (word) mulu16_sel::v2#5 (word) mulu16_sel::v2#6 (word) mulu16_sel::v2#7 (word) mulu16_sel::v2#8 (word) mulu16_sel::v2#9 (void()) print_char((byte) print_char::ch) (label) print_char::@return (byte) print_char::ch (byte) print_char::ch#0 (byte) print_char::ch#1 (byte) print_char::ch#2 (byte) print_char::ch#3 (byte) print_char::ch#4 (byte) print_char::ch#5 (byte*) print_char_cursor (byte*) print_char_cursor#0 (byte*) print_char_cursor#1 (byte*) print_char_cursor#10 (byte*) print_char_cursor#11 (byte*) print_char_cursor#12 (byte*) print_char_cursor#13 (byte*) print_char_cursor#14 (byte*) print_char_cursor#15 (byte*) print_char_cursor#16 (byte*) print_char_cursor#17 (byte*) print_char_cursor#18 (byte*) print_char_cursor#19 (byte*) print_char_cursor#2 (byte*) print_char_cursor#20 (byte*) print_char_cursor#21 (byte*) print_char_cursor#22 (byte*) print_char_cursor#23 (byte*) print_char_cursor#24 (byte*) print_char_cursor#25 (byte*) print_char_cursor#26 (byte*) print_char_cursor#27 (byte*) print_char_cursor#28 (byte*) print_char_cursor#29 (byte*) print_char_cursor#3 (byte*) print_char_cursor#30 (byte*) print_char_cursor#31 (byte*) print_char_cursor#32 (byte*) print_char_cursor#33 (byte*) print_char_cursor#34 (byte*) print_char_cursor#35 (byte*) print_char_cursor#36 (byte*) print_char_cursor#37 (byte*) print_char_cursor#38 (byte*) print_char_cursor#39 (byte*) print_char_cursor#4 (byte*) print_char_cursor#40 (byte*) print_char_cursor#41 (byte*) print_char_cursor#42 (byte*) print_char_cursor#43 (byte*) print_char_cursor#44 (byte*) print_char_cursor#45 (byte*) print_char_cursor#46 (byte*) print_char_cursor#47 (byte*) print_char_cursor#48 (byte*) print_char_cursor#49 (byte*) print_char_cursor#5 (byte*) print_char_cursor#50 (byte*) print_char_cursor#51 (byte*) print_char_cursor#52 (byte*) print_char_cursor#53 (byte*) print_char_cursor#54 (byte*) print_char_cursor#55 (byte*) print_char_cursor#56 (byte*) print_char_cursor#57 (byte*) print_char_cursor#58 (byte*) print_char_cursor#59 (byte*) print_char_cursor#6 (byte*) print_char_cursor#7 (byte*) print_char_cursor#8 (byte*) print_char_cursor#9 (void()) print_cls() (label) print_cls::@1 (label) print_cls::@return (const to_nomodify byte*) print_hextab[] = (byte*) "0123456789abcdef"z (byte*) print_line_cursor (byte*) print_line_cursor#0 (byte*) print_line_cursor#1 (byte*) print_line_cursor#10 (byte*) print_line_cursor#11 (byte*) print_line_cursor#12 (byte*) print_line_cursor#13 (byte*) print_line_cursor#14 (byte*) print_line_cursor#15 (byte*) print_line_cursor#16 (byte*) print_line_cursor#17 (byte*) print_line_cursor#18 (byte*) print_line_cursor#19 (byte*) print_line_cursor#2 (byte*) print_line_cursor#3 (byte*) print_line_cursor#4 (byte*) print_line_cursor#5 (byte*) print_line_cursor#6 (byte*) print_line_cursor#7 (byte*) print_line_cursor#8 (byte*) print_line_cursor#9 (byte*) print_screen (byte*) print_screen#0 (byte*) print_screen#1 (byte*) print_screen#2 (byte*) print_screen#3 (byte*) print_screen#4 (byte*) print_screen#5 (byte*) print_screen#6 (void()) print_sint((signed word) print_sint::w) (bool~) print_sint::$0 (signed word~) print_sint::$4 (label) print_sint::@1 (label) print_sint::@2 (label) print_sint::@3 (label) print_sint::@4 (label) print_sint::@5 (label) print_sint::@6 (label) print_sint::@return (signed word) print_sint::w (signed word) print_sint::w#0 (signed word) print_sint::w#1 (signed word) print_sint::w#2 (signed word) print_sint::w#3 (signed word) print_sint::w#4 (signed word) print_sint::w#5 (signed word) print_sint::w#6 (signed word) print_sint::w#7 (void()) print_str((byte*) print_str::str) (bool~) print_str::$1 (label) print_str::@1 (label) print_str::@2 (label) print_str::@3 (label) print_str::@return (byte*) print_str::str (byte*) print_str::str#0 (byte*) print_str::str#1 (byte*) print_str::str#2 (byte*) print_str::str#3 (byte*) print_str::str#4 (byte*) print_str::str#5 (byte*) print_str::str#6 (void()) print_uchar((byte) print_uchar::b) (byte~) print_uchar::$0 (number~) print_uchar::$2 (label) print_uchar::@1 (label) print_uchar::@2 (label) print_uchar::@return (byte) print_uchar::b (byte) print_uchar::b#0 (byte) print_uchar::b#1 (byte) print_uchar::b#2 (byte) print_uchar::b#3 (void()) print_uint((word) print_uint::w) (byte~) print_uint::$0 (byte~) print_uint::$2 (label) print_uint::@1 (label) print_uint::@2 (label) print_uint::@return (word) print_uint::w (word) print_uint::w#0 (word) print_uint::w#1 (word) print_uint::w#2 (word) rem16u (word) rem16u#0 (word) rem16u#1 (word) rem16u#10 (word) rem16u#11 (word) rem16u#12 (word) rem16u#13 (word) rem16u#14 (word) rem16u#15 (word) rem16u#16 (word) rem16u#17 (word) rem16u#18 (word) rem16u#19 (word) rem16u#2 (word) rem16u#20 (word) rem16u#21 (word) rem16u#22 (word) rem16u#23 (word) rem16u#24 (word) rem16u#25 (word) rem16u#26 (word) rem16u#27 (word) rem16u#28 (word) rem16u#29 (word) rem16u#3 (word) rem16u#30 (word) rem16u#31 (word) rem16u#32 (word) rem16u#33 (word) rem16u#34 (word) rem16u#35 (word) rem16u#36 (word) rem16u#37 (word) rem16u#38 (word) rem16u#39 (word) rem16u#4 (word) rem16u#40 (word) rem16u#41 (word) rem16u#42 (word) rem16u#43 (word) rem16u#44 (word) rem16u#5 (word) rem16u#6 (word) rem16u#7 (word) rem16u#8 (word) rem16u#9 (signed word()) sin16s((dword) sin16s::x) (bool~) sin16s::$0 (bool~) sin16s::$1 (word~) sin16s::$10 (word~) sin16s::$11 (word~) sin16s::$12 (word~) sin16s::$13 (bool~) sin16s::$14 (bool~) sin16s::$15 (dword~) sin16s::$16 (dword~) sin16s::$17 (signed word~) sin16s::$18 (bool~) sin16s::$2 (bool~) sin16s::$3 (dword~) sin16s::$4 (word~) sin16s::$5 (word~) sin16s::$6 (word~) sin16s::$7 (word~) sin16s::$8 (word~) sin16s::$9 (label) sin16s::@1 (label) sin16s::@10 (label) sin16s::@11 (label) sin16s::@2 (label) sin16s::@3 (label) sin16s::@4 (label) sin16s::@5 (label) sin16s::@6 (label) sin16s::@7 (label) sin16s::@8 (label) sin16s::@9 (label) sin16s::@return (byte) sin16s::isUpper (byte) sin16s::isUpper#0 (byte) sin16s::isUpper#1 (byte) sin16s::isUpper#2 (byte) sin16s::isUpper#3 (byte) sin16s::isUpper#4 (byte) sin16s::isUpper#5 (byte) sin16s::isUpper#6 (byte) sin16s::isUpper#7 (byte) sin16s::isUpper#8 (byte) sin16s::isUpper#9 (signed word) sin16s::return (signed word) sin16s::return#0 (signed word) sin16s::return#1 (signed word) sin16s::return#2 (signed word) sin16s::return#3 (signed word) sin16s::return#4 (signed word) sin16s::sinx (signed word) sin16s::sinx#0 (signed word) sin16s::sinx#1 (signed word) sin16s::sinx#2 (word) sin16s::usinx (word) sin16s::usinx#0 (word) sin16s::usinx#1 (word) sin16s::usinx#2 (word) sin16s::usinx#3 (word) sin16s::usinx#4 (dword) sin16s::x (dword) sin16s::x#0 (dword) sin16s::x#1 (dword) sin16s::x#2 (dword) sin16s::x#3 (dword) sin16s::x#4 (dword) sin16s::x#5 (dword) sin16s::x#6 (dword) sin16s::x#7 (word) sin16s::x1 (word) sin16s::x1#0 (word) sin16s::x1#1 (word) sin16s::x1#2 (word) sin16s::x1#3 (word) sin16s::x1#4 (word) sin16s::x2 (word) sin16s::x2#0 (word) sin16s::x3 (word) sin16s::x3#0 (word) sin16s::x3#1 (word) sin16s::x3_6 (word) sin16s::x3_6#0 (word) sin16s::x4 (word) sin16s::x4#0 (word) sin16s::x5 (word) sin16s::x5#0 (word) sin16s::x5_128 (word) sin16s::x5_128#0 (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) (dword~) sin16s_gen::$0 (bool~) sin16s_gen::$1 (signed word~) sin16s_gen::$2 (dword~) sin16s_gen::$3 (label) sin16s_gen::@1 (label) sin16s_gen::@2 (label) sin16s_gen::@3 (label) sin16s_gen::@4 (label) sin16s_gen::@return (word) sin16s_gen::i (word) sin16s_gen::i#0 (word) sin16s_gen::i#1 (word) sin16s_gen::i#2 (word) sin16s_gen::i#3 (word) sin16s_gen::i#4 (signed word*) sin16s_gen::sintab (signed word*) sin16s_gen::sintab#0 (signed word*) sin16s_gen::sintab#1 (signed word*) sin16s_gen::sintab#2 (signed word*) sin16s_gen::sintab#3 (signed word*) sin16s_gen::sintab#4 (signed word*) sin16s_gen::sintab#5 (signed word*) sin16s_gen::sintab#6 (dword) sin16s_gen::step (dword) sin16s_gen::step#0 (dword) sin16s_gen::step#1 (dword) sin16s_gen::step#2 (dword) sin16s_gen::step#3 (word) sin16s_gen::wavelength (word) sin16s_gen::wavelength#0 (word) sin16s_gen::wavelength#1 (word) sin16s_gen::wavelength#2 (word) sin16s_gen::wavelength#3 (word) sin16s_gen::wavelength#4 (word) sin16s_gen::wavelength#5 (dword) sin16s_gen::x (dword) sin16s_gen::x#0 (dword) sin16s_gen::x#1 (dword) sin16s_gen::x#2 (dword) sin16s_gen::x#3 (dword) sin16s_gen::x#4 (void()) sin16s_genb((signed word*) sin16s_genb::sintab , (word) sin16s_genb::wavelength) (dword~) sin16s_genb::$0 (bool~) sin16s_genb::$1 (word~) sin16s_genb::$2 (signed word~) sin16s_genb::$3 (dword~) sin16s_genb::$4 (label) sin16s_genb::@1 (label) sin16s_genb::@2 (label) sin16s_genb::@3 (label) sin16s_genb::@4 (label) sin16s_genb::@return (word) sin16s_genb::i (word) sin16s_genb::i#0 (word) sin16s_genb::i#1 (word) sin16s_genb::i#2 (word) sin16s_genb::i#3 (word) sin16s_genb::i#4 (signed word*) sin16s_genb::sintab (signed word*) sin16s_genb::sintab#0 (signed word*) sin16s_genb::sintab#1 (signed word*) sin16s_genb::sintab#2 (signed word*) sin16s_genb::sintab#3 (signed word*) sin16s_genb::sintab#4 (signed word*) sin16s_genb::sintab#5 (signed word*) sin16s_genb::sintab#6 (dword) sin16s_genb::step (dword) sin16s_genb::step#0 (dword) sin16s_genb::step#1 (dword) sin16s_genb::step#2 (dword) sin16s_genb::step#3 (word) sin16s_genb::wavelength (word) sin16s_genb::wavelength#0 (word) sin16s_genb::wavelength#1 (word) sin16s_genb::wavelength#2 (word) sin16s_genb::wavelength#3 (word) sin16s_genb::wavelength#4 (word) sin16s_genb::wavelength#5 (dword) sin16s_genb::x (dword) sin16s_genb::x#0 (dword) sin16s_genb::x#1 (dword) sin16s_genb::x#2 (dword) sin16s_genb::x#3 (dword) sin16s_genb::x#4 (signed word()) sin16sb((word) sin16sb::x) (bool~) sin16sb::$0 (bool~) sin16sb::$1 (word~) sin16sb::$10 (number~) sin16sb::$11 (word~) sin16sb::$12 (bool~) sin16sb::$13 (bool~) sin16sb::$14 (word~) sin16sb::$15 (word~) sin16sb::$16 (signed word~) sin16sb::$17 (bool~) sin16sb::$2 (bool~) sin16sb::$3 (number~) sin16sb::$4 (word~) sin16sb::$5 (word~) sin16sb::$6 (word~) sin16sb::$7 (word~) sin16sb::$8 (word~) sin16sb::$9 (label) sin16sb::@1 (label) sin16sb::@10 (label) sin16sb::@11 (label) sin16sb::@2 (label) sin16sb::@3 (label) sin16sb::@4 (label) sin16sb::@5 (label) sin16sb::@6 (label) sin16sb::@7 (label) sin16sb::@8 (label) sin16sb::@9 (label) sin16sb::@return (byte) sin16sb::isUpper (byte) sin16sb::isUpper#0 (byte) sin16sb::isUpper#1 (byte) sin16sb::isUpper#2 (byte) sin16sb::isUpper#3 (byte) sin16sb::isUpper#4 (byte) sin16sb::isUpper#5 (byte) sin16sb::isUpper#6 (byte) sin16sb::isUpper#7 (byte) sin16sb::isUpper#8 (byte) sin16sb::isUpper#9 (signed word) sin16sb::return (signed word) sin16sb::return#0 (signed word) sin16sb::return#1 (signed word) sin16sb::return#2 (signed word) sin16sb::return#3 (signed word) sin16sb::return#4 (signed word) sin16sb::sinx (signed word) sin16sb::sinx#0 (signed word) sin16sb::sinx#1 (signed word) sin16sb::sinx#2 (word) sin16sb::usinx (word) sin16sb::usinx#0 (word) sin16sb::usinx#1 (word) sin16sb::usinx#2 (word) sin16sb::usinx#3 (word) sin16sb::usinx#4 (word) sin16sb::x (word) sin16sb::x#0 (word) sin16sb::x#1 (word) sin16sb::x#2 (word) sin16sb::x#3 (word) sin16sb::x#4 (word) sin16sb::x#5 (word) sin16sb::x#6 (word) sin16sb::x#7 (word) sin16sb::x1 (word) sin16sb::x1#0 (word) sin16sb::x1#1 (word) sin16sb::x1#2 (word) sin16sb::x1#3 (word) sin16sb::x1#4 (word) sin16sb::x2 (word) sin16sb::x2#0 (word) sin16sb::x3 (word) sin16sb::x3#0 (word) sin16sb::x3#1 (word) sin16sb::x3_6 (word) sin16sb::x3_6#0 (word) sin16sb::x4 (word) sin16sb::x4#0 (word) sin16sb::x5 (word) sin16sb::x5#0 (word) sin16sb::x5_128 (word) sin16sb::x5_128#0 Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 dw= (word)div32u16u::quotient_lo#0 Successful SSA optimization Pass2FixInlineConstructors Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) divr16u::$3 ← (unumber~) divr16u::$2 != (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$6 ← (word) divr16u::dividend#4 << (number) 1 Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr16u::quotient#3 << (number) 1 Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1 Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#2 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (number) 1 Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#3 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) mul16u::$2 ← (unumber~) mul16u::$1 != (number) 0 Adding number conversion cast (unumber) 1 in (word~) mul16u::$5 ← (word) mul16u::a#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (number) 1 Adding number conversion cast (unumber) 1 in (byte) sin16s::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 3 in (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) mulu16_sel::select#1 ← (number) 1 Adding number conversion cast (unumber) $10000/6 in (word) mulu16_sel::v2#2 ← (number) $10000/(number) 6 Adding number conversion cast (unumber) 1 in (byte) mulu16_sel::select#2 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#3 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#4 ← (number) 0 Adding number conversion cast (unumber) 4 in (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4 Adding number conversion cast (unumber) 0 in (bool~) sin16s::$14 ← (byte) sin16s::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 1 in (byte) sin16sb::isUpper#1 ← (number) 1 Adding number conversion cast (unumber) 8 in (number~) sin16sb::$4 ← (word) sin16sb::x#6 * (number) 8 Adding number conversion cast (unumber) sin16sb::$4 in (number~) sin16sb::$4 ← (word) sin16sb::x#6 * (unumber)(number) 8 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#5 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) mulu16_sel::select#6 ← (number) 1 Adding number conversion cast (unumber) $10000/6 in (word) mulu16_sel::v2#7 ← (number) $10000/(number) 6 Adding number conversion cast (unumber) 1 in (byte) mulu16_sel::select#7 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#8 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#9 ← (number) 0 Adding number conversion cast (unumber) $10 in (number~) sin16sb::$11 ← (word) sin16sb::x5#0 / (number) $10 Adding number conversion cast (unumber) sin16sb::$11 in (number~) sin16sb::$11 ← (word) sin16sb::x5#0 / (unumber)(number) $10 Adding number conversion cast (unumber) 0 in (bool~) sin16sb::$13 ← (byte) sin16sb::isUpper#2 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 Adding number conversion cast (unumber) 0 in (bool~) print_str::$1 ← (number) 0 != *((byte*) print_str::str#3) Adding number conversion cast (snumber) 0 in (bool~) print_sint::$0 ← (signed word) print_sint::w#2 < (number) 0 Adding number conversion cast (unumber) 4 in (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (number) 4 Adding number conversion cast (unumber) $f in (number~) print_uchar::$2 ← (byte) print_uchar::b#3 & (number) $f Adding number conversion cast (unumber) print_uchar::$2 in (number~) print_uchar::$2 ← (byte) print_uchar::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 Adding number conversion cast (snumber) 0 in (bool~) main::$4 ← (signed word) main::sw#0 >= (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (byte) sin16s::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#0 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#1 ← (unumber)(number) 1 Inlining cast (word) mulu16_sel::v2#2 ← (unumber)(number) $10000/(number) 6 Inlining cast (byte) mulu16_sel::select#2 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#3 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#4 ← (unumber)(number) 0 Inlining cast (byte) sin16sb::isUpper#1 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#5 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#6 ← (unumber)(number) 1 Inlining cast (word) mulu16_sel::v2#7 ← (unumber)(number) $10000/(number) 6 Inlining cast (byte) mulu16_sel::select#7 ← (unumber)(number) 1 Inlining cast (byte) mulu16_sel::select#8 ← (unumber)(number) 0 Inlining cast (byte) mulu16_sel::select#9 ← (unumber)(number) 0 Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 1 Simplifying constant integer cast $80 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 (word) div32u16u::quotient_hi#1 Simplifying constant integer cast (word) div32u16u::quotient_lo#0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $10 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (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) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized signed number type (signed byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 Inferred type updated to word in (unumber~) divr16u::$5 ← (word) divr16u::rem#7 | (byte) 1 Inferred type updated to byte in (unumber~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 Inferred type updated to word in (unumber~) sin16sb::$4 ← (word) sin16sb::x#6 * (byte) 8 Inferred type updated to word in (unumber~) sin16sb::$11 ← (word) sin16sb::x5#0 / (byte) $10 Inferred type updated to byte in (unumber~) print_uchar::$2 ← (byte) print_uchar::b#3 & (byte) $f Inversing boolean not [10] (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte) 0 from [9] (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte) 0 Inversing boolean not [18] (bool~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from [17] (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2 Inversing boolean not [75] (bool~) mul16u::$3 ← (byte~) mul16u::$1 == (byte) 0 from [74] (bool~) mul16u::$2 ← (byte~) mul16u::$1 != (byte) 0 Inversing boolean not [121] (bool~) sin16s::$1 ← (dword) sin16s::x#3 < (const nomodify dword) PI_u4f28 from [120] (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const nomodify dword) PI_u4f28 Inversing boolean not [125] (bool~) sin16s::$3 ← (dword) sin16s::x#4 < (const nomodify dword) PI_HALF_u4f28 from [124] (bool~) sin16s::$2 ← (dword) sin16s::x#4 >= (const nomodify dword) PI_HALF_u4f28 Inversing boolean not [183] (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 == (byte) 0 from [182] (bool~) sin16s::$14 ← (byte) sin16s::isUpper#2 != (byte) 0 Inversing boolean not [241] (bool~) sin16sb::$1 ← (word) sin16sb::x#3 < (const nomodify word) PI_u4f12 from [240] (bool~) sin16sb::$0 ← (word) sin16sb::x#3 >= (const nomodify word) PI_u4f12 Inversing boolean not [245] (bool~) sin16sb::$3 ← (word) sin16sb::x#4 < (const nomodify word) PI_HALF_u4f12 from [244] (bool~) sin16sb::$2 ← (word) sin16sb::x#4 >= (const nomodify word) PI_HALF_u4f12 Inversing boolean not [302] (bool~) sin16sb::$14 ← (byte) sin16sb::isUpper#2 == (byte) 0 from [301] (bool~) sin16sb::$13 ← (byte) sin16sb::isUpper#2 != (byte) 0 Inversing boolean not [317] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [316] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 Inversing boolean not [444] (bool~) main::$5 ← (signed word) main::sw#0 < (signed byte) 0 from [443] (bool~) main::$4 ← (signed word) main::sw#0 >= (signed byte) 0 Successful SSA optimization Pass2UnaryNotSimplification Alias divr16u::rem#0 = divr16u::$0 divr16u::rem#7 Alias divr16u::dividend#0 = divr16u::$6 divr16u::dividend#8 Alias divr16u::quotient#1 = divr16u::$7 divr16u::quotient#4 Alias divr16u::dividend#3 = divr16u::dividend#7 Alias divr16u::quotient#6 = divr16u::quotient#7 Alias divr16u::divisor#4 = divr16u::divisor#5 Alias divr16u::i#5 = divr16u::i#6 Alias divr16u::rem#1 = divr16u::$5 Alias divr16u::rem#6 = divr16u::rem#8 Alias divr16u::divisor#2 = divr16u::divisor#3 Alias divr16u::i#3 = divr16u::i#4 Alias divr16u::rem#2 = divr16u::$10 Alias divr16u::rem#11 = divr16u::rem#9 Alias divr16u::return#0 = divr16u::quotient#5 divr16u::quotient#8 divr16u::return#4 divr16u::return#1 Alias rem16u#1 = rem16u#14 rem16u#2 Alias divr16u::dividend#1 = div32u16u::$0 Alias divr16u::return#2 = divr16u::return#5 Alias div32u16u::dividend#2 = div32u16u::dividend#3 Alias div32u16u::divisor#2 = div32u16u::divisor#3 Alias rem16u#15 = rem16u#3 Alias div32u16u::quotient_hi#0 = div32u16u::$1 div32u16u::quotient_hi#1 Alias divr16u::dividend#2 = div32u16u::$2 Alias divr16u::return#3 = divr16u::return#6 Alias rem16u#16 = rem16u#4 rem16u#17 rem16u#5 Alias div32u16u::quotient_lo#0 = div32u16u::$3 Alias div32u16u::return#0 = div32u16u::quotient#0 div32u16u::$4 div32u16u::return#4 div32u16u::return#1 Alias mul16u::a#2 = mul16u::a#3 mul16u::a#6 Alias mul16u::mb#3 = mul16u::mb#4 mul16u::mb#5 Alias mul16u::res#2 = mul16u::res#5 mul16u::res#4 mul16u::return#0 mul16u::res#3 mul16u::return#3 mul16u::return#1 Alias mul16u::a#0 = mul16u::$5 Alias mul16u::mb#1 = mul16u::$6 Alias mul16u::res#1 = mul16u::$4 Alias div32u16u::return#2 = div32u16u::return#5 Alias sin16s_gen::wavelength#1 = sin16s_gen::wavelength#3 Alias sin16s_gen::sintab#5 = sin16s_gen::sintab#6 Alias rem16u#18 = rem16u#6 Alias sin16s_gen::step#0 = sin16s_gen::$0 Alias sin16s_gen::x#2 = sin16s_gen::x#4 sin16s_gen::x#3 Alias sin16s_gen::sintab#2 = sin16s_gen::sintab#3 sin16s_gen::sintab#4 Alias sin16s_gen::step#1 = sin16s_gen::step#2 sin16s_gen::step#3 Alias sin16s_gen::i#2 = sin16s_gen::i#4 sin16s_gen::i#3 Alias sin16s_gen::wavelength#2 = sin16s_gen::wavelength#5 sin16s_gen::wavelength#4 Alias rem16u#19 = rem16u#38 rem16u#28 rem16u#34 rem16u#7 Alias sin16s::return#0 = sin16s::return#3 Alias sin16s_gen::x#1 = sin16s_gen::$3 Alias sin16s::x#3 = sin16s::x#5 Alias sin16s::x#1 = sin16s::$16 Alias sin16s::x1#0 = sin16s::$5 sin16s::x1#1 sin16s::x1#4 sin16s::x1#2 sin16s::x1#3 Alias mulu16_sel::return#0 = mulu16_sel::return#12 Alias sin16s::isUpper#2 = sin16s::isUpper#6 sin16s::isUpper#7 sin16s::isUpper#5 sin16s::isUpper#4 sin16s::isUpper#3 Alias sin16s::x2#0 = sin16s::$6 Alias mulu16_sel::return#1 = mulu16_sel::return#13 Alias sin16s::x3#0 = sin16s::$7 sin16s::x3#1 Alias mulu16_sel::return#14 = mulu16_sel::return#2 Alias sin16s::x3_6#0 = sin16s::$8 Alias sin16s::usinx#0 = sin16s::$9 sin16s::usinx#4 sin16s::usinx#2 Alias mulu16_sel::return#15 = mulu16_sel::return#3 Alias sin16s::x4#0 = sin16s::$10 Alias mulu16_sel::return#16 = mulu16_sel::return#4 Alias sin16s::x5#0 = sin16s::$11 Alias sin16s::x5_128#0 = sin16s::$12 Alias sin16s::usinx#1 = sin16s::$13 sin16s::usinx#3 Alias sin16s::x#4 = sin16s::x#7 Alias sin16s::isUpper#8 = sin16s::isUpper#9 Alias sin16s::x#2 = sin16s::$17 Alias sin16s::return#1 = sin16s::sinx#2 sin16s::return#4 sin16s::return#2 Alias sin16s::sinx#1 = sin16s::$18 Alias mul16u::return#2 = mul16u::return#4 Alias mulu16_sel::select#10 = mulu16_sel::select#11 Alias mulu16_sel::return#17 = mulu16_sel::return#5 mulu16_sel::$2 mulu16_sel::return#6 Alias div32u16u::return#3 = div32u16u::return#6 Alias sin16s_genb::wavelength#1 = sin16s_genb::wavelength#3 Alias sin16s_genb::sintab#5 = sin16s_genb::sintab#6 Alias rem16u#20 = rem16u#8 Alias sin16s_genb::step#0 = sin16s_genb::$0 Alias sin16s_genb::x#2 = sin16s_genb::x#4 sin16s_genb::x#3 Alias sin16s_genb::sintab#2 = sin16s_genb::sintab#3 sin16s_genb::sintab#4 Alias sin16s_genb::step#1 = sin16s_genb::step#2 sin16s_genb::step#3 Alias sin16s_genb::i#2 = sin16s_genb::i#4 sin16s_genb::i#3 Alias sin16s_genb::wavelength#2 = sin16s_genb::wavelength#5 sin16s_genb::wavelength#4 Alias rem16u#21 = rem16u#39 rem16u#30 rem16u#35 rem16u#9 Alias sin16sb::x#0 = sin16s_genb::$2 Alias sin16sb::return#0 = sin16sb::return#3 Alias sin16s_genb::x#1 = sin16s_genb::$4 Alias sin16sb::x#3 = sin16sb::x#5 Alias sin16sb::x#1 = sin16sb::$15 Alias sin16sb::x1#0 = sin16sb::$4 sin16sb::x1#1 sin16sb::x1#4 sin16sb::x1#2 sin16sb::x1#3 Alias mulu16_sel::return#18 = mulu16_sel::return#7 Alias sin16sb::isUpper#2 = sin16sb::isUpper#6 sin16sb::isUpper#7 sin16sb::isUpper#5 sin16sb::isUpper#4 sin16sb::isUpper#3 Alias sin16sb::x2#0 = sin16sb::$5 Alias mulu16_sel::return#19 = mulu16_sel::return#8 Alias sin16sb::x3#0 = sin16sb::$6 sin16sb::x3#1 Alias mulu16_sel::return#20 = mulu16_sel::return#9 Alias sin16sb::x3_6#0 = sin16sb::$7 Alias sin16sb::usinx#0 = sin16sb::$8 sin16sb::usinx#4 sin16sb::usinx#2 Alias mulu16_sel::return#10 = mulu16_sel::return#21 Alias sin16sb::x4#0 = sin16sb::$9 Alias mulu16_sel::return#11 = mulu16_sel::return#22 Alias sin16sb::x5#0 = sin16sb::$10 Alias sin16sb::x5_128#0 = sin16sb::$11 Alias sin16sb::usinx#1 = sin16sb::$12 sin16sb::usinx#3 Alias sin16sb::x#4 = sin16sb::x#7 Alias sin16sb::isUpper#8 = sin16sb::isUpper#9 Alias sin16sb::x#2 = sin16sb::$16 Alias sin16sb::return#1 = sin16sb::sinx#2 sin16sb::return#4 sin16sb::return#2 Alias sin16sb::sinx#1 = sin16sb::$17 Alias memset::return#0 = memset::str#1 memset::return#3 memset::return#1 Alias memset::str#2 = memset::str#3 Alias memset::num#1 = memset::num#2 Alias memset::c#3 = memset::c#4 Alias memset::end#0 = memset::$2 Alias memset::c#1 = memset::c#2 Alias memset::dst#2 = memset::dst#3 Alias memset::end#1 = memset::end#2 Alias memset::str#4 = memset::str#5 Alias rem16u#0 = rem16u#37 rem16u#33 Alias print_line_cursor#0 = print_screen#0 print_char_cursor#0 print_line_cursor#12 print_char_cursor#54 print_screen#6 Alias print_str::str#3 = print_str::str#4 print_str::str#5 Alias print_char_cursor#2 = print_char_cursor#44 print_char_cursor#45 print_char_cursor#24 Alias print_char_cursor#1 = print_char_cursor#23 Alias print_char_cursor#46 = print_char_cursor#56 print_char_cursor#47 Alias print_sint::w#2 = print_sint::w#5 print_sint::w#3 print_sint::w#7 print_sint::w#6 Alias print_char_cursor#25 = print_char_cursor#3 Alias print_sint::w#0 = print_sint::$4 Alias print_char_cursor#26 = print_char_cursor#4 Alias print_char_cursor#27 = print_char_cursor#5 print_char_cursor#28 print_char_cursor#6 Alias print_uchar::b#0 = print_uint::$0 Alias print_uint::w#1 = print_uint::w#2 Alias print_char_cursor#29 = print_char_cursor#7 Alias print_uchar::b#1 = print_uint::$2 Alias print_char_cursor#30 = print_char_cursor#8 print_char_cursor#31 print_char_cursor#9 Alias print_uchar::b#2 = print_uchar::b#3 Alias print_char_cursor#10 = print_char_cursor#32 Alias print_char_cursor#11 = print_char_cursor#33 print_char_cursor#34 print_char_cursor#12 Alias print_char_cursor#13 = print_char_cursor#36 print_char_cursor#14 Alias print_line_cursor#1 = print_screen#2 print_screen#1 print_char_cursor#15 print_line_cursor#6 print_char_cursor#37 print_line_cursor#2 print_char_cursor#16 Alias print_screen#3 = print_screen#4 print_screen#5 Alias print_line_cursor#10 = print_line_cursor#13 print_line_cursor#15 Alias print_char_cursor#51 = print_char_cursor#57 print_char_cursor#59 Alias rem16u#10 = rem16u#22 Alias rem16u#11 = rem16u#23 rem16u#43 Alias print_line_cursor#3 = print_line_cursor#7 Alias print_char_cursor#17 = print_char_cursor#38 Alias main::sw#0 = main::$3 main::sw#3 main::sw#2 Alias main::st1#3 = main::st1#4 main::st1#5 Alias main::st2#3 = main::st2#4 main::st2#5 Alias main::i#2 = main::i#3 main::i#4 Alias rem16u#12 = rem16u#36 rem16u#40 rem16u#32 rem16u#24 Alias print_line_cursor#11 = print_line_cursor#14 print_line_cursor#16 print_line_cursor#8 print_line_cursor#4 Alias print_char_cursor#18 = print_char_cursor#39 Alias print_char_cursor#19 = print_char_cursor#40 print_char_cursor#42 print_char_cursor#21 Alias print_char_cursor#53 = print_char_cursor#58 Alias main::st1#2 = main::st1#7 main::st1#6 Alias main::st2#2 = main::st2#7 main::st2#6 Alias main::i#5 = main::i#7 main::i#6 Alias rem16u#41 = rem16u#44 rem16u#42 Alias print_line_cursor#17 = print_line_cursor#19 print_line_cursor#18 Alias print_char_cursor#20 = print_char_cursor#41 Alias rem16u#13 = rem16u#25 Alias print_line_cursor#5 = print_line_cursor#9 Alias print_char_cursor#22 = print_char_cursor#43 Successful SSA optimization Pass2AliasElimination Alias divr16u::dividend#3 = divr16u::dividend#4 Alias divr16u::quotient#3 = divr16u::quotient#6 Alias divr16u::divisor#2 = divr16u::divisor#4 divr16u::divisor#7 Alias divr16u::i#2 = divr16u::i#3 divr16u::i#5 Alias divr16u::dividend#0 = divr16u::dividend#6 Alias mul16u::a#2 = mul16u::a#4 Alias mul16u::mb#2 = mul16u::mb#3 Alias sin16s::isUpper#2 = sin16s::isUpper#8 Alias sin16sb::isUpper#2 = sin16sb::isUpper#8 Alias main::sw#0 = main::sw#1 Alias main::st1#2 = main::st1#3 Alias main::st2#2 = main::st2#3 Alias main::i#2 = main::i#5 Alias rem16u#12 = rem16u#41 Alias print_line_cursor#11 = print_line_cursor#17 Successful SSA optimization Pass2AliasElimination Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6 Identical Phi Values (word) rem16u#15 (word) rem16u#1 Identical Phi Values (word) rem16u#16 (word) rem16u#1 Identical Phi Values (word) mul16u::b#1 (word) mul16u::b#0 Identical Phi Values (word) mul16u::a#5 (word) mul16u::a#1 Identical Phi Values (word) sin16s_gen::wavelength#1 (word) sin16s_gen::wavelength#0 Identical Phi Values (word) rem16u#27 (word) rem16u#31 Identical Phi Values (signed word*) sin16s_gen::sintab#5 (signed word*) sin16s_gen::sintab#1 Identical Phi Values (word) rem16u#18 (word) rem16u#16 Identical Phi Values (word) sin16s_gen::wavelength#2 (word) sin16s_gen::wavelength#1 Identical Phi Values (word) rem16u#19 (word) rem16u#18 Identical Phi Values (dword) sin16s_gen::step#1 (dword) sin16s_gen::step#0 Identical Phi Values (dword) sin16s::x#3 (dword) sin16s::x#0 Identical Phi Values (word) sin16s_genb::wavelength#1 (word) sin16s_genb::wavelength#0 Identical Phi Values (word) rem16u#29 (word) rem16u#10 Identical Phi Values (signed word*) sin16s_genb::sintab#5 (signed word*) sin16s_genb::sintab#1 Identical Phi Values (word) rem16u#20 (word) rem16u#16 Identical Phi Values (word) sin16s_genb::wavelength#2 (word) sin16s_genb::wavelength#1 Identical Phi Values (word) rem16u#21 (word) rem16u#20 Identical Phi Values (dword) sin16s_genb::step#1 (dword) sin16s_genb::step#0 Identical Phi Values (word) sin16sb::x#3 (word) sin16sb::x#0 Identical Phi Values (word) memset::num#1 (word) memset::num#0 Identical Phi Values (void*) memset::str#2 (void*) memset::str#0 Identical Phi Values (byte) memset::c#3 (byte) memset::c#0 Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0 Identical Phi Values (void*) memset::str#4 (void*) memset::str#2 Identical Phi Values (byte) memset::c#1 (byte) memset::c#3 Identical Phi Values (byte*) print_char_cursor#1 (byte*) print_char_cursor#13 Identical Phi Values (signed word) print_sint::w#2 (signed word) print_sint::w#1 Identical Phi Values (byte*) print_char_cursor#46 (byte*) print_char_cursor#52 Identical Phi Values (byte*) print_char_cursor#25 (byte*) print_char_cursor#13 Identical Phi Values (byte*) print_char_cursor#26 (byte*) print_char_cursor#13 Identical Phi Values (byte*) print_char_cursor#27 (byte*) print_char_cursor#30 Identical Phi Values (word) print_uint::w#1 (word) print_uint::w#0 Identical Phi Values (byte*) print_char_cursor#49 (byte*) print_char_cursor#48 Identical Phi Values (byte*) print_char_cursor#29 (byte*) print_char_cursor#11 Identical Phi Values (byte*) print_char_cursor#30 (byte*) print_char_cursor#11 Identical Phi Values (byte*) print_char_cursor#10 (byte*) print_char_cursor#13 Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#13 Identical Phi Values (byte*) print_line_cursor#1 (byte*) print_screen#3 Identical Phi Values (word) rem16u#31 (word) rem16u#0 Identical Phi Values (byte*) print_screen#3 (byte*) print_line_cursor#0 Identical Phi Values (byte*) print_line_cursor#10 (byte*) print_line_cursor#0 Identical Phi Values (byte*) print_char_cursor#51 (byte*) print_line_cursor#0 Identical Phi Values (word) rem16u#10 (word) rem16u#19 Identical Phi Values (word) rem16u#11 (word) rem16u#21 Identical Phi Values (byte*) print_line_cursor#3 (byte*) print_line_cursor#1 Identical Phi Values (byte*) print_char_cursor#17 (byte*) print_line_cursor#1 Identical Phi Values (word) rem16u#12 (word) rem16u#11 Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#3 Identical Phi Values (byte*) print_char_cursor#18 (byte*) print_char_cursor#27 Identical Phi Values (byte*) print_char_cursor#19 (byte*) print_char_cursor#2 Identical Phi Values (byte*) print_char_cursor#20 (byte*) print_char_cursor#2 Identical Phi Values (word) rem16u#13 (word) rem16u#12 Identical Phi Values (byte*) print_line_cursor#5 (byte*) print_line_cursor#11 Identical Phi Values (byte*) print_char_cursor#22 (byte*) print_char_cursor#19 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (void*) memset::return#0 (void*) memset::str#0 Identical Phi Values (byte*) print_char_cursor#48 (byte*) print_char_cursor#13 Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) print_char_cursor#50 (byte*) print_char_cursor#13 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition (bool~) divr16u::$4 [9] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 [14] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 [19] if((byte) divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 Simple Condition (bool~) mul16u::$0 [46] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 Simple Condition (bool~) mul16u::$3 [49] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@4 Simple Condition (bool~) sin16s_gen::$1 [66] if((word) sin16s_gen::i#2<(word) sin16s_gen::wavelength#0) goto sin16s_gen::@2 Simple Condition (bool~) sin16s::$1 [79] if((dword) sin16s::x#0<(const nomodify dword) PI_u4f28) goto sin16s::@1 Simple Condition (bool~) sin16s::$3 [82] if((dword) sin16s::x#4<(const nomodify dword) PI_HALF_u4f28) goto sin16s::@2 Simple Condition (bool~) sin16s::$15 [123] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@3 Simple Condition (bool~) sin16s_genb::$1 [148] if((word) sin16s_genb::i#2<(word) sin16s_genb::wavelength#0) goto sin16s_genb::@2 Simple Condition (bool~) sin16sb::$1 [161] if((word) sin16sb::x#0<(const nomodify word) PI_u4f12) goto sin16sb::@1 Simple Condition (bool~) sin16sb::$3 [164] if((word) sin16sb::x#4<(const nomodify word) PI_HALF_u4f12) goto sin16sb::@2 Simple Condition (bool~) sin16sb::$14 [204] if((byte) sin16sb::isUpper#2==(byte) 0) goto sin16sb::@3 Simple Condition (bool~) memset::$1 [211] if((word) memset::num#0<=(byte) 0) goto memset::@1 Simple Condition (bool~) memset::$3 [218] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 Simple Condition (bool~) print_str::$1 [226] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 Simple Condition (bool~) print_sint::$0 [234] if((signed word) print_sint::w#1<(signed byte) 0) goto print_sint::@1 Simple Condition (bool~) main::$5 [293] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 Simple Condition (bool~) main::$9 [305] if((byte) main::i#1!=rangelast(0,$77)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [101] (word) mulu16_sel::v2#2 ← (unumber)(number) $10000/(number) 6 Constant right-side identified [182] (word) mulu16_sel::v2#7 ← (unumber)(number) $10000/(number) 6 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) rem16u#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 Constant (const word) divr16u::rem#3 = 0 Constant (const dword) mul16u::res#0 = 0 Constant (const dword) div32u16u::dividend#0 = PI2_u4f28 Constant (const dword) sin16s_gen::x#0 = 0 Constant (const word) sin16s_gen::i#0 = 0 Constant (const byte) sin16s::isUpper#0 = 0 Constant (const byte) sin16s::isUpper#1 = 1 Constant (const byte) mulu16_sel::select#0 = 0 Constant (const byte) mulu16_sel::select#1 = 1 Constant (const word) mulu16_sel::v2#2 = (unumber)$10000/6 Constant (const byte) mulu16_sel::select#2 = 1 Constant (const byte) mulu16_sel::select#3 = 0 Constant (const byte) mulu16_sel::select#4 = 0 Constant (const dword) div32u16u::dividend#1 = PI2_u4f28 Constant (const dword) sin16s_genb::x#0 = 0 Constant (const word) sin16s_genb::i#0 = 0 Constant (const byte) sin16sb::isUpper#0 = 0 Constant (const byte) sin16sb::isUpper#1 = 1 Constant (const byte) mulu16_sel::select#5 = 0 Constant (const byte) mulu16_sel::select#6 = 1 Constant (const word) mulu16_sel::v2#7 = (unumber)$10000/6 Constant (const byte) mulu16_sel::select#7 = 1 Constant (const byte) mulu16_sel::select#8 = 0 Constant (const byte) mulu16_sel::select#9 = 0 Constant (const byte*) print_line_cursor#0 = (byte*) 1024 Constant (const byte) print_char::ch#1 = '-' Constant (const byte) print_char::ch#2 = ' ' Constant (const byte) memset::c#0 = ' ' Constant (const word) memset::num#0 = $3e8 Constant (const signed word*) sin16s_gen::sintab#1 = main::sintab1 Constant (const word) sin16s_gen::wavelength#0 = main::wavelength Constant (const signed word*) sin16s_genb::sintab#1 = main::sintab2 Constant (const word) sin16s_genb::wavelength#0 = main::wavelength Constant (const signed word*) main::st1#0 = main::sintab1 Constant (const signed word*) main::st2#0 = main::sintab2 Constant (const byte) main::i#0 = 0 Constant (const byte*) print_str::str#1 = main::str Constant (const byte*) print_str::str#2 = main::str1 Successful SSA optimization Pass2ConstantIdentification Constant (const word) div32u16u::divisor#0 = sin16s_gen::wavelength#0 Constant (const word) div32u16u::divisor#1 = sin16s_genb::wavelength#0 Constant (const void*) memset::str#0 = (void*)print_line_cursor#0 Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) memset::$4 = (byte*)memset::str#0 Constant (const byte*) memset::dst#0 = (byte*)memset::str#0 Constant (const void*) memset::return#2 = memset::str#0 Successful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating [211] if((const word) memset::num#0<=(byte) 0) goto memset::@1 Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [17] divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value [19] if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 to (number) $10 Resolved ranged next value [303] main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value [305] if(main::i#1!=rangelast(0,$77)) goto main::@1 to (number) $78 Eliminating unused variable - keeping the phi block (word) rem16u#26 Eliminating unused constant (const void*) memset::return#2 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const word) rem16u#0 Successful SSA optimization PassNEliminateUnusedVars Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1 Adding number conversion cast (unumber) $78 in if((byte) main::i#1!=(number) $78) goto main::@1 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant integer cast $10 Simplifying constant integer cast $78 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $78 Successful SSA optimization PassNFinalizeNumberTypeConversions Constant right-side identified [158] (byte*) memset::end#0 ← (const byte*) memset::$4 + (const word) memset::num#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) memset::end#0 = memset::$4+memset::num#0 Successful SSA optimization Pass2ConstantIdentification Inlining Noop Cast [90] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1 Inlining Noop Cast [152] (signed word) sin16sb::sinx#0 ← (signed word)(word) sin16sb::usinx#1 keeping sin16sb::usinx#1 Successful SSA optimization Pass2NopCastInlining Rewriting multiplication to use shift [124] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 * (byte) 8 Rewriting division to use shift [150] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 / (byte) $10 Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 Inlining constant with var siblings (const word) divr16u::rem#3 Inlining constant with var siblings (const dword) div32u16u::dividend#0 Inlining constant with var siblings (const dword) div32u16u::dividend#1 Inlining constant with var siblings (const word) div32u16u::divisor#0 Inlining constant with var siblings (const word) div32u16u::divisor#1 Inlining constant with var siblings (const dword) mul16u::res#0 Inlining constant with var siblings (const dword) sin16s_gen::x#0 Inlining constant with var siblings (const word) sin16s_gen::i#0 Inlining constant with var siblings (const signed word*) sin16s_gen::sintab#1 Inlining constant with var siblings (const byte) sin16s::isUpper#0 Inlining constant with var siblings (const byte) sin16s::isUpper#1 Inlining constant with var siblings (const byte) mulu16_sel::select#0 Inlining constant with var siblings (const byte) mulu16_sel::select#1 Inlining constant with var siblings (const word) mulu16_sel::v2#2 Inlining constant with var siblings (const byte) mulu16_sel::select#2 Inlining constant with var siblings (const byte) mulu16_sel::select#3 Inlining constant with var siblings (const byte) mulu16_sel::select#4 Inlining constant with var siblings (const byte) mulu16_sel::select#5 Inlining constant with var siblings (const byte) mulu16_sel::select#6 Inlining constant with var siblings (const word) mulu16_sel::v2#7 Inlining constant with var siblings (const byte) mulu16_sel::select#7 Inlining constant with var siblings (const byte) mulu16_sel::select#8 Inlining constant with var siblings (const byte) mulu16_sel::select#9 Inlining constant with var siblings (const dword) sin16s_genb::x#0 Inlining constant with var siblings (const word) sin16s_genb::i#0 Inlining constant with var siblings (const signed word*) sin16s_genb::sintab#1 Inlining constant with var siblings (const byte) sin16sb::isUpper#0 Inlining constant with var siblings (const byte) sin16sb::isUpper#1 Inlining constant with var siblings (const byte*) memset::dst#0 Inlining constant with var siblings (const byte*) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#2 Inlining constant with var siblings (const byte) print_char::ch#1 Inlining constant with var siblings (const byte) print_char::ch#2 Inlining constant with var siblings (const signed word*) main::st1#0 Inlining constant with var siblings (const signed word*) main::st2#0 Inlining constant with var siblings (const byte) main::i#0 Constant inlined divr16u::rem#3 = (byte) 0 Constant inlined divr16u::i#0 = (byte) 0 Constant inlined div32u16u::dividend#1 = (const nomodify dword) PI2_u4f28 Constant inlined sin16s_gen::wavelength#0 = (const word) main::wavelength Constant inlined div32u16u::dividend#0 = (const nomodify dword) PI2_u4f28 Constant inlined sin16s::isUpper#0 = (byte) 0 Constant inlined mulu16_sel::v2#7 = (word)(number) $10000/(number) 6 Constant inlined mulu16_sel::select#4 = (byte) 0 Constant inlined mulu16_sel::select#5 = (byte) 0 Constant inlined divr16u::quotient#0 = (word) 0 Constant inlined mulu16_sel::select#2 = (byte) 1 Constant inlined mulu16_sel::select#3 = (byte) 0 Constant inlined memset::$4 = (byte*)(const void*) memset::str#0 Constant inlined mul16u::res#0 = (dword) 0 Constant inlined mulu16_sel::select#0 = (byte) 0 Constant inlined sin16s::isUpper#1 = (byte) 1 Constant inlined mulu16_sel::select#1 = (byte) 1 Constant inlined sin16s_genb::sintab#1 = (const signed word*) main::sintab2 Constant inlined main::i#0 = (byte) 0 Constant inlined sin16s_genb::x#0 = (dword) 0 Constant inlined sin16sb::isUpper#1 = (byte) 1 Constant inlined sin16s_genb::wavelength#0 = (const word) main::wavelength Constant inlined sin16sb::isUpper#0 = (byte) 0 Constant inlined sin16s_gen::i#0 = (word) 0 Constant inlined sin16s_genb::i#0 = (word) 0 Constant inlined mulu16_sel::select#8 = (byte) 0 Constant inlined mulu16_sel::select#9 = (byte) 0 Constant inlined mulu16_sel::select#6 = (byte) 1 Constant inlined sin16s_gen::sintab#1 = (const signed word*) main::sintab1 Constant inlined mulu16_sel::select#7 = (byte) 1 Constant inlined print_char::ch#2 = (byte) ' ' Constant inlined main::st2#0 = (const signed word*) main::sintab2 Constant inlined print_char::ch#1 = (byte) '-' Constant inlined main::st1#0 = (const signed word*) main::sintab1 Constant inlined mulu16_sel::v2#2 = (word)(number) $10000/(number) 6 Constant inlined sin16s_gen::x#0 = (dword) 0 Constant inlined div32u16u::divisor#1 = (const word) main::wavelength Constant inlined print_str::str#2 = (const byte*) main::str1 Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0 Constant inlined div32u16u::divisor#0 = (const word) main::wavelength Constant inlined print_str::str#1 = (const byte*) main::str Successful SSA optimization Pass2ConstantInlining Identical Phi Values (dword) div32u16u::dividend#2 (const nomodify dword) PI2_u4f28 Identical Phi Values (word) div32u16u::divisor#2 (const word) main::wavelength Successful SSA optimization Pass2IdenticalPhiElimination Constant right-side identified [19] (word) divr16u::dividend#1 ← > (const nomodify dword) PI2_u4f28 Constant right-side identified [24] (word) divr16u::dividend#2 ← < (const nomodify dword) PI2_u4f28 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const word) divr16u::dividend#1 = >PI2_u4f28 Constant (const word) divr16u::divisor#0 = main::wavelength Constant (const word) divr16u::dividend#2 = (const nomodify dword) PI2_u4f28 Constant inlined divr16u::divisor#0 = (const word) main::wavelength Constant inlined divr16u::dividend#2 = <(const nomodify dword) PI2_u4f28 Successful SSA optimization Pass2ConstantInlining Identical Phi Values (word) divr16u::divisor#6 (const word) main::wavelength Successful SSA optimization Pass2IdenticalPhiElimination Added new block during phi lifting divr16u::@7(between divr16u::@3 and divr16u::@1) Added new block during phi lifting divr16u::@8(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@9(between divr16u::@2 and divr16u::@3) Added new block during phi lifting mul16u::@6(between mul16u::@2 and mul16u::@4) Added new block during phi lifting sin16s::@12(between sin16s and sin16s::@1) Fixing phi predecessor for sin16s::isUpper#2 to new block ( sin16s -> sin16s::@12 ) during phi lifting. Added new block during phi lifting sin16s::@13(between sin16s::@1 and sin16s::@2) Added new block during phi lifting sin16s::@14(between sin16s::@11 and sin16s::@3) Added new block during phi lifting sin16sb::@12(between sin16sb and sin16sb::@1) Fixing phi predecessor for sin16sb::isUpper#2 to new block ( sin16sb -> sin16sb::@12 ) during phi lifting. Added new block during phi lifting sin16sb::@13(between sin16sb::@1 and sin16sb::@2) Added new block during phi lifting sin16sb::@14(between sin16sb::@11 and sin16sb::@3) Added new block during phi lifting main::@10(between main::@8 and main::@1) Added new block during phi lifting main::@11(between main::@1 and main::@2) Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @2 Adding NOP phi() at start of @3 Adding NOP phi() at start of @4 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::@5 Adding NOP phi() at start of main::@6 Adding NOP phi() at start of print_sint::@6 Adding NOP phi() at start of print_uint::@2 Adding NOP phi() at start of print_uchar::@2 Adding NOP phi() at start of print_cls Adding NOP phi() at start of print_cls::@1 Adding NOP phi() at start of memset Adding NOP phi() at start of memset::@2 Adding NOP phi() at start of memset::@1 Adding NOP phi() at start of sin16s_genb Adding NOP phi() at start of mul16u::@3 Adding NOP phi() at start of div32u16u Adding NOP phi() at start of sin16s_gen CALL GRAPH Calls in [] to main:4 Calls in [main] to sin16s_gen:8 sin16s_genb:10 print_cls:12 print_str:18 print_sint:22 print_str:24 Calls in [print_str] to print_char:44 Calls in [print_sint] to print_char:54 print_uint:58 print_char:62 Calls in [print_uint] to print_uchar:67 print_uchar:70 Calls in [print_uchar] to print_char:78 print_char:83 Calls in [print_cls] to memset:87 Calls in [sin16s_genb] to div32u16u:100 sin16sb:107 Calls in [sin16sb] to mulu16_sel:130 mulu16_sel:137 mulu16_sel:142 mulu16_sel:150 mulu16_sel:157 Calls in [mulu16_sel] to mul16u:173 Calls in [div32u16u] to divr16u:198 divr16u:203 Calls in [sin16s_gen] to div32u16u:239 sin16s:246 Calls in [sin16s] to mulu16_sel:270 mulu16_sel:277 mulu16_sel:282 mulu16_sel:290 mulu16_sel:297 Created 44 initial phi equivalence classes Coalesced [17] print_char_cursor#60 ← print_char_cursor#53 Coalesced [19] print_char_cursor#71 ← print_char_cursor#2 Coalesced [23] print_char_cursor#61 ← print_char_cursor#13 Coalesced [30] main::st1#8 ← main::st1#1 Coalesced [31] main::st2#8 ← main::st2#1 Coalesced [32] print_char_cursor#69 ← print_char_cursor#2 Coalesced [33] main::i#8 ← main::i#1 Coalesced (already) [34] print_char_cursor#70 ← print_char_cursor#53 Coalesced [36] print_str::str#7 ← print_str::str#6 Coalesced (already) [37] print_char_cursor#62 ← print_char_cursor#55 Coalesced [42] print_char::ch#6 ← print_char::ch#0 Coalesced [43] print_char_cursor#66 ← print_char_cursor#2 Coalesced [46] print_str::str#8 ← print_str::str#0 Coalesced (already) [47] print_char_cursor#63 ← print_char_cursor#13 Coalesced (already) [53] print_char_cursor#65 ← print_char_cursor#52 Coalesced [55] print_sint::w#9 ← print_sint::w#1 Coalesced (already) [61] print_char_cursor#64 ← print_char_cursor#52 Coalesced [64] print_sint::w#8 ← print_sint::w#0 Coalesced [66] print_uchar::b#4 ← print_uchar::b#0 Coalesced [69] print_uchar::b#5 ← print_uchar::b#1 Coalesced [76] print_char::ch#7 ← print_char::ch#3 Coalesced (already) [77] print_char_cursor#67 ← print_char_cursor#13 Coalesced [81] print_char::ch#8 ← print_char::ch#4 Coalesced (already) [82] print_char_cursor#68 ← print_char_cursor#13 Coalesced [98] memset::dst#4 ← memset::dst#1 Coalesced [114] sin16s_genb::i#5 ← sin16s_genb::i#1 Coalesced [115] sin16s_genb::x#5 ← sin16s_genb::x#1 Coalesced [116] sin16s_genb::sintab#7 ← sin16s_genb::sintab#0 Coalesced [119] sin16sb::x#9 ← sin16sb::x#1 Coalesced [123] sin16sb::x#11 ← sin16sb::x#2 Coalesced [128] mulu16_sel::v1#17 ← mulu16_sel::v1#5 Coalesced [129] mulu16_sel::v2#16 ← mulu16_sel::v2#5 Coalesced [135] mulu16_sel::v1#18 ← mulu16_sel::v1#6 Coalesced [136] mulu16_sel::v2#17 ← mulu16_sel::v2#6 Coalesced [141] mulu16_sel::v1#19 ← mulu16_sel::v1#7 Coalesced [148] mulu16_sel::v1#20 ← mulu16_sel::v1#8 Coalesced [149] mulu16_sel::v2#18 ← mulu16_sel::v2#8 Coalesced [155] mulu16_sel::v1#16 ← mulu16_sel::v1#9 Coalesced [156] mulu16_sel::v2#15 ← mulu16_sel::v2#9 Coalesced [164] sin16sb::return#6 ← sin16sb::sinx#1 Coalesced [168] sin16sb::x#10 ← sin16sb::x#4 Coalesced [169] sin16sb::x#8 ← sin16sb::x#0 Coalesced [180] mul16u::a#7 ← mul16u::a#1 Coalesced [181] mul16u::mb#6 ← mul16u::mb#0 Coalesced [189] mul16u::res#9 ← mul16u::res#1 Coalesced [193] mul16u::a#8 ← mul16u::a#0 Coalesced [194] mul16u::res#7 ← mul16u::res#6 Coalesced [195] mul16u::mb#7 ← mul16u::mb#1 Coalesced (already) [196] mul16u::res#8 ← mul16u::res#2 Coalesced [202] divr16u::rem#12 ← divr16u::rem#4 Coalesced [209] divr16u::rem#13 ← divr16u::rem#10 Coalesced [210] divr16u::dividend#9 ← divr16u::dividend#5 Coalesced [217] divr16u::rem#16 ← divr16u::rem#1 Coalesced [224] divr16u::rem#18 ← divr16u::rem#2 Coalesced [225] divr16u::return#8 ← divr16u::quotient#2 Coalesced [231] divr16u::rem#14 ← divr16u::rem#11 Coalesced [232] divr16u::dividend#10 ← divr16u::dividend#0 Coalesced [233] divr16u::quotient#9 ← divr16u::return#0 Coalesced [234] divr16u::i#7 ← divr16u::i#1 Coalesced [235] divr16u::rem#17 ← divr16u::rem#6 Coalesced [236] divr16u::return#7 ← divr16u::quotient#1 Coalesced [237] divr16u::rem#15 ← divr16u::rem#0 Coalesced [253] sin16s_gen::i#5 ← sin16s_gen::i#1 Coalesced [254] sin16s_gen::x#5 ← sin16s_gen::x#1 Coalesced [255] sin16s_gen::sintab#7 ← sin16s_gen::sintab#0 Coalesced [258] sin16s::x#9 ← sin16s::x#1 Coalesced [262] sin16s::x#11 ← sin16s::x#2 Coalesced [268] mulu16_sel::v1#12 ← mulu16_sel::v1#0 Coalesced [269] mulu16_sel::v2#12 ← mulu16_sel::v2#0 Coalesced [275] mulu16_sel::v1#13 ← mulu16_sel::v1#1 Coalesced [276] mulu16_sel::v2#13 ← mulu16_sel::v2#1 Coalesced [281] mulu16_sel::v1#14 ← mulu16_sel::v1#2 Coalesced [288] mulu16_sel::v1#15 ← mulu16_sel::v1#3 Coalesced [289] mulu16_sel::v2#14 ← mulu16_sel::v2#3 Coalesced [295] mulu16_sel::v1#11 ← mulu16_sel::v1#4 Coalesced [296] mulu16_sel::v2#11 ← mulu16_sel::v2#4 Coalesced [304] sin16s::return#6 ← sin16s::sinx#1 Coalesced [308] sin16s::x#10 ← sin16s::x#4 Coalesced [309] sin16s::x#8 ← sin16s::x#0 Coalesced down to 31 phi equivalence classes Culled Empty Block (label) @1 Culled Empty Block (label) @2 Culled Empty Block (label) @4 Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@9 Culled Empty Block (label) main::@10 Culled Empty Block (label) main::@11 Culled Empty Block (label) print_sint::@5 Culled Empty Block (label) print_sint::@6 Culled Empty Block (label) print_uint::@2 Culled Empty Block (label) print_uchar::@2 Culled Empty Block (label) print_cls::@1 Culled Empty Block (label) memset::@2 Culled Empty Block (label) memset::@1 Culled Empty Block (label) sin16sb::@13 Culled Empty Block (label) sin16sb::@12 Culled Empty Block (label) mul16u::@3 Culled Empty Block (label) mul16u::@6 Culled Empty Block (label) divr16u::@7 Culled Empty Block (label) divr16u::@9 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) sin16s::@13 Culled Empty Block (label) sin16s::@12 Renumbering block @3 to @1 Renumbering block mul16u::@4 to mul16u::@3 Renumbering block mul16u::@5 to mul16u::@4 Renumbering block sin16s::@14 to sin16s::@12 Renumbering block sin16sb::@14 to sin16sb::@12 Renumbering block memset::@3 to memset::@1 Renumbering block memset::@4 to memset::@2 Renumbering block main::@7 to main::@6 Renumbering block main::@8 to main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@4 Adding NOP phi() at start of main::@5 Adding NOP phi() at start of main::@3 Adding NOP phi() at start of main::@6 Adding NOP phi() at start of print_sint::@3 Adding NOP phi() at start of print_sint::@1 Adding NOP phi() at start of print_cls Adding NOP phi() at start of memset Adding NOP phi() at start of sin16s_genb Adding NOP phi() at start of div32u16u Adding NOP phi() at start of sin16s_gen FINAL CONTROL FLOW GRAPH @begin: scope:[] from [0] phi() to:@1 @1: scope:[] from @begin [1] phi() [2] call main to:@end @end: scope:[] from @1 [3] phi() (void()) main() main: scope:[main] from @1 [4] phi() [5] call sin16s_gen to:main::@4 main::@4: scope:[main] from main [6] phi() [7] call sin16s_genb to:main::@5 main::@5: scope:[main] from main::@4 [8] phi() [9] call print_cls to:main::@1 main::@1: scope:[main] from main::@5 main::@7 [10] (byte) main::i#2 ← phi( main::@5/(byte) 0 main::@7/(byte) main::i#1 ) [10] (byte*) print_char_cursor#53 ← phi( main::@5/(const byte*) print_line_cursor#0 main::@7/(byte*) print_char_cursor#2 ) [10] (signed word*) main::st2#2 ← phi( main::@5/(const signed word*) main::sintab2 main::@7/(signed word*) main::st2#1 ) [10] (signed word*) main::st1#2 ← phi( main::@5/(const signed word*) main::sintab1 main::@7/(signed word*) main::st1#1 ) [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 [13] phi() [14] call print_str to:main::@2 main::@2: scope:[main] from main::@1 main::@3 [15] (byte*) print_char_cursor#52 ← phi( main::@1/(byte*) print_char_cursor#53 main::@3/(byte*) print_char_cursor#2 ) [16] (signed word) print_sint::w#1 ← (signed word) main::sw#0 [17] call print_sint to:main::@6 main::@6: scope:[main] from main::@2 [18] phi() [19] call print_str to:main::@7 main::@7: scope:[main] from main::@6 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD [22] (byte) main::i#1 ← ++ (byte) main::i#2 [23] if((byte) main::i#1!=(byte) $78) goto main::@1 to:main::@return main::@return: scope:[main] from main::@7 [24] return to:@return (void()) print_str((byte*) print_str::str) print_str: scope:[print_str] from main::@3 main::@6 [25] (byte*) print_char_cursor#55 ← phi( main::@3/(byte*) print_char_cursor#53 main::@6/(byte*) print_char_cursor#13 ) [25] (byte*) print_str::str#6 ← phi( main::@3/(const byte*) main::str1 main::@6/(const byte*) main::str ) to:print_str::@1 print_str::@1: scope:[print_str] from print_str print_str::@3 [26] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#55 print_str::@3/(byte*) print_char_cursor#13 ) [26] (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#6 print_str::@3/(byte*) print_str::str#0 ) [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 to:print_str::@return print_str::@return: scope:[print_str] from print_str::@1 [28] return to:@return print_str::@2: scope:[print_str] from print_str::@1 [29] (byte) print_char::ch#0 ← *((byte*) print_str::str#3) [30] call print_char to:print_str::@3 print_str::@3: scope:[print_str] from print_str::@2 [31] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 to:print_str::@1 (void()) print_char((byte) print_char::ch) print_char: scope:[print_char] from print_sint::@1 print_sint::@3 print_str::@2 print_uchar print_uchar::@1 [32] (byte*) print_char_cursor#35 ← phi( print_sint::@1/(byte*) print_char_cursor#52 print_sint::@3/(byte*) print_char_cursor#52 print_str::@2/(byte*) print_char_cursor#2 print_uchar/(byte*) print_char_cursor#13 print_uchar::@1/(byte*) print_char_cursor#13 ) [32] (byte) print_char::ch#5 ← phi( print_sint::@1/(byte) '-' print_sint::@3/(byte) ' ' print_str::@2/(byte) print_char::ch#0 print_uchar/(byte) print_char::ch#3 print_uchar::@1/(byte) print_char::ch#4 ) [33] *((byte*) print_char_cursor#35) ← (byte) print_char::ch#5 [34] (byte*) print_char_cursor#13 ← ++ (byte*) print_char_cursor#35 to:print_char::@return print_char::@return: scope:[print_char] from print_char [35] return to:@return (void()) print_sint((signed word) print_sint::w) print_sint: scope:[print_sint] from main::@2 [36] if((signed word) print_sint::w#1<(signed byte) 0) goto print_sint::@1 to:print_sint::@3 print_sint::@3: scope:[print_sint] from print_sint [37] phi() [38] call print_char to:print_sint::@2 print_sint::@2: scope:[print_sint] from print_sint::@3 print_sint::@4 [39] (signed word) print_sint::w#4 ← phi( print_sint::@4/(signed word) print_sint::w#0 print_sint::@3/(signed word) print_sint::w#1 ) [40] (word) print_uint::w#0 ← (word)(signed word) print_sint::w#4 [41] call print_uint to:print_sint::@return print_sint::@return: scope:[print_sint] from print_sint::@2 [42] return to:@return print_sint::@1: scope:[print_sint] from print_sint [43] phi() [44] call print_char to:print_sint::@4 print_sint::@4: scope:[print_sint] from print_sint::@1 [45] (signed word) print_sint::w#0 ← - (signed word) print_sint::w#1 to:print_sint::@2 (void()) print_uint((word) print_uint::w) print_uint: scope:[print_uint] from print_sint::@2 [46] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 [47] call print_uchar to:print_uint::@1 print_uint::@1: scope:[print_uint] from print_uint [48] (byte) print_uchar::b#1 ← < (word) print_uint::w#0 [49] call print_uchar to:print_uint::@return print_uint::@return: scope:[print_uint] from print_uint::@1 [50] return to:@return (void()) print_uchar((byte) print_uchar::b) print_uchar: scope:[print_uchar] from print_uint print_uint::@1 [51] (byte) print_uchar::b#2 ← phi( print_uint/(byte) print_uchar::b#0 print_uint::@1/(byte) print_uchar::b#1 ) [52] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 [53] (byte) print_char::ch#3 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) [54] call print_char to:print_uchar::@1 print_uchar::@1: scope:[print_uchar] from print_uchar [55] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f [56] (byte) print_char::ch#4 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2) [57] call print_char to:print_uchar::@return print_uchar::@return: scope:[print_uchar] from print_uchar::@1 [58] return to:@return (void()) print_cls() print_cls: scope:[print_cls] from main::@5 [59] phi() [60] call memset to:print_cls::@return print_cls::@return: scope:[print_cls] from print_cls [61] return to:@return (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls [62] phi() to:memset::@1 memset::@1: scope:[memset] from memset memset::@2 [63] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@2/(byte*) memset::dst#1 ) [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 to:memset::@return memset::@return: scope:[memset] from memset::@1 [65] return to:@return memset::@2: scope:[memset] from memset::@1 [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 to:memset::@1 (void()) sin16s_genb((signed word*) sin16s_genb::sintab , (word) sin16s_genb::wavelength) sin16s_genb: scope:[sin16s_genb] from main::@4 [68] phi() [69] call div32u16u [70] (dword) div32u16u::return#3 ← (dword) div32u16u::return#0 to:sin16s_genb::@3 sin16s_genb::@3: scope:[sin16s_genb] from sin16s_genb [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 to:sin16s_genb::@1 sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@3 sin16s_genb::@4 [72] (signed word*) sin16s_genb::sintab#2 ← phi( sin16s_genb::@3/(const signed word*) main::sintab2 sin16s_genb::@4/(signed word*) sin16s_genb::sintab#0 ) [72] (dword) sin16s_genb::x#2 ← phi( sin16s_genb::@3/(dword) 0 sin16s_genb::@4/(dword) sin16s_genb::x#1 ) [72] (word) sin16s_genb::i#2 ← phi( sin16s_genb::@3/(word) 0 sin16s_genb::@4/(word) sin16s_genb::i#1 ) [73] if((word) sin16s_genb::i#2<(const word) main::wavelength) goto sin16s_genb::@2 to:sin16s_genb::@return sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@1 [74] return to:@return sin16s_genb::@2: scope:[sin16s_genb] from sin16s_genb::@1 [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 [76] call sin16sb [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 to:sin16s_genb::@4 sin16s_genb::@4: scope:[sin16s_genb] from sin16s_genb::@2 [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [82] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 to:sin16s_genb::@1 (signed word()) sin16sb((word) sin16sb::x) sin16sb: scope:[sin16sb] from sin16s_genb::@2 [83] if((word) sin16sb::x#0<(const nomodify word) PI_u4f12) goto sin16sb::@1 to:sin16sb::@4 sin16sb::@4: scope:[sin16sb] from sin16sb [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const nomodify word) PI_u4f12 to:sin16sb::@1 sin16sb::@1: scope:[sin16sb] from sin16sb sin16sb::@4 [85] (byte) sin16sb::isUpper#2 ← phi( sin16sb/(byte) 0 sin16sb::@4/(byte) 1 ) [85] (word) sin16sb::x#4 ← phi( sin16sb/(word) sin16sb::x#0 sin16sb::@4/(word) sin16sb::x#1 ) [86] if((word) sin16sb::x#4<(const nomodify word) PI_HALF_u4f12) goto sin16sb::@2 to:sin16sb::@5 sin16sb::@5: scope:[sin16sb] from sin16sb::@1 [87] (word) sin16sb::x#2 ← (const nomodify word) PI_u4f12 - (word) sin16sb::x#4 to:sin16sb::@2 sin16sb::@2: scope:[sin16sb] from sin16sb::@1 sin16sb::@5 [88] (word) sin16sb::x#6 ← phi( sin16sb::@1/(word) sin16sb::x#4 sin16sb::@5/(word) sin16sb::x#2 ) [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 [92] call mulu16_sel [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 to:sin16sb::@7 sin16sb::@7: scope:[sin16sb] from sin16sb::@2 [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 [97] call mulu16_sel [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 to:sin16sb::@8 sin16sb::@8: scope:[sin16sb] from sin16sb::@7 [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 [101] call mulu16_sel [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 to:sin16sb::@9 sin16sb::@9: scope:[sin16sb] from sin16sb::@8 [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 [107] call mulu16_sel [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 to:sin16sb::@10 sin16sb::@10: scope:[sin16sb] from sin16sb::@9 [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 [112] call mulu16_sel [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 to:sin16sb::@11 sin16sb::@11: scope:[sin16sb] from sin16sb::@10 [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 [117] if((byte) sin16sb::isUpper#2==(byte) 0) goto sin16sb::@12 to:sin16sb::@6 sin16sb::@6: scope:[sin16sb] from sin16sb::@11 [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 to:sin16sb::@3 sin16sb::@3: scope:[sin16sb] from sin16sb::@12 sin16sb::@6 [119] (signed word) sin16sb::return#1 ← phi( sin16sb::@12/(signed word) sin16sb::return#5 sin16sb::@6/(signed word) sin16sb::sinx#1 ) to:sin16sb::@return sin16sb::@return: scope:[sin16sb] from sin16sb::@3 [120] return to:@return sin16sb::@12: scope:[sin16sb] from sin16sb::@11 [121] (signed word) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 to:sin16sb::@3 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9 sin16sb::@10 sin16sb::@2 sin16sb::@7 sin16sb::@8 sin16sb::@9 [122] (byte) mulu16_sel::select#10 ← phi( sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 sin16s::@9/(byte) 0 sin16sb::@10/(byte) 0 sin16sb::@2/(byte) 0 sin16sb::@7/(byte) 1 sin16sb::@8/(byte) 1 sin16sb::@9/(byte) 0 ) [122] (word) mulu16_sel::v2#10 ← phi( sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 sin16s::@9/(word) mulu16_sel::v2#3 sin16sb::@10/(word) mulu16_sel::v2#9 sin16sb::@2/(word) mulu16_sel::v2#5 sin16sb::@7/(word) mulu16_sel::v2#6 sin16sb::@8/(word)(number) $10000/(number) 6 sin16sb::@9/(word) mulu16_sel::v2#8 ) [122] (word) mulu16_sel::v1#10 ← phi( sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 sin16s::@9/(word) mulu16_sel::v1#3 sin16sb::@10/(word) mulu16_sel::v1#9 sin16sb::@2/(word) mulu16_sel::v1#5 sin16sb::@7/(word) mulu16_sel::v1#6 sin16sb::@8/(word) mulu16_sel::v1#7 sin16sb::@9/(word) mulu16_sel::v1#8 ) [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 [125] call mul16u [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 to:mulu16_sel::@1 mulu16_sel::@1: scope:[mulu16_sel] from mulu16_sel [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 to:mulu16_sel::@return mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@1 [130] return to:@return (dword()) mul16u((word) mul16u::a , (word) mul16u::b) mul16u: scope:[mul16u] from mulu16_sel [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 to:mul16u::@1 mul16u::@1: scope:[mul16u] from mul16u mul16u::@3 [132] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 ) [132] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 ) [132] (word) mul16u::a#2 ← phi( mul16u/(word) mul16u::a#1 mul16u::@3/(word) mul16u::a#0 ) [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 to:mul16u::@return mul16u::@return: scope:[mul16u] from mul16u::@1 [134] return to:@return mul16u::@2: scope:[mul16u] from mul16u::@1 [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [136] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 to:mul16u::@4 mul16u::@4: scope:[mul16u] from mul16u::@2 [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 to:mul16u::@3 mul16u::@3: scope:[mul16u] from mul16u::@2 mul16u::@4 [138] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 ) [139] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 [140] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 to:mul16u::@1 (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) div32u16u: scope:[div32u16u] from sin16s_gen sin16s_genb [141] phi() [142] call divr16u [143] (word) divr16u::return#2 ← (word) divr16u::return#0 to:div32u16u::@1 div32u16u::@1: scope:[div32u16u] from div32u16u [144] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [145] (word) divr16u::rem#4 ← (word) rem16u#1 [146] call divr16u [147] (word) divr16u::return#3 ← (word) divr16u::return#0 to:div32u16u::@2 div32u16u::@2: scope:[div32u16u] from div32u16u::@1 [148] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [149] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 to:div32u16u::@return div32u16u::@return: scope:[div32u16u] from div32u16u::@2 [150] return to:@return (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) divr16u: scope:[divr16u] from div32u16u div32u16u::@1 [151] (word) divr16u::dividend#5 ← phi( div32u16u/>(const nomodify dword) PI2_u4f28 div32u16u::@1/<(const nomodify dword) PI2_u4f28 ) [151] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [152] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 ) [152] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 ) [152] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [152] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [153] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 [154] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [155] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 [156] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 [157] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 [158] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [159] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 [160] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 [161] if((word) divr16u::rem#6<(const word) main::wavelength) goto divr16u::@3 to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 [162] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [163] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 [164] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [164] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) [165] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [166] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 to:divr16u::@6 divr16u::@6: scope:[divr16u] from divr16u::@3 [167] (word) rem16u#1 ← (word) divr16u::rem#11 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 [168] return to:@return (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) sin16s_gen: scope:[sin16s_gen] from main [169] phi() [170] call div32u16u [171] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 to:sin16s_gen::@3 sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 to:sin16s_gen::@1 sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@3 sin16s_gen::@4 [173] (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@3/(const signed word*) main::sintab1 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 ) [173] (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(dword) 0 sin16s_gen::@4/(dword) sin16s_gen::x#1 ) [173] (word) sin16s_gen::i#2 ← phi( sin16s_gen::@3/(word) 0 sin16s_gen::@4/(word) sin16s_gen::i#1 ) [174] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 to:sin16s_gen::@return sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@1 [175] return to:@return sin16s_gen::@2: scope:[sin16s_gen] from sin16s_gen::@1 [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [177] call sin16s [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 to:sin16s_gen::@4 sin16s_gen::@4: scope:[sin16s_gen] from sin16s_gen::@2 [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [183] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 to:sin16s_gen::@1 (signed word()) sin16s((dword) sin16s::x) sin16s: scope:[sin16s] from sin16s_gen::@2 [184] if((dword) sin16s::x#0<(const nomodify dword) PI_u4f28) goto sin16s::@1 to:sin16s::@4 sin16s::@4: scope:[sin16s] from sin16s [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const nomodify dword) PI_u4f28 to:sin16s::@1 sin16s::@1: scope:[sin16s] from sin16s sin16s::@4 [186] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 ) [186] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) [187] if((dword) sin16s::x#4<(const nomodify dword) PI_HALF_u4f28) goto sin16s::@2 to:sin16s::@5 sin16s::@5: scope:[sin16s] from sin16s::@1 [188] (dword) sin16s::x#2 ← (const nomodify dword) PI_u4f28 - (dword) sin16s::x#4 to:sin16s::@2 sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5 [189] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [194] call mulu16_sel [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 to:sin16s::@7 sin16s::@7: scope:[sin16s] from sin16s::@2 [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [199] call mulu16_sel [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 to:sin16s::@8 sin16s::@8: scope:[sin16s] from sin16s::@7 [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [203] call mulu16_sel [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 to:sin16s::@9 sin16s::@9: scope:[sin16s] from sin16s::@8 [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [209] call mulu16_sel [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 to:sin16s::@10 sin16s::@10: scope:[sin16s] from sin16s::@9 [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [214] call mulu16_sel [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 to:sin16s::@11 sin16s::@11: scope:[sin16s] from sin16s::@10 [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [219] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 to:sin16s::@6 sin16s::@6: scope:[sin16s] from sin16s::@11 [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 to:sin16s::@3 sin16s::@3: scope:[sin16s] from sin16s::@12 sin16s::@6 [221] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) to:sin16s::@return sin16s::@return: scope:[sin16s] from sin16s::@3 [222] return to:@return sin16s::@12: scope:[sin16s] from sin16s::@11 [223] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 to:sin16s::@3 VARIABLE REGISTER WEIGHTS (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (dword) div32u16u::dividend (word) div32u16u::divisor (dword) div32u16u::quotient (word) div32u16u::quotient_hi (word) div32u16u::quotient_hi#0 400.4 (word) div32u16u::quotient_lo (word) div32u16u::quotient_lo#0 2002.0 (dword) div32u16u::return (dword) div32u16u::return#0 300.75 (dword) div32u16u::return#2 202.0 (dword) div32u16u::return#3 202.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 200002.0 (byte~) divr16u::$2 200002.0 (word) divr16u::dividend (word) divr16u::dividend#0 25000.25 (word) divr16u::dividend#3 44286.28571428572 (word) divr16u::dividend#5 10001.0 (word) divr16u::divisor (byte) divr16u::i (byte) divr16u::i#1 150001.5 (byte) divr16u::i#2 15384.76923076923 (word) divr16u::quotient (word) divr16u::quotient#1 150001.5 (word) divr16u::quotient#2 100001.0 (word) divr16u::quotient#3 25000.25 (word) divr16u::rem (word) divr16u::rem#0 75000.75 (word) divr16u::rem#1 200002.0 (word) divr16u::rem#10 11002.0 (word) divr16u::rem#11 103334.66666666667 (word) divr16u::rem#2 200002.0 (word) divr16u::rem#4 2002.0 (word) divr16u::rem#5 210003.0 (word) divr16u::rem#6 100001.0 (word) divr16u::return (word) divr16u::return#0 43143.57142857143 (word) divr16u::return#2 2002.0 (word) divr16u::return#3 2002.0 (void()) main() (byte) main::i (byte) main::i#1 151.5 (byte) main::i#2 16.833333333333332 (signed word*) main::st1 (signed word*) main::st1#1 50.5 (signed word*) main::st1#2 30.299999999999997 (signed word*) main::st2 (signed word*) main::st2#1 67.33333333333333 (signed word*) main::st2#2 27.545454545454547 (signed word) main::sw (signed word) main::sw#0 60.599999999999994 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c (byte*) memset::dst (byte*) memset::dst#1 20002.0 (byte*) memset::dst#2 13334.666666666666 (byte*) memset::end (word) memset::num (void*) memset::return (void*) memset::str (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (byte~) mul16u::$1 2.00000002E8 (word) mul16u::a (word) mul16u::a#0 1.00000001E8 (word) mul16u::a#1 366667.3333333334 (word) mul16u::a#2 6.683333416666667E7 (word) mul16u::b (word) mul16u::b#0 100001.0 (dword) mul16u::mb (dword) mul16u::mb#0 2000002.0 (dword) mul16u::mb#1 2.00000002E8 (dword) mul16u::mb#2 4.300000057142857E7 (dword) mul16u::res (dword) mul16u::res#1 2.00000002E8 (dword) mul16u::res#2 5.0016667333333336E7 (dword) mul16u::res#6 1.00000001E8 (dword) mul16u::return (dword) mul16u::return#2 200002.0 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) (dword~) mulu16_sel::$0 200002.0 (dword~) mulu16_sel::$1 200002.0 (word) mulu16_sel::return (word) mulu16_sel::return#0 20002.0 (word) mulu16_sel::return#1 20002.0 (word) mulu16_sel::return#10 20002.0 (word) mulu16_sel::return#11 20002.0 (word) mulu16_sel::return#14 20002.0 (word) mulu16_sel::return#15 20002.0 (word) mulu16_sel::return#16 20002.0 (word) mulu16_sel::return#17 16667.583333333332 (word) mulu16_sel::return#18 20002.0 (word) mulu16_sel::return#19 20002.0 (word) mulu16_sel::return#20 20002.0 (byte) mulu16_sel::select (byte) mulu16_sel::select#10 16666.833333333332 (word) mulu16_sel::v1 (word) mulu16_sel::v1#0 10001.0 (word) mulu16_sel::v1#1 10001.0 (word) mulu16_sel::v1#10 200011.0 (word) mulu16_sel::v1#2 20002.0 (word) mulu16_sel::v1#3 10001.0 (word) mulu16_sel::v1#4 10001.0 (word) mulu16_sel::v1#5 10001.0 (word) mulu16_sel::v1#6 10001.0 (word) mulu16_sel::v1#7 20002.0 (word) mulu16_sel::v1#8 10001.0 (word) mulu16_sel::v1#9 10001.0 (word) mulu16_sel::v2 (word) mulu16_sel::v2#0 20002.0 (word) mulu16_sel::v2#1 20002.0 (word) mulu16_sel::v2#10 90004.5 (word) mulu16_sel::v2#3 20002.0 (word) mulu16_sel::v2#4 20002.0 (word) mulu16_sel::v2#5 20002.0 (word) mulu16_sel::v2#6 20002.0 (word) mulu16_sel::v2#8 20002.0 (word) mulu16_sel::v2#9 20002.0 (void()) print_char((byte) print_char::ch) (byte) print_char::ch (byte) print_char::ch#0 200002.0 (byte) print_char::ch#3 200002.0 (byte) print_char::ch#4 200002.0 (byte) print_char::ch#5 1300004.0 (byte*) print_char_cursor (byte*) print_char_cursor#13 50004.03846153846 (byte*) print_char_cursor#2 20120.5 (byte*) print_char_cursor#35 1151003.5 (byte*) print_char_cursor#52 440.79999999999995 (byte*) print_char_cursor#53 75.75 (byte*) print_char_cursor#55 1203.0 (void()) print_cls() (byte*) print_line_cursor (byte*) print_screen (void()) print_sint((signed word) print_sint::w) (signed word) print_sint::w (signed word) print_sint::w#0 2002.0 (signed word) print_sint::w#1 517.3333333333334 (signed word) print_sint::w#4 2002.0 (void()) print_str((byte*) print_str::str) (byte*) print_str::str (byte*) print_str::str#0 200002.0 (byte*) print_str::str#3 100251.25 (byte*) print_str::str#6 1001.0 (void()) print_uchar((byte) print_uchar::b) (byte~) print_uchar::$0 200002.0 (byte~) print_uchar::$2 200002.0 (byte) print_uchar::b (byte) print_uchar::b#0 20002.0 (byte) print_uchar::b#1 20002.0 (byte) print_uchar::b#2 55001.0 (void()) print_uint((word) print_uint::w) (word) print_uint::w (word) print_uint::w#0 7001.0 (word) rem16u (word) rem16u#1 2200.4 (signed word()) sin16s((dword) sin16s::x) (dword~) sin16s::$4 20002.0 (byte) sin16s::isUpper (byte) sin16s::isUpper#2 303.06060606060606 (signed word) sin16s::return (signed word) sin16s::return#0 2002.0 (signed word) sin16s::return#1 7001.0 (signed word) sin16s::return#5 20002.0 (signed word) sin16s::sinx (signed word) sin16s::sinx#1 20002.0 (word) sin16s::usinx (word) sin16s::usinx#0 1666.8333333333333 (word) sin16s::usinx#1 5000.5 (dword) sin16s::x (dword) sin16s::x#0 15502.0 (dword) sin16s::x#1 20002.0 (dword) sin16s::x#2 20002.0 (dword) sin16s::x#4 25002.5 (dword) sin16s::x#6 30003.0 (word) sin16s::x1 (word) sin16s::x1#0 3182.1363636363635 (word) sin16s::x2 (word) sin16s::x2#0 20002.0 (word) sin16s::x3 (word) sin16s::x3#0 5000.5 (word) sin16s::x3_6 (word) sin16s::x3_6#0 20002.0 (word) sin16s::x4 (word) sin16s::x4#0 20002.0 (word) sin16s::x5 (word) sin16s::x5#0 20002.0 (word) sin16s::x5_128 (word) sin16s::x5_128#0 20002.0 (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) (signed word~) sin16s_gen::$2 2002.0 (word) sin16s_gen::i (word) sin16s_gen::i#1 2002.0 (word) sin16s_gen::i#2 333.6666666666667 (signed word*) sin16s_gen::sintab (signed word*) sin16s_gen::sintab#0 667.3333333333334 (signed word*) sin16s_gen::sintab#2 429.0 (dword) sin16s_gen::step (dword) sin16s_gen::step#0 100.18181818181819 (word) sin16s_gen::wavelength (dword) sin16s_gen::x (dword) sin16s_gen::x#1 1001.0 (dword) sin16s_gen::x#2 375.375 (void()) sin16s_genb((signed word*) sin16s_genb::sintab , (word) sin16s_genb::wavelength) (signed word~) sin16s_genb::$3 2002.0 (word) sin16s_genb::i (word) sin16s_genb::i#1 2002.0 (word) sin16s_genb::i#2 333.6666666666667 (signed word*) sin16s_genb::sintab (signed word*) sin16s_genb::sintab#0 667.3333333333334 (signed word*) sin16s_genb::sintab#2 429.0 (dword) sin16s_genb::step (dword) sin16s_genb::step#0 100.18181818181819 (word) sin16s_genb::wavelength (dword) sin16s_genb::x (dword) sin16s_genb::x#1 1001.0 (dword) sin16s_genb::x#2 375.375 (signed word()) sin16sb((word) sin16sb::x) (byte) sin16sb::isUpper (byte) sin16sb::isUpper#2 312.53125 (signed word) sin16sb::return (signed word) sin16sb::return#0 2002.0 (signed word) sin16sb::return#1 7001.0 (signed word) sin16sb::return#5 20002.0 (signed word) sin16sb::sinx (signed word) sin16sb::sinx#1 20002.0 (word) sin16sb::usinx (word) sin16sb::usinx#0 1666.8333333333333 (word) sin16sb::usinx#1 5000.5 (word) sin16sb::x (word) sin16sb::x#0 15502.0 (word) sin16sb::x#1 20002.0 (word) sin16sb::x#2 20002.0 (word) sin16sb::x#4 25002.5 (word) sin16sb::x#6 30003.0 (word) sin16sb::x1 (word) sin16sb::x1#0 3182.1363636363635 (word) sin16sb::x2 (word) sin16sb::x2#0 20002.0 (word) sin16sb::x3 (word) sin16sb::x3#0 5000.5 (word) sin16sb::x3_6 (word) sin16sb::x3_6#0 20002.0 (word) sin16sb::x4 (word) sin16sb::x4#0 20002.0 (word) sin16sb::x5 (word) sin16sb::x5#0 20002.0 (word) sin16sb::x5_128 (word) sin16sb::x5_128#0 20002.0 Initial phi equivalence classes [ main::st1#2 main::st1#1 ] [ main::st2#2 main::st2#1 ] [ main::i#2 main::i#1 ] [ print_str::str#3 print_str::str#6 print_str::str#0 ] [ print_char::ch#5 print_char::ch#0 print_char::ch#3 print_char::ch#4 ] [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#52 print_char_cursor#53 print_char_cursor#2 print_char_cursor#13 ] [ print_sint::w#4 print_sint::w#0 print_sint::w#1 ] [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] [ memset::dst#2 memset::dst#1 ] [ sin16s_genb::i#2 sin16s_genb::i#1 ] [ sin16s_genb::x#2 sin16s_genb::x#1 ] [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] [ sin16sb::isUpper#2 ] [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 ] [ mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 ] [ mulu16_sel::select#10 ] [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] [ sin16s_gen::i#2 sin16s_gen::i#1 ] [ sin16s_gen::x#2 sin16s_gen::x#1 ] [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] Added variable main::sw#0 to live range equivalence class [ main::sw#0 ] Added variable print_uint::w#0 to live range equivalence class [ print_uint::w#0 ] Added variable print_uchar::$0 to live range equivalence class [ print_uchar::$0 ] Added variable print_uchar::$2 to live range equivalence class [ print_uchar::$2 ] Added variable div32u16u::return#3 to live range equivalence class [ div32u16u::return#3 ] Added variable sin16s_genb::step#0 to live range equivalence class [ sin16s_genb::step#0 ] Added variable sin16sb::return#0 to live range equivalence class [ sin16sb::return#0 ] Added variable sin16s_genb::$3 to live range equivalence class [ sin16s_genb::$3 ] Added variable sin16sb::x1#0 to live range equivalence class [ sin16sb::x1#0 ] Added variable mulu16_sel::return#18 to live range equivalence class [ mulu16_sel::return#18 ] Added variable sin16sb::x2#0 to live range equivalence class [ sin16sb::x2#0 ] Added variable mulu16_sel::return#19 to live range equivalence class [ mulu16_sel::return#19 ] Added variable sin16sb::x3#0 to live range equivalence class [ sin16sb::x3#0 ] Added variable mulu16_sel::return#20 to live range equivalence class [ mulu16_sel::return#20 ] Added variable sin16sb::x3_6#0 to live range equivalence class [ sin16sb::x3_6#0 ] Added variable sin16sb::usinx#0 to live range equivalence class [ sin16sb::usinx#0 ] Added variable mulu16_sel::return#10 to live range equivalence class [ mulu16_sel::return#10 ] Added variable sin16sb::x4#0 to live range equivalence class [ sin16sb::x4#0 ] Added variable mulu16_sel::return#11 to live range equivalence class [ mulu16_sel::return#11 ] Added variable sin16sb::x5#0 to live range equivalence class [ sin16sb::x5#0 ] Added variable sin16sb::x5_128#0 to live range equivalence class [ sin16sb::x5_128#0 ] Added variable sin16sb::usinx#1 to live range equivalence class [ sin16sb::usinx#1 ] Added variable mul16u::b#0 to live range equivalence class [ mul16u::b#0 ] Added variable mul16u::return#2 to live range equivalence class [ mul16u::return#2 ] Added variable mulu16_sel::$0 to live range equivalence class [ mulu16_sel::$0 ] Added variable mulu16_sel::$1 to live range equivalence class [ mulu16_sel::$1 ] Added variable mulu16_sel::return#17 to live range equivalence class [ mulu16_sel::return#17 ] Added variable mul16u::$1 to live range equivalence class [ mul16u::$1 ] Added variable divr16u::return#2 to live range equivalence class [ divr16u::return#2 ] Added variable div32u16u::quotient_hi#0 to live range equivalence class [ div32u16u::quotient_hi#0 ] Added variable divr16u::return#3 to live range equivalence class [ divr16u::return#3 ] Added variable div32u16u::quotient_lo#0 to live range equivalence class [ div32u16u::quotient_lo#0 ] Added variable div32u16u::return#0 to live range equivalence class [ div32u16u::return#0 ] Added variable divr16u::$1 to live range equivalence class [ divr16u::$1 ] Added variable divr16u::$2 to live range equivalence class [ divr16u::$2 ] Added variable rem16u#1 to live range equivalence class [ rem16u#1 ] Added variable div32u16u::return#2 to live range equivalence class [ div32u16u::return#2 ] Added variable sin16s_gen::step#0 to live range equivalence class [ sin16s_gen::step#0 ] Added variable sin16s::return#0 to live range equivalence class [ sin16s::return#0 ] Added variable sin16s_gen::$2 to live range equivalence class [ sin16s_gen::$2 ] Added variable sin16s::$4 to live range equivalence class [ sin16s::$4 ] Added variable sin16s::x1#0 to live range equivalence class [ sin16s::x1#0 ] Added variable mulu16_sel::return#0 to live range equivalence class [ mulu16_sel::return#0 ] Added variable sin16s::x2#0 to live range equivalence class [ sin16s::x2#0 ] Added variable mulu16_sel::return#1 to live range equivalence class [ mulu16_sel::return#1 ] Added variable sin16s::x3#0 to live range equivalence class [ sin16s::x3#0 ] Added variable mulu16_sel::return#14 to live range equivalence class [ mulu16_sel::return#14 ] Added variable sin16s::x3_6#0 to live range equivalence class [ sin16s::x3_6#0 ] Added variable sin16s::usinx#0 to live range equivalence class [ sin16s::usinx#0 ] Added variable mulu16_sel::return#15 to live range equivalence class [ mulu16_sel::return#15 ] Added variable sin16s::x4#0 to live range equivalence class [ sin16s::x4#0 ] Added variable mulu16_sel::return#16 to live range equivalence class [ mulu16_sel::return#16 ] Added variable sin16s::x5#0 to live range equivalence class [ sin16s::x5#0 ] Added variable sin16s::x5_128#0 to live range equivalence class [ sin16s::x5_128#0 ] Added variable sin16s::usinx#1 to live range equivalence class [ sin16s::usinx#1 ] Complete equivalence classes [ main::st1#2 main::st1#1 ] [ main::st2#2 main::st2#1 ] [ main::i#2 main::i#1 ] [ print_str::str#3 print_str::str#6 print_str::str#0 ] [ print_char::ch#5 print_char::ch#0 print_char::ch#3 print_char::ch#4 ] [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#52 print_char_cursor#53 print_char_cursor#2 print_char_cursor#13 ] [ print_sint::w#4 print_sint::w#0 print_sint::w#1 ] [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] [ memset::dst#2 memset::dst#1 ] [ sin16s_genb::i#2 sin16s_genb::i#1 ] [ sin16s_genb::x#2 sin16s_genb::x#1 ] [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] [ sin16sb::isUpper#2 ] [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 ] [ mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 ] [ mulu16_sel::select#10 ] [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] [ sin16s_gen::i#2 sin16s_gen::i#1 ] [ sin16s_gen::x#2 sin16s_gen::x#1 ] [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] [ sin16s::isUpper#2 ] [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] [ main::sw#0 ] [ print_uint::w#0 ] [ print_uchar::$0 ] [ print_uchar::$2 ] [ div32u16u::return#3 ] [ sin16s_genb::step#0 ] [ sin16sb::return#0 ] [ sin16s_genb::$3 ] [ sin16sb::x1#0 ] [ mulu16_sel::return#18 ] [ sin16sb::x2#0 ] [ mulu16_sel::return#19 ] [ sin16sb::x3#0 ] [ mulu16_sel::return#20 ] [ sin16sb::x3_6#0 ] [ sin16sb::usinx#0 ] [ mulu16_sel::return#10 ] [ sin16sb::x4#0 ] [ mulu16_sel::return#11 ] [ sin16sb::x5#0 ] [ sin16sb::x5_128#0 ] [ sin16sb::usinx#1 ] [ mul16u::b#0 ] [ mul16u::return#2 ] [ mulu16_sel::$0 ] [ mulu16_sel::$1 ] [ mulu16_sel::return#17 ] [ mul16u::$1 ] [ divr16u::return#2 ] [ div32u16u::quotient_hi#0 ] [ divr16u::return#3 ] [ div32u16u::quotient_lo#0 ] [ div32u16u::return#0 ] [ divr16u::$1 ] [ divr16u::$2 ] [ rem16u#1 ] [ div32u16u::return#2 ] [ sin16s_gen::step#0 ] [ sin16s::return#0 ] [ sin16s_gen::$2 ] [ sin16s::$4 ] [ sin16s::x1#0 ] [ mulu16_sel::return#0 ] [ sin16s::x2#0 ] [ mulu16_sel::return#1 ] [ sin16s::x3#0 ] [ mulu16_sel::return#14 ] [ sin16s::x3_6#0 ] [ sin16s::usinx#0 ] [ mulu16_sel::return#15 ] [ sin16s::x4#0 ] [ mulu16_sel::return#16 ] [ sin16s::x5#0 ] [ sin16s::x5_128#0 ] [ sin16s::usinx#1 ] Allocated zp[2]:2 [ main::st1#2 main::st1#1 ] Allocated zp[2]:4 [ main::st2#2 main::st2#1 ] Allocated zp[1]:6 [ main::i#2 main::i#1 ] Allocated zp[2]:7 [ print_str::str#3 print_str::str#6 print_str::str#0 ] Allocated zp[1]:9 [ print_char::ch#5 print_char::ch#0 print_char::ch#3 print_char::ch#4 ] Allocated zp[2]:10 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#52 print_char_cursor#53 print_char_cursor#2 print_char_cursor#13 ] Allocated zp[2]:12 [ print_sint::w#4 print_sint::w#0 print_sint::w#1 ] Allocated zp[1]:14 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Allocated zp[2]:15 [ memset::dst#2 memset::dst#1 ] Allocated zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] Allocated zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] Allocated zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] Allocated zp[1]:25 [ sin16sb::isUpper#2 ] Allocated zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] Allocated zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] Allocated zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 ] Allocated zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 ] Allocated zp[1]:34 [ mulu16_sel::select#10 ] Allocated zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] Allocated zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] Allocated zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] Allocated zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] Allocated zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] Allocated zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] Allocated zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] Allocated zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] Allocated zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] Allocated zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] Allocated zp[1]:60 [ sin16s::isUpper#2 ] Allocated zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] Allocated zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] Allocated zp[2]:67 [ main::sw#0 ] Allocated zp[2]:69 [ print_uint::w#0 ] Allocated zp[1]:71 [ print_uchar::$0 ] Allocated zp[1]:72 [ print_uchar::$2 ] Allocated zp[4]:73 [ div32u16u::return#3 ] Allocated zp[4]:77 [ sin16s_genb::step#0 ] Allocated zp[2]:81 [ sin16sb::return#0 ] Allocated zp[2]:83 [ sin16s_genb::$3 ] Allocated zp[2]:85 [ sin16sb::x1#0 ] Allocated zp[2]:87 [ mulu16_sel::return#18 ] Allocated zp[2]:89 [ sin16sb::x2#0 ] Allocated zp[2]:91 [ mulu16_sel::return#19 ] Allocated zp[2]:93 [ sin16sb::x3#0 ] Allocated zp[2]:95 [ mulu16_sel::return#20 ] Allocated zp[2]:97 [ sin16sb::x3_6#0 ] Allocated zp[2]:99 [ sin16sb::usinx#0 ] Allocated zp[2]:101 [ mulu16_sel::return#10 ] Allocated zp[2]:103 [ sin16sb::x4#0 ] Allocated zp[2]:105 [ mulu16_sel::return#11 ] Allocated zp[2]:107 [ sin16sb::x5#0 ] Allocated zp[2]:109 [ sin16sb::x5_128#0 ] Allocated zp[2]:111 [ sin16sb::usinx#1 ] Allocated zp[2]:113 [ mul16u::b#0 ] Allocated zp[4]:115 [ mul16u::return#2 ] Allocated zp[4]:119 [ mulu16_sel::$0 ] Allocated zp[4]:123 [ mulu16_sel::$1 ] Allocated zp[2]:127 [ mulu16_sel::return#17 ] Allocated zp[1]:129 [ mul16u::$1 ] Allocated zp[2]:130 [ divr16u::return#2 ] Allocated zp[2]:132 [ div32u16u::quotient_hi#0 ] Allocated zp[2]:134 [ divr16u::return#3 ] Allocated zp[2]:136 [ div32u16u::quotient_lo#0 ] Allocated zp[4]:138 [ div32u16u::return#0 ] Allocated zp[1]:142 [ divr16u::$1 ] Allocated zp[1]:143 [ divr16u::$2 ] Allocated zp[2]:144 [ rem16u#1 ] Allocated zp[4]:146 [ div32u16u::return#2 ] Allocated zp[4]:150 [ sin16s_gen::step#0 ] Allocated zp[2]:154 [ sin16s::return#0 ] Allocated zp[2]:156 [ sin16s_gen::$2 ] Allocated zp[4]:158 [ sin16s::$4 ] Allocated zp[2]:162 [ sin16s::x1#0 ] Allocated zp[2]:164 [ mulu16_sel::return#0 ] Allocated zp[2]:166 [ sin16s::x2#0 ] Allocated zp[2]:168 [ mulu16_sel::return#1 ] Allocated zp[2]:170 [ sin16s::x3#0 ] Allocated zp[2]:172 [ mulu16_sel::return#14 ] Allocated zp[2]:174 [ sin16s::x3_6#0 ] Allocated zp[2]:176 [ sin16s::usinx#0 ] Allocated zp[2]:178 [ mulu16_sel::return#15 ] Allocated zp[2]:180 [ sin16s::x4#0 ] Allocated zp[2]:182 [ mulu16_sel::return#16 ] Allocated zp[2]:184 [ sin16s::x5#0 ] Allocated zp[2]:186 [ sin16s::x5_128#0 ] Allocated zp[2]:188 [ sin16s::usinx#1 ] INITIAL ASM Target platform is c64basic / MOS6502X // File Comments // Generates a 16-bit signed sinus // Upstart .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 // PI in u[4.28] format .const PI_u4f28 = $3243f6a9 // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 // PI in u[4.12] format .const PI_u4f12 = $3244 // PI/2 in u[4.12] format .const PI_HALF_u4f12 = $1922 .const SIZEOF_SIGNED_WORD = 2 .label print_line_cursor = $400 // Remainder after unsigned 16-bit division .label rem16u = $90 .label print_char_cursor = $a // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] __b1_from___bbegin: jmp __b1 // @1 __b1: // [2] call main // [4] phi from @1 to main [phi:@1->main] main_from___b1: jsr main // [3] phi from @1 to @end [phi:@1->@end] __bend_from___b1: jmp __bend // @end __bend: // main main: { .label wavelength = $78 .label sw = $43 .label st1 = 2 .label st2 = 4 .label i = 6 // [5] call sin16s_gen // [169] phi from main to sin16s_gen [phi:main->sin16s_gen] sin16s_gen_from_main: jsr sin16s_gen // [6] phi from main to main::@4 [phi:main->main::@4] __b4_from_main: jmp __b4 // main::@4 __b4: // [7] call sin16s_genb // [68] phi from main::@4 to sin16s_genb [phi:main::@4->sin16s_genb] sin16s_genb_from___b4: jsr sin16s_genb // [8] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: jmp __b5 // main::@5 __b5: // [9] call print_cls // [59] phi from main::@5 to print_cls [phi:main::@5->print_cls] print_cls_from___b5: jsr print_cls // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: // [10] phi (byte) main::i#2 = (byte) 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // [10] phi (byte*) print_char_cursor#53 = (const byte*) print_line_cursor#0 [phi:main::@5->main::@1#1] -- pbuz1=pbuc1 lda #print_line_cursor sta.z print_char_cursor+1 // [10] phi (signed word*) main::st2#2 = (const signed word*) main::sintab2 [phi:main::@5->main::@1#2] -- pwsz1=pwsc1 lda #sintab2 sta.z st2+1 // [10] phi (signed word*) main::st1#2 = (const signed word*) main::sintab1 [phi:main::@5->main::@1#3] -- pwsz1=pwsc1 lda #sintab1 sta.z st1+1 jmp __b1 // [10] phi from main::@7 to main::@1 [phi:main::@7->main::@1] __b1_from___b7: // [10] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@7->main::@1#0] -- register_copy // [10] phi (byte*) print_char_cursor#53 = (byte*) print_char_cursor#2 [phi:main::@7->main::@1#1] -- register_copy // [10] phi (signed word*) main::st2#2 = (signed word*) main::st2#1 [phi:main::@7->main::@1#2] -- register_copy // [10] phi (signed word*) main::st1#2 = (signed word*) main::st1#1 [phi:main::@7->main::@1#3] -- register_copy jmp __b1 // main::@1 __b1: // [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) -- vwsz1=_deref_pwsz2_minus__deref_pwsz3 ldy #0 sec lda (st1),y sbc (st2),y sta.z sw iny lda (st1),y sbc (st2),y sta.z sw+1 // [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 -- vwsz1_lt_0_then_la1 lda.z sw+1 bmi __b2_from___b1 // [13] phi from main::@1 to main::@3 [phi:main::@1->main::@3] __b3_from___b1: jmp __b3 // main::@3 __b3: // [14] call print_str // [25] phi from main::@3 to print_str [phi:main::@3->print_str] print_str_from___b3: // [25] phi (byte*) print_char_cursor#55 = (byte*) print_char_cursor#53 [phi:main::@3->print_str#0] -- register_copy // [25] phi (byte*) print_str::str#6 = (const byte*) main::str1 [phi:main::@3->print_str#1] -- pbuz1=pbuc1 lda #str1 sta.z print_str.str+1 jsr print_str // [15] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] __b2_from___b1: __b2_from___b3: // [15] phi (byte*) print_char_cursor#52 = (byte*) print_char_cursor#53 [phi:main::@1/main::@3->main::@2#0] -- register_copy jmp __b2 // main::@2 __b2: // [16] (signed word) print_sint::w#1 ← (signed word) main::sw#0 -- vwsz1=vwsz2 lda.z sw sta.z print_sint.w lda.z sw+1 sta.z print_sint.w+1 // [17] call print_sint jsr print_sint // [18] phi from main::@2 to main::@6 [phi:main::@2->main::@6] __b6_from___b2: jmp __b6 // main::@6 __b6: // [19] call print_str // [25] phi from main::@6 to print_str [phi:main::@6->print_str] print_str_from___b6: // [25] phi (byte*) print_char_cursor#55 = (byte*) print_char_cursor#13 [phi:main::@6->print_str#0] -- register_copy // [25] phi (byte*) print_str::str#6 = (const byte*) main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 lda #str sta.z print_str.str+1 jsr print_str jmp __b7 // main::@7 __b7: // [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z st1 sta.z st1 bcc !+ inc.z st1+1 !: // [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z st2 sta.z st2 bcc !+ inc.z st2+1 !: // [22] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [23] if((byte) main::i#1!=(byte) $78) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$78 cmp.z i bne __b1_from___b7 jmp __breturn // main::@return __breturn: // [24] return rts sintab1: .fill 2*$78, 0 sintab2: .fill 2*$78, 0 str: .text " " .byte 0 str1: .text " " .byte 0 } // print_str // Print a zero-terminated string // print_str(byte* zp(7) str) print_str: { .label str = 7 // [26] phi from print_str print_str::@3 to print_str::@1 [phi:print_str/print_str::@3->print_str::@1] __b1_from_print_str: __b1_from___b3: // [26] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#55 [phi:print_str/print_str::@3->print_str::@1#0] -- register_copy // [26] phi (byte*) print_str::str#3 = (byte*) print_str::str#6 [phi:print_str/print_str::@3->print_str::@1#1] -- register_copy jmp __b1 // print_str::@1 __b1: // [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 bne __b2 jmp __breturn // print_str::@return __breturn: // [28] return rts // print_str::@2 __b2: // [29] (byte) print_char::ch#0 ← *((byte*) print_str::str#3) -- vbuz1=_deref_pbuz2 ldy #0 lda (str),y sta.z print_char.ch // [30] call print_char // [32] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#2 [phi:print_str::@2->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 __b3: // [31] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: jmp __b1_from___b3 } // print_char // Print a single char // print_char(byte zp(9) ch) print_char: { .label ch = 9 // [33] *((byte*) print_char_cursor#35) ← (byte) print_char::ch#5 -- _deref_pbuz1=vbuz2 lda.z ch ldy #0 sta (print_char_cursor),y // [34] (byte*) print_char_cursor#13 ← ++ (byte*) print_char_cursor#35 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: jmp __breturn // print_char::@return __breturn: // [35] return rts } // print_sint // Print a signed int as HEX // print_sint(signed word zp($c) w) print_sint: { .label w = $c // [36] if((signed word) print_sint::w#1<(signed byte) 0) goto print_sint::@1 -- vwsz1_lt_0_then_la1 lda.z w+1 bmi __b1_from_print_sint // [37] phi from print_sint to print_sint::@3 [phi:print_sint->print_sint::@3] __b3_from_print_sint: jmp __b3 // print_sint::@3 __b3: // [38] call print_char // [32] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#52 [phi:print_sint::@3->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) ' ' [phi:print_sint::@3->print_char#1] -- vbuz1=vbuc1 lda #' ' sta.z print_char.ch jsr print_char // [39] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] __b2_from___b3: __b2_from___b4: // [39] phi (signed word) print_sint::w#4 = (signed word) print_sint::w#1 [phi:print_sint::@3/print_sint::@4->print_sint::@2#0] -- register_copy jmp __b2 // print_sint::@2 __b2: // [40] (word) print_uint::w#0 ← (word)(signed word) print_sint::w#4 -- vwuz1=vwuz2 lda.z w sta.z print_uint.w lda.z w+1 sta.z print_uint.w+1 // [41] call print_uint jsr print_uint jmp __breturn // print_sint::@return __breturn: // [42] return rts // [43] phi from print_sint to print_sint::@1 [phi:print_sint->print_sint::@1] __b1_from_print_sint: jmp __b1 // print_sint::@1 __b1: // [44] call print_char // [32] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#52 [phi:print_sint::@1->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) '-' [phi:print_sint::@1->print_char#1] -- vbuz1=vbuc1 lda #'-' sta.z print_char.ch jsr print_char jmp __b4 // print_sint::@4 __b4: // [45] (signed word) print_sint::w#0 ← - (signed word) print_sint::w#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z w sta.z w lda #0 sbc.z w+1 sta.z w+1 jmp __b2_from___b4 } // print_uint // Print a unsigned int as HEX // print_uint(word zp($45) w) print_uint: { .label w = $45 // [46] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 -- vbuz1=_hi_vwuz2 lda.z w+1 sta.z print_uchar.b // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [51] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 __b1: // [48] (byte) print_uchar::b#1 ← < (word) print_uint::w#0 -- vbuz1=_lo_vwuz2 lda.z w sta.z print_uchar.b // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [51] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return __breturn: // [50] return rts } // print_uchar // Print a char as HEX // print_uchar(byte zp($e) b) print_uchar: { .label __0 = $47 .label __2 = $48 .label b = $e // [52] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 -- vbuz1=vbuz2_ror_4 lda.z b lsr lsr lsr lsr sta.z __0 // [53] (byte) print_char::ch#3 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z __0 lda print_hextab,y sta.z print_char.ch // [54] call print_char // Table of hexadecimal digits // [32] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#13 [phi:print_uchar->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 __b1: // [55] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 lda #$f and.z b sta.z __2 // [56] (byte) print_char::ch#4 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z __2 lda print_hextab,y sta.z print_char.ch // [57] call print_char // [32] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#13 [phi:print_uchar::@1->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return __breturn: // [58] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // [60] call memset // [62] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: // [61] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .const c = ' ' .const num = $3e8 .label str = print_line_cursor .label end = str+num .label dst = $f // [63] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: // [63] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str sta.z dst+1 jmp __b1 // memset::@1 __b1: // [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 lda.z dst cmp #memset::@1] __b1_from___b2: // [63] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // sin16s_genb // Generate signed (large) word sinus table - on the full -$7fff - $7fff range // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin16s_genb(signed word* zp($17) sintab) sin16s_genb: { .label __3 = $53 .label step = $4d .label sintab = $17 // u[4.28] // Iterate over the table .label x = $13 .label i = $11 // [69] call div32u16u // [141] phi from sin16s_genb to div32u16u [phi:sin16s_genb->div32u16u] div32u16u_from_sin16s_genb: jsr div32u16u // [70] (dword) div32u16u::return#3 ← (dword) div32u16u::return#0 -- vduz1=vduz2 lda.z div32u16u.return sta.z div32u16u.return_2 lda.z div32u16u.return+1 sta.z div32u16u.return_2+1 lda.z div32u16u.return+2 sta.z div32u16u.return_2+2 lda.z div32u16u.return+3 sta.z div32u16u.return_2+3 jmp __b3 // sin16s_genb::@3 __b3: // [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 -- vduz1=vduz2 lda.z div32u16u.return_2 sta.z step lda.z div32u16u.return_2+1 sta.z step+1 lda.z div32u16u.return_2+2 sta.z step+2 lda.z div32u16u.return_2+3 sta.z step+3 // [72] phi from sin16s_genb::@3 to sin16s_genb::@1 [phi:sin16s_genb::@3->sin16s_genb::@1] __b1_from___b3: // [72] phi (signed word*) sin16s_genb::sintab#2 = (const signed word*) main::sintab2 [phi:sin16s_genb::@3->sin16s_genb::@1#0] -- pwsz1=pwsc1 lda #main.sintab2 sta.z sintab+1 // [72] phi (dword) sin16s_genb::x#2 = (dword) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vduc1 lda #<0 sta.z x lda #>0 sta.z x+1 lda #<0>>$10 sta.z x+2 lda #>0>>$10 sta.z x+3 // [72] phi (word) sin16s_genb::i#2 = (word) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 sta.z i+1 jmp __b1 // u[4.28] // sin16s_genb::@1 __b1: // [73] if((word) sin16s_genb::i#2<(const word) main::wavelength) goto sin16s_genb::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z i+1 cmp #>main.wavelength bcc __b2 bne !+ lda.z i cmp # (dword) sin16s_genb::x#2 -- vwuz1=_hi_vduz2 lda.z x+2 sta.z sin16sb.x lda.z x+3 sta.z sin16sb.x+1 // [76] call sin16sb jsr sin16sb // [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 -- vwsz1=vwsz2 lda.z sin16sb.return_1 sta.z sin16sb.return lda.z sin16sb.return_1+1 sta.z sin16sb.return+1 jmp __b4 // sin16s_genb::@4 __b4: // [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 -- vwsz1=vwsz2 lda.z sin16sb.return sta.z __3 lda.z sin16sb.return+1 sta.z __3+1 // [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 -- _deref_pwsz1=vwsz2 ldy #0 lda.z __3 sta (sintab),y iny lda.z __3+1 sta (sintab),y // [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z sintab sta.z sintab bcc !+ inc.z sintab+1 !: // [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 -- vduz1=vduz1_plus_vduz2 lda.z x clc adc.z step sta.z x lda.z x+1 adc.z step+1 sta.z x+1 lda.z x+2 adc.z step+2 sta.z x+2 lda.z x+3 adc.z step+3 sta.z x+3 // [82] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: // [72] phi from sin16s_genb::@4 to sin16s_genb::@1 [phi:sin16s_genb::@4->sin16s_genb::@1] __b1_from___b4: // [72] phi (signed word*) sin16s_genb::sintab#2 = (signed word*) sin16s_genb::sintab#0 [phi:sin16s_genb::@4->sin16s_genb::@1#0] -- register_copy // [72] phi (dword) sin16s_genb::x#2 = (dword) sin16s_genb::x#1 [phi:sin16s_genb::@4->sin16s_genb::@1#1] -- register_copy // [72] phi (word) sin16s_genb::i#2 = (word) sin16s_genb::i#1 [phi:sin16s_genb::@4->sin16s_genb::@1#2] -- register_copy jmp __b1 } // sin16sb // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff // sin16sb(word zp($1a) x) sin16sb: { .label x = $1a .label return = $51 .label x1 = $55 .label x2 = $59 .label x3 = $5d .label x3_6 = $61 .label usinx = $63 .label x4 = $67 .label x5 = $6b .label x5_128 = $6d .label usinx_1 = $6f .label return_1 = $1c .label sinx = $1c // Move x1 into the range 0-PI/2 using sinus mirror symmetries .label isUpper = $19 // [83] if((word) sin16sb::x#0<(const nomodify word) PI_u4f12) goto sin16sb::@1 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_u4f12 bcc __b1_from_sin16sb bne !+ lda.z x cmp #PI_u4f12 sta.z x+1 // [85] phi from sin16sb::@4 to sin16sb::@1 [phi:sin16sb::@4->sin16sb::@1] __b1_from___b4: // [85] phi (byte) sin16sb::isUpper#2 = (byte) 1 [phi:sin16sb::@4->sin16sb::@1#0] -- vbuz1=vbuc1 lda #1 sta.z isUpper // [85] phi (word) sin16sb::x#4 = (word) sin16sb::x#1 [phi:sin16sb::@4->sin16sb::@1#1] -- register_copy jmp __b1 // [85] phi from sin16sb to sin16sb::@1 [phi:sin16sb->sin16sb::@1] __b1_from_sin16sb: // [85] phi (byte) sin16sb::isUpper#2 = (byte) 0 [phi:sin16sb->sin16sb::@1#0] -- vbuz1=vbuc1 lda #0 sta.z isUpper // [85] phi (word) sin16sb::x#4 = (word) sin16sb::x#0 [phi:sin16sb->sin16sb::@1#1] -- register_copy jmp __b1 // sin16sb::@1 __b1: // [86] if((word) sin16sb::x#4<(const nomodify word) PI_HALF_u4f12) goto sin16sb::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_HALF_u4f12 bcc __b2_from___b1 bne !+ lda.z x cmp #PI_u4f12 sbc.z x+1 sta.z x+1 // [88] phi from sin16sb::@1 sin16sb::@5 to sin16sb::@2 [phi:sin16sb::@1/sin16sb::@5->sin16sb::@2] __b2_from___b1: __b2_from___b5: // [88] phi (word) sin16sb::x#6 = (word) sin16sb::x#4 [phi:sin16sb::@1/sin16sb::@5->sin16sb::@2#0] -- register_copy jmp __b2 // sin16sb::@2 __b2: // [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 -- vwuz1=vwuz2_rol_3 lda.z x asl sta.z x1 lda.z x+1 rol sta.z x1+1 asl.z x1 rol.z x1+1 asl.z x1 rol.z x1+1 // [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 // [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [92] call mulu16_sel // [122] phi from sin16sb::@2 to mulu16_sel [phi:sin16sb::@2->mulu16_sel] mulu16_sel_from___b2: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16sb::@2->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#5 [phi:sin16sb::@2->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#5 [phi:sin16sb::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return_8 lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return_8+1 jmp __b7 // sin16sb::@7 __b7: // [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 -- vwuz1=vwuz2 lda.z mulu16_sel.return_8 sta.z x2 lda.z mulu16_sel.return_8+1 sta.z x2+1 // [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 -- vwuz1=vwuz2 lda.z x2 sta.z mulu16_sel.v1 lda.z x2+1 sta.z mulu16_sel.v1+1 // [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [97] call mulu16_sel // [122] phi from sin16sb::@7 to mulu16_sel [phi:sin16sb::@7->mulu16_sel] mulu16_sel_from___b7: // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16sb::@7->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#6 [phi:sin16sb::@7->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#6 [phi:sin16sb::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return_9 lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return_9+1 jmp __b8 // sin16sb::@8 __b8: // [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 -- vwuz1=vwuz2 lda.z mulu16_sel.return_9 sta.z x3 lda.z mulu16_sel.return_9+1 sta.z x3+1 // [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 // [101] call mulu16_sel // [122] phi from sin16sb::@8 to mulu16_sel [phi:sin16sb::@8->mulu16_sel] mulu16_sel_from___b8: // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16sb::@8->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word)(number) $10000/(number) 6 [phi:sin16sb::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#7 [phi:sin16sb::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return_10 lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return_10+1 jmp __b9 // sin16sb::@9 __b9: // [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 -- vwuz1=vwuz2 lda.z mulu16_sel.return_10 sta.z x3_6 lda.z mulu16_sel.return_10+1 sta.z x3_6+1 // [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 sta.z usinx lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 // [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 // [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [107] call mulu16_sel // [122] phi from sin16sb::@9 to mulu16_sel [phi:sin16sb::@9->mulu16_sel] mulu16_sel_from___b9: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16sb::@9->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#8 [phi:sin16sb::@9->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#8 [phi:sin16sb::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return_2 lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return_2+1 jmp __b10 // sin16sb::@10 __b10: // [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 lda.z mulu16_sel.return_2 sta.z x4 lda.z mulu16_sel.return_2+1 sta.z x4+1 // [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 -- vwuz1=vwuz2 lda.z x4 sta.z mulu16_sel.v1 lda.z x4+1 sta.z mulu16_sel.v1+1 // [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [112] call mulu16_sel // [122] phi from sin16sb::@10 to mulu16_sel [phi:sin16sb::@10->mulu16_sel] mulu16_sel_from___b10: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16sb::@10->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#9 [phi:sin16sb::@10->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#9 [phi:sin16sb::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return_3 lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return_3+1 jmp __b11 // sin16sb::@11 __b11: // [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 lda.z mulu16_sel.return_3 sta.z x5 lda.z mulu16_sel.return_3+1 sta.z x5+1 // [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 lda.z x5+1 lsr sta.z x5_128+1 lda.z x5 ror sta.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 // [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 lda.z usinx clc adc.z x5_128 sta.z usinx_1 lda.z usinx+1 adc.z x5_128+1 sta.z usinx_1+1 // [117] if((byte) sin16sb::isUpper#2==(byte) 0) goto sin16sb::@12 -- vbuz1_eq_0_then_la1 lda.z isUpper cmp #0 beq __b12 jmp __b6 // sin16sb::@6 __b6: // [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z usinx_1 sta.z sinx lda #0 sbc.z usinx_1+1 sta.z sinx+1 // [119] phi from sin16sb::@12 sin16sb::@6 to sin16sb::@3 [phi:sin16sb::@12/sin16sb::@6->sin16sb::@3] __b3_from___b12: __b3_from___b6: // [119] phi (signed word) sin16sb::return#1 = (signed word) sin16sb::return#5 [phi:sin16sb::@12/sin16sb::@6->sin16sb::@3#0] -- register_copy jmp __b3 // sin16sb::@3 __b3: jmp __breturn // sin16sb::@return __breturn: // [120] return rts // sin16sb::@12 __b12: // [121] (signed word) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 -- vwsz1=vwsz2 lda.z usinx_1 sta.z return_1 lda.z usinx_1+1 sta.z return_1+1 jmp __b3_from___b12 } // mulu16_sel // Calculate val*val for two unsigned int values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip // mulu16_sel(word zp($1e) v1, word zp($20) v2, byte zp($22) select) mulu16_sel: { .label __0 = $77 .label __1 = $7b .label v1 = $1e .label v2 = $20 .label return = $a4 .label return_1 = $a8 .label return_2 = $65 .label return_3 = $69 .label return_4 = $ac .label return_5 = $b2 .label return_6 = $b6 .label select = $22 .label return_7 = $7f .label return_8 = $57 .label return_9 = $5b .label return_10 = $5f // [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 // [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 -- vwuz1=vwuz2 lda.z v2 sta.z mul16u.b lda.z v2+1 sta.z mul16u.b+1 // [125] call mul16u jsr mul16u // [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 lda.z mul16u.res sta.z mul16u.return lda.z mul16u.res+1 sta.z mul16u.return+1 lda.z mul16u.res+2 sta.z mul16u.return+2 lda.z mul16u.res+3 sta.z mul16u.return+3 jmp __b1 // mulu16_sel::@1 __b1: // [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 -- vduz1=vduz2 lda.z mul16u.return sta.z __0 lda.z mul16u.return+1 sta.z __0+1 lda.z mul16u.return+2 sta.z __0+2 lda.z mul16u.return+3 sta.z __0+3 // [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 -- vduz1=vduz2_rol_vbuz3 lda.z __0 sta.z __1 lda.z __0+1 sta.z __1+1 lda.z __0+2 sta.z __1+2 lda.z __0+3 sta.z __1+3 ldx.z select beq !e+ !: asl.z __1 rol.z __1+1 rol.z __1+2 rol.z __1+3 dex bne !- !e: // [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return_7 lda.z __1+3 sta.z return_7+1 jmp __breturn // mulu16_sel::@return __breturn: // [130] return rts } // mul16u // Perform binary multiplication of two unsigned 16-bit unsigned ints into a 32-bit unsigned long // mul16u(word zp($23) a, word zp($71) b) mul16u: { .label __1 = $81 .label mb = $29 .label a = $23 .label res = $25 .label b = $71 .label return = $73 // [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 sta.z mb+1 lda #0 sta.z mb+2 sta.z mb+3 // [132] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: // [132] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy // [132] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 lda #<0 sta.z res lda #>0 sta.z res+1 lda #<0>>$10 sta.z res+2 lda #>0>>$10 sta.z res+3 // [132] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: // [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 bne __b2 jmp __breturn // mul16u::@return __breturn: // [134] return rts // mul16u::@2 __b2: // [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 lda #1 and.z a sta.z __1 // [136] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 lda.z __1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: // [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb sta.z res lda.z res+1 adc.z mb+1 sta.z res+1 lda.z res+2 adc.z mb+2 sta.z res+2 lda.z res+3 adc.z mb+3 sta.z res+3 // [138] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: // [138] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: // [139] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a // [140] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 // [132] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: // [132] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy // [132] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy // [132] phi (word) mul16u::a#2 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // div32u16u // Divide unsigned 32-bit unsigned long dividend with a 16-bit unsigned int divisor // The 16-bit unsigned int remainder can be found in rem16u after the division div32u16u: { .label quotient_hi = $84 .label quotient_lo = $88 .label return = $8a .label return_1 = $92 .label return_2 = $49 // [142] call divr16u // [151] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: // [151] phi (word) divr16u::dividend#5 = >(const nomodify dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 // [151] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u // [143] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_1 lda.z divr16u.return+1 sta.z divr16u.return_1+1 jmp __b1 // div32u16u::@1 __b1: // [144] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return_1 sta.z quotient_hi lda.z divr16u.return_1+1 sta.z quotient_hi+1 // [145] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 lda.z rem16u sta.z divr16u.rem lda.z rem16u+1 sta.z divr16u.rem+1 // [146] call divr16u // [151] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: // [151] phi (word) divr16u::dividend#5 = <(const nomodify dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 // [151] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // [147] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 lda.z divr16u.return sta.z divr16u.return_2 lda.z divr16u.return+1 sta.z divr16u.return_2+1 jmp __b2 // div32u16u::@2 __b2: // [148] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 lda.z divr16u.return_2 sta.z quotient_lo lda.z divr16u.return_2+1 sta.z quotient_lo+1 // [149] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 sta.z return+3 lda.z quotient_lo sta.z return lda.z quotient_lo+1 sta.z return+1 jmp __breturn // div32u16u::@return __breturn: // [150] return rts } // divr16u // Performs division on two 16 bit unsigned ints and an initial remainder // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division // divr16u(word zp($2f) dividend, word zp($2d) rem) divr16u: { .label __1 = $8e .label __2 = $8f .label rem = $2d .label dividend = $2f .label quotient = $31 .label i = $33 .label return = $31 .label return_1 = $82 .label return_2 = $86 // [152] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: // [152] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // [152] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 // [152] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy // [152] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 // [152] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: // [152] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy // [152] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy // [152] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy // [152] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: // [153] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 // [154] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 lda.z dividend+1 sta.z __1 // [155] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 lda #$80 and.z __1 sta.z __2 // [156] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 lda.z __2 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: // [157] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem // [158] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: // [158] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: // [159] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 // [160] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 // [161] if((word) divr16u::rem#6<(const word) main::wavelength) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>main.wavelength bcc __b3_from___b2 bne !+ lda.z rem cmp #main.wavelength sta.z rem+1 // [164] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: // [164] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy // [164] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: // [165] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [166] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$10 cmp.z i bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: // [167] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 lda.z rem sta.z rem16u lda.z rem+1 sta.z rem16u+1 jmp __breturn // divr16u::@return __breturn: // [168] return rts } // sin16s_gen // Generate signed (large) unsigned int sinus table - on the full -$7fff - $7fff range // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin16s_gen(signed word* zp($3a) sintab) sin16s_gen: { .label __2 = $9c .label step = $96 .label sintab = $3a // u[4.28] // Iterate over the table .label x = $36 .label i = $34 // [170] call div32u16u // [141] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] div32u16u_from_sin16s_gen: jsr div32u16u // [171] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 lda.z div32u16u.return sta.z div32u16u.return_1 lda.z div32u16u.return+1 sta.z div32u16u.return_1+1 lda.z div32u16u.return+2 sta.z div32u16u.return_1+2 lda.z div32u16u.return+3 sta.z div32u16u.return_1+3 jmp __b3 // sin16s_gen::@3 __b3: // [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 -- vduz1=vduz2 lda.z div32u16u.return_1 sta.z step lda.z div32u16u.return_1+1 sta.z step+1 lda.z div32u16u.return_1+2 sta.z step+2 lda.z div32u16u.return_1+3 sta.z step+3 // [173] phi from sin16s_gen::@3 to sin16s_gen::@1 [phi:sin16s_gen::@3->sin16s_gen::@1] __b1_from___b3: // [173] phi (signed word*) sin16s_gen::sintab#2 = (const signed word*) main::sintab1 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 lda #main.sintab1 sta.z sintab+1 // [173] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 lda #<0 sta.z x lda #>0 sta.z x+1 lda #<0>>$10 sta.z x+2 lda #>0>>$10 sta.z x+3 // [173] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 sta.z i+1 jmp __b1 // u[4.28] // sin16s_gen::@1 __b1: // [174] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z i+1 cmp #>main.wavelength bcc __b2 bne !+ lda.z i cmp #sin16s_gen::@1] __b1_from___b4: // [173] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy // [173] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy // [173] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy jmp __b1 } // sin16s // Calculate signed int sinus sin(x) // x: unsigned long input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed int sin(x) s[0.15] - using the full range -$7fff - $7fff // sin16s(dword zp($3d) x) sin16s: { .label __4 = $9e .label x = $3d .label return = $9a .label x1 = $a2 .label x2 = $a6 .label x3 = $aa .label x3_6 = $ae .label usinx = $b0 .label x4 = $b4 .label x5 = $b8 .label x5_128 = $ba .label usinx_1 = $bc .label return_1 = $41 .label sinx = $41 // Move x1 into the range 0-PI/2 using sinus mirror symmetries .label isUpper = $3c // [184] if((dword) sin16s::x#0<(const nomodify dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s bne !+ lda.z x+2 cmp #>$10 bcc __b1_from_sin16s bne !+ lda.z x+1 cmp #>PI_u4f28 bcc __b1_from_sin16s bne !+ lda.z x cmp #PI_u4f28 sta.z x+1 lda.z x+2 sbc #>$10 sta.z x+2 lda.z x+3 sbc #>PI_u4f28>>$10 sta.z x+3 // [186] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: // [186] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 lda #1 sta.z isUpper // [186] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 // [186] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: // [186] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 lda #0 sta.z isUpper // [186] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: // [187] if((dword) sin16s::x#4<(const nomodify dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 bne !+ lda.z x+2 cmp #>$10 bcc __b2_from___b1 bne !+ lda.z x+1 cmp #>PI_HALF_u4f28 bcc __b2_from___b1 bne !+ lda.z x cmp #PI_u4f28 sbc.z x+1 sta.z x+1 lda #>$10 sbc.z x+2 sta.z x+2 lda #>PI_u4f28>>$10 sbc.z x+3 sta.z x+3 // [189] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: // [189] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: // [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 lda.z x+1 rol sta.z __4+1 lda.z x+2 rol sta.z __4+2 lda.z x+3 rol sta.z __4+3 asl.z __4 rol.z __4+1 rol.z __4+2 rol.z __4+3 asl.z __4 rol.z __4+1 rol.z __4+2 rol.z __4+3 // [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 // [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 // [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [194] call mulu16_sel // [122] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return+1 jmp __b7 // sin16s::@7 __b7: // [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 lda.z mulu16_sel.return sta.z x2 lda.z mulu16_sel.return+1 sta.z x2+1 // [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 lda.z x2 sta.z mulu16_sel.v1 lda.z x2+1 sta.z mulu16_sel.v1+1 // [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [199] call mulu16_sel // [122] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return_1 lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return_1+1 jmp __b8 // sin16s::@8 __b8: // [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z x3 lda.z mulu16_sel.return_1+1 sta.z x3+1 // [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 // [203] call mulu16_sel // [122] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 lda #1 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return_4 lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return_4+1 jmp __b9 // sin16s::@9 __b9: // [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 -- vwuz1=vwuz2 lda.z mulu16_sel.return_4 sta.z x3_6 lda.z mulu16_sel.return_4+1 sta.z x3_6+1 // [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 sta.z usinx lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 // [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 lda.z x3 sta.z mulu16_sel.v1 lda.z x3+1 sta.z mulu16_sel.v1+1 // [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [209] call mulu16_sel // [122] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return_5 lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return_5+1 jmp __b10 // sin16s::@10 __b10: // [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 -- vwuz1=vwuz2 lda.z mulu16_sel.return_5 sta.z x4 lda.z mulu16_sel.return_5+1 sta.z x4+1 // [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 lda.z x4 sta.z mulu16_sel.v1 lda.z x4+1 sta.z mulu16_sel.v1+1 // [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [214] call mulu16_sel // [122] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 lda #0 sta.z mulu16_sel.select // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_7 sta.z mulu16_sel.return_6 lda.z mulu16_sel.return_7+1 sta.z mulu16_sel.return_6+1 jmp __b11 // sin16s::@11 __b11: // [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 -- vwuz1=vwuz2 lda.z mulu16_sel.return_6 sta.z x5 lda.z mulu16_sel.return_6+1 sta.z x5+1 // [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 lda.z x5+1 lsr sta.z x5_128+1 lda.z x5 ror sta.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 // [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 lda.z usinx clc adc.z x5_128 sta.z usinx_1 lda.z usinx+1 adc.z x5_128+1 sta.z usinx_1+1 // [219] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 lda.z isUpper cmp #0 beq __b12 jmp __b6 // sin16s::@6 __b6: // [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 sec lda #0 sbc.z usinx_1 sta.z sinx lda #0 sbc.z usinx_1+1 sta.z sinx+1 // [221] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: // [221] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: // [222] return rts // sin16s::@12 __b12: // [223] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 lda.z usinx_1 sta.z return_1 lda.z usinx_1+1 sta.z return_1+1 jmp __b3_from___b12 } // File Data print_hextab: .text "0123456789abcdef" REGISTER UPLIFT POTENTIAL REGISTERS Statement [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) [ main::st1#2 main::st2#2 print_char_cursor#53 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#53 main::i#2 main::sw#0 ] { } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:6 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte y as potential for zp[1]:6 [ main::i#2 main::i#1 ] Statement [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 [ main::st1#2 main::st2#2 print_char_cursor#53 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#53 main::i#2 main::sw#0 ] { } ) always clobbers reg byte a Statement [16] (signed word) print_sint::w#1 ← (signed word) main::sw#0 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#52 print_sint::w#1 ] ( main:2 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#52 print_sint::w#1 ] { { print_sint::w#1 = main::sw#0 } } ) always clobbers reg byte a Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] { } ) always clobbers reg byte a Statement [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] { } ) always clobbers reg byte a Statement [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] { { print_char_cursor#53 = print_char_cursor#55 } } main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] { { print_char_cursor#13 = print_char_cursor#55 } } ) always clobbers reg byte a reg byte y Statement [29] (byte) print_char::ch#0 ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 print_char::ch#0 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 print_char::ch#0 ] { { print_char_cursor#53 = print_char_cursor#55 } { print_char::ch#0 = print_char::ch#5 } { print_char_cursor#2 = print_char_cursor#35 } } main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 print_char::ch#0 ] { { print_char_cursor#13 = print_char_cursor#55 } { print_char::ch#0 = print_char::ch#5 } { print_char_cursor#2 = print_char_cursor#35 } } ) always clobbers reg byte a reg byte y Statement [33] *((byte*) print_char_cursor#35) ← (byte) print_char::ch#5 [ print_char_cursor#35 ] ( main:2::print_str:14::print_char:30 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_str::str#3 print_char_cursor#35 ] { { print_char_cursor#53 = print_char_cursor#55 } { print_char::ch#0 = print_char::ch#5 } { print_char_cursor#2 = print_char_cursor#35 } } main:2::print_str:19::print_char:30 [ main::st1#2 main::st2#2 main::i#2 print_str::str#3 print_char_cursor#35 ] { { print_char_cursor#13 = print_char_cursor#55 } { print_char::ch#0 = print_char::ch#5 } { print_char_cursor#2 = print_char_cursor#35 } } main:2::print_sint:17::print_char:38 [ main::st1#2 main::st2#2 main::i#2 print_sint::w#1 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_char_cursor#35 = print_char_cursor#52 } } main:2::print_sint:17::print_char:44 [ main::st1#2 main::st2#2 main::i#2 print_sint::w#1 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_char_cursor#35 = print_char_cursor#52 } } main:2::print_sint:17::print_uint:41::print_uchar:47::print_char:54 [ main::st1#2 main::st2#2 main::i#2 print_uint::w#0 print_uchar::b#2 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#3 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:49::print_char:54 [ main::st1#2 main::st2#2 main::i#2 print_uchar::b#2 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char::ch#3 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:47::print_char:57 [ main::st1#2 main::st2#2 main::i#2 print_uint::w#0 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#4 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:49::print_char:57 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char::ch#4 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:14 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Statement [36] if((signed word) print_sint::w#1<(signed byte) 0) goto print_sint::@1 [ print_char_cursor#52 print_sint::w#1 ] ( main:2::print_sint:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#52 print_sint::w#1 ] { { print_sint::w#1 = main::sw#0 } } ) always clobbers reg byte a Statement [40] (word) print_uint::w#0 ← (word)(signed word) print_sint::w#4 [ print_char_cursor#13 print_uint::w#0 ] ( main:2::print_sint:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_uint::w#0 ] { { print_sint::w#1 = main::sw#0 } } ) always clobbers reg byte a Statement [45] (signed word) print_sint::w#0 ← - (signed word) print_sint::w#1 [ print_char_cursor#13 print_sint::w#0 ] ( main:2::print_sint:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_sint::w#0 ] { { print_sint::w#1 = main::sw#0 } } ) always clobbers reg byte a Statement [52] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 [ print_char_cursor#13 print_uchar::b#2 print_uchar::$0 ] ( main:2::print_sint:17::print_uint:41::print_uchar:47 [ main::st1#2 main::st2#2 main::i#2 print_uint::w#0 print_char_cursor#13 print_uchar::b#2 print_uchar::$0 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#3 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:49 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_uchar::b#2 print_uchar::$0 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char::ch#3 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:14 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Statement [55] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f [ print_char_cursor#13 print_uchar::$2 ] ( main:2::print_sint:17::print_uint:41::print_uchar:47 [ main::st1#2 main::st2#2 main::i#2 print_uint::w#0 print_char_cursor#13 print_uchar::$2 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#4 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:49 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_uchar::$2 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char::ch#4 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } ) always clobbers reg byte a Statement [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:9::memset:60 [ memset::dst#2 ] { } ) always clobbers reg byte a Statement [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:9::memset:60 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y Statement [70] (dword) div32u16u::return#3 ← (dword) div32u16u::return#0 [ div32u16u::return#3 ] ( main:2::sin16s_genb:7 [ div32u16u::return#3 ] { { div32u16u::return#0 = div32u16u::return#3 } } ) always clobbers reg byte a Statement [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 [ sin16s_genb::step#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 ] { } ) always clobbers reg byte a Statement [73] if((word) sin16s_genb::i#2<(const word) main::wavelength) goto sin16s_genb::@2 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] { } ) always clobbers reg byte a Statement [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::$3 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::$3 ] { } ) always clobbers reg byte a Statement [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] { } ) always clobbers reg byte a reg byte y Statement [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#0 ] { } ) always clobbers reg byte a Statement [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] { } ) always clobbers reg byte a Statement [83] if((word) sin16sb::x#0<(const nomodify word) PI_u4f12) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const nomodify word) PI_u4f12 [ sin16sb::x#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#1 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [86] if((word) sin16sb::x#4<(const nomodify word) PI_HALF_u4f12) goto sin16sb::@2 [ sin16sb::x#4 sin16sb::isUpper#2 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#4 sin16sb::isUpper#2 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:25 [ sin16sb::isUpper#2 ] Statement [87] (word) sin16sb::x#2 ← (const nomodify word) PI_u4f12 - (word) sin16sb::x#4 [ sin16sb::isUpper#2 sin16sb::x#2 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x#2 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 [ sin16sb::isUpper#2 sin16sb::x1#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } ) always clobbers reg byte a Statement [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } ) always clobbers reg byte a Statement [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } ) always clobbers reg byte a Statement [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } ) always clobbers reg byte a Statement [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } ) always clobbers reg byte a Statement [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } ) always clobbers reg byte a Statement [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } ) always clobbers reg byte a Statement [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } ) always clobbers reg byte a Statement [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } ) always clobbers reg byte a Statement [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } ) always clobbers reg byte a Statement [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } ) always clobbers reg byte a Statement [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 [ sin16sb::isUpper#2 sin16sb::usinx#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#1 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 [ sin16sb::sinx#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::sinx#1 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [121] (signed word) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 [ sin16sb::return#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#5 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 [ mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:34 [ mulu16_sel::select#10 ] Removing always clobbered register reg byte a as potential for zp[1]:60 [ sin16s::isUpper#2 ] Statement [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 [ mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#10 mul16u::return#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#10 mulu16_sel::$0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 [ mulu16_sel::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [143] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69 [ divr16u::return#2 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170 [ divr16u::return#2 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } ) always clobbers reg byte a Statement [144] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [145] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [147] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 divr16u::return#3 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 divr16u::return#3 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [148] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] { { div32u16u::return#0 = div32u16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] { { div32u16u::return#0 = div32u16u::return#2 } } ) always clobbers reg byte a Statement [149] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::return#0 ] { { div32u16u::return#0 = div32u16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::return#0 ] { { div32u16u::return#0 = div32u16u::return#2 } } ) always clobbers reg byte a Statement [157] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] Statement [161] if((word) divr16u::rem#6<(const word) main::wavelength) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [163] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [167] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::return#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::return#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [171] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:5 [ div32u16u::return#2 ] { { div32u16u::return#0 = div32u16u::return#2 } } ) always clobbers reg byte a Statement [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen::step#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 ] { } ) always clobbers reg byte a Statement [174] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] { } ) always clobbers reg byte a Statement [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] { } ) always clobbers reg byte a Statement [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] { } ) always clobbers reg byte a reg byte y Statement [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] { } ) always clobbers reg byte a Statement [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] { } ) always clobbers reg byte a Statement [184] if((dword) sin16s::x#0<(const nomodify dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const nomodify dword) PI_u4f28 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [187] if((dword) sin16s::x#4<(const nomodify dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [188] (dword) sin16s::x#2 ← (const nomodify dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::sinx#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [223] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#5 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) [ main::st1#2 main::st2#2 print_char_cursor#53 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#53 main::i#2 main::sw#0 ] { } ) always clobbers reg byte a reg byte y Statement [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 [ main::st1#2 main::st2#2 print_char_cursor#53 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#53 main::i#2 main::sw#0 ] { } ) always clobbers reg byte a Statement [16] (signed word) print_sint::w#1 ← (signed word) main::sw#0 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#52 print_sint::w#1 ] ( main:2 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#52 print_sint::w#1 ] { { print_sint::w#1 = main::sw#0 } } ) always clobbers reg byte a Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] { } ) always clobbers reg byte a Statement [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] { } ) always clobbers reg byte a Statement [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] { { print_char_cursor#53 = print_char_cursor#55 } } main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] { { print_char_cursor#13 = print_char_cursor#55 } } ) always clobbers reg byte a reg byte y Statement [29] (byte) print_char::ch#0 ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 print_char::ch#0 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 print_char::ch#0 ] { { print_char_cursor#53 = print_char_cursor#55 } { print_char::ch#0 = print_char::ch#5 } { print_char_cursor#2 = print_char_cursor#35 } } main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 print_char::ch#0 ] { { print_char_cursor#13 = print_char_cursor#55 } { print_char::ch#0 = print_char::ch#5 } { print_char_cursor#2 = print_char_cursor#35 } } ) always clobbers reg byte a reg byte y Statement [33] *((byte*) print_char_cursor#35) ← (byte) print_char::ch#5 [ print_char_cursor#35 ] ( main:2::print_str:14::print_char:30 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_str::str#3 print_char_cursor#35 ] { { print_char_cursor#53 = print_char_cursor#55 } { print_char::ch#0 = print_char::ch#5 } { print_char_cursor#2 = print_char_cursor#35 } } main:2::print_str:19::print_char:30 [ main::st1#2 main::st2#2 main::i#2 print_str::str#3 print_char_cursor#35 ] { { print_char_cursor#13 = print_char_cursor#55 } { print_char::ch#0 = print_char::ch#5 } { print_char_cursor#2 = print_char_cursor#35 } } main:2::print_sint:17::print_char:38 [ main::st1#2 main::st2#2 main::i#2 print_sint::w#1 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_char_cursor#35 = print_char_cursor#52 } } main:2::print_sint:17::print_char:44 [ main::st1#2 main::st2#2 main::i#2 print_sint::w#1 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_char_cursor#35 = print_char_cursor#52 } } main:2::print_sint:17::print_uint:41::print_uchar:47::print_char:54 [ main::st1#2 main::st2#2 main::i#2 print_uint::w#0 print_uchar::b#2 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#3 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:49::print_char:54 [ main::st1#2 main::st2#2 main::i#2 print_uchar::b#2 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char::ch#3 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:47::print_char:57 [ main::st1#2 main::st2#2 main::i#2 print_uint::w#0 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#4 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:49::print_char:57 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#35 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char::ch#4 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } ) always clobbers reg byte y Statement [36] if((signed word) print_sint::w#1<(signed byte) 0) goto print_sint::@1 [ print_char_cursor#52 print_sint::w#1 ] ( main:2::print_sint:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#52 print_sint::w#1 ] { { print_sint::w#1 = main::sw#0 } } ) always clobbers reg byte a Statement [40] (word) print_uint::w#0 ← (word)(signed word) print_sint::w#4 [ print_char_cursor#13 print_uint::w#0 ] ( main:2::print_sint:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_uint::w#0 ] { { print_sint::w#1 = main::sw#0 } } ) always clobbers reg byte a Statement [45] (signed word) print_sint::w#0 ← - (signed word) print_sint::w#1 [ print_char_cursor#13 print_sint::w#0 ] ( main:2::print_sint:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_sint::w#0 ] { { print_sint::w#1 = main::sw#0 } } ) always clobbers reg byte a Statement [52] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 [ print_char_cursor#13 print_uchar::b#2 print_uchar::$0 ] ( main:2::print_sint:17::print_uint:41::print_uchar:47 [ main::st1#2 main::st2#2 main::i#2 print_uint::w#0 print_char_cursor#13 print_uchar::b#2 print_uchar::$0 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#3 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:49 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_uchar::b#2 print_uchar::$0 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char::ch#3 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } ) always clobbers reg byte a Statement [55] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f [ print_char_cursor#13 print_uchar::$2 ] ( main:2::print_sint:17::print_uint:41::print_uchar:47 [ main::st1#2 main::st2#2 main::i#2 print_uint::w#0 print_char_cursor#13 print_uchar::$2 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#0 = print_uchar::b#2 } { print_char::ch#4 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } main:2::print_sint:17::print_uint:41::print_uchar:49 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#13 print_uchar::$2 ] { { print_sint::w#1 = main::sw#0 } { print_uchar::b#1 = print_uchar::b#2 } { print_char::ch#4 = print_char::ch#5 } { print_char_cursor#13 = print_char_cursor#35 } } ) always clobbers reg byte a Statement [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::print_cls:9::memset:60 [ memset::dst#2 ] { } ) always clobbers reg byte a Statement [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:9::memset:60 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y Statement [70] (dword) div32u16u::return#3 ← (dword) div32u16u::return#0 [ div32u16u::return#3 ] ( main:2::sin16s_genb:7 [ div32u16u::return#3 ] { { div32u16u::return#0 = div32u16u::return#3 } } ) always clobbers reg byte a Statement [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 [ sin16s_genb::step#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 ] { } ) always clobbers reg byte a Statement [73] if((word) sin16s_genb::i#2<(const word) main::wavelength) goto sin16s_genb::@2 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] { } ) always clobbers reg byte a Statement [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::$3 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::$3 ] { } ) always clobbers reg byte a Statement [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 ] { } ) always clobbers reg byte a reg byte y Statement [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#0 ] { } ) always clobbers reg byte a Statement [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] { } ) always clobbers reg byte a Statement [83] if((word) sin16sb::x#0<(const nomodify word) PI_u4f12) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const nomodify word) PI_u4f12 [ sin16sb::x#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#1 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [86] if((word) sin16sb::x#4<(const nomodify word) PI_HALF_u4f12) goto sin16sb::@2 [ sin16sb::x#4 sin16sb::isUpper#2 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::x#4 sin16sb::isUpper#2 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [87] (word) sin16sb::x#2 ← (const nomodify word) PI_u4f12 - (word) sin16sb::x#4 [ sin16sb::isUpper#2 sin16sb::x#2 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x#2 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 [ sin16sb::isUpper#2 sin16sb::x1#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } ) always clobbers reg byte a Statement [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } ) always clobbers reg byte a Statement [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#5 mulu16_sel::v2#5 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } ) always clobbers reg byte a Statement [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#18 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } ) always clobbers reg byte a Statement [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x2#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } ) always clobbers reg byte a Statement [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } ) always clobbers reg byte a Statement [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v1#6 mulu16_sel::v2#6 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } ) always clobbers reg byte a Statement [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#19 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } ) always clobbers reg byte a Statement [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } ) always clobbers reg byte a Statement [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v1#7 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } ) always clobbers reg byte a Statement [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#20 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } ) always clobbers reg byte a Statement [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::x3_6#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 sin16sb::usinx#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#8 mulu16_sel::v2#8 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#10 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 sin16sb::x4#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 [ sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v1#9 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v1#9 mulu16_sel::v2#9 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 [ sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#11 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 [ sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 sin16sb::x5_128#0 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 [ sin16sb::isUpper#2 sin16sb::usinx#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#1 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 [ sin16sb::sinx#1 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::sinx#1 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [121] (signed word) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 [ sin16sb::return#5 ] ( main:2::sin16s_genb:7::sin16sb:76 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::return#5 ] { { sin16sb::return#0 = sin16sb::return#1 } } ) always clobbers reg byte a Statement [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 [ mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#10 mulu16_sel::select#10 mul16u::a#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 [ mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::b#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#10 mul16u::return#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::return#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#10 mulu16_sel::$0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mulu16_sel::$0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 [ mulu16_sel::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#17 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 } { mulu16_sel::return#17 = mulu16_sel::return#20 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::return#17 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#17 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#1 mul16u::mb#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:92::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#5 mulu16_sel::v1#10 mulu16_sel::v1#5 sin16sb::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#18 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:97::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#6 sin16sb::x2#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#6 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#17 = mulu16_sel::return#19 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:101::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#7 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::return#17 = mulu16_sel::return#20 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:107::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::x1#0 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#8 sin16sb::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#8 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#10 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_genb:7::sin16sb:76::mulu16_sel:112::mul16u:125 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16sb::isUpper#2 sin16sb::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16sb::return#0 = sin16sb::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#9 sin16sb::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#9 sin16sb::x1#0 mul16u::b#0 } { mulu16_sel::return#11 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:194::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 mul16u::a#1 mul16u::b#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:199::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 mul16u::a#1 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:203::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::return#14 = mulu16_sel::return#17 } { mul16u::b#0 = mulu16_sel::v2#10 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:209::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } main:2::sin16s_gen:5::sin16s:177::mulu16_sel:214::mul16u:125 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#10 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 mul16u::a#1 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 mul16u::b#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } { mul16u::return#2 = mul16u::res#2 } } ) always clobbers reg byte a Statement [143] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69 [ divr16u::return#2 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170 [ divr16u::return#2 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } ) always clobbers reg byte a Statement [144] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [145] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [147] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 divr16u::return#3 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 divr16u::return#3 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [148] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] { { div32u16u::return#0 = div32u16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] { { div32u16u::return#0 = div32u16u::return#2 } } ) always clobbers reg byte a Statement [149] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_genb:7::div32u16u:69 [ div32u16u::return#0 ] { { div32u16u::return#0 = div32u16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170 [ div32u16u::return#0 ] { { div32u16u::return#0 = div32u16u::return#2 } } ) always clobbers reg byte a Statement [157] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [161] if((word) divr16u::rem#6<(const word) main::wavelength) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [163] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [167] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_genb:7::div32u16u:69::divr16u:142 [ divr16u::return#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:142 [ divr16u::return#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::return#0 = divr16u::return#2 } } main:2::sin16s_genb:7::div32u16u:69::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#3 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } main:2::sin16s_gen:5::div32u16u:170::divr16u:146 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] { { div32u16u::return#0 = div32u16u::return#2 } { divr16u::rem#10 = divr16u::rem#4 rem16u#1 } { divr16u::return#0 = divr16u::return#3 } } ) always clobbers reg byte a Statement [171] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:5 [ div32u16u::return#2 ] { { div32u16u::return#0 = div32u16u::return#2 } } ) always clobbers reg byte a Statement [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen::step#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 ] { } ) always clobbers reg byte a Statement [174] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] { } ) always clobbers reg byte a Statement [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::$2 ] { } ) always clobbers reg byte a Statement [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 ] { } ) always clobbers reg byte a reg byte y Statement [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#0 ] { } ) always clobbers reg byte a Statement [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] { } ) always clobbers reg byte a Statement [184] if((dword) sin16s::x#0<(const nomodify dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const nomodify dword) PI_u4f28 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [187] if((dword) sin16s::x#4<(const nomodify dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [188] (dword) sin16s::x#2 ← (const nomodify dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#0 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#0 mulu16_sel::v2#0 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v2#0 = mulu16_sel::v2#10 mulu16_sel::v1#10 mulu16_sel::v1#0 sin16s::x1#0 } { mulu16_sel::return#0 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#1 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#1 mulu16_sel::v2#1 sin16s::isUpper#2 sin16s::x1#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#1 = mulu16_sel::v1#10 sin16s::x2#0 } { mulu16_sel::v2#1 = mulu16_sel::v2#10 sin16s::x1#0 } { mulu16_sel::return#1 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#14 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#2 sin16s::x3#0 } { mulu16_sel::return#14 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#3 mulu16_sel::v2#3 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#15 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#3 sin16s::x3#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#3 sin16s::x1#0 } { mulu16_sel::return#15 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#4 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 mulu16_sel::v1#4 mulu16_sel::v2#4 sin16s::isUpper#2 sin16s::usinx#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#16 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } { mulu16_sel::v1#10 = mulu16_sel::v1#4 sin16s::x4#0 } { mulu16_sel::v2#10 = mulu16_sel::v2#4 sin16s::x1#0 } { mulu16_sel::return#16 = mulu16_sel::return#17 } } ) always clobbers reg byte a Statement [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::sinx#1 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Statement [223] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:177 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::return#5 ] { { sin16s::x#0 = sin16s_gen::x#2 } { sin16s::return#0 = sin16s::return#1 } } ) always clobbers reg byte a Potential registers zp[2]:2 [ main::st1#2 main::st1#1 ] : zp[2]:2 , Potential registers zp[2]:4 [ main::st2#2 main::st2#1 ] : zp[2]:4 , Potential registers zp[1]:6 [ main::i#2 main::i#1 ] : zp[1]:6 , reg byte x , Potential registers zp[2]:7 [ print_str::str#3 print_str::str#6 print_str::str#0 ] : zp[2]:7 , Potential registers zp[1]:9 [ print_char::ch#5 print_char::ch#0 print_char::ch#3 print_char::ch#4 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:10 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#52 print_char_cursor#53 print_char_cursor#2 print_char_cursor#13 ] : zp[2]:10 , Potential registers zp[2]:12 [ print_sint::w#4 print_sint::w#0 print_sint::w#1 ] : zp[2]:12 , Potential registers zp[1]:14 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] : zp[1]:14 , reg byte x , Potential registers zp[2]:15 [ memset::dst#2 memset::dst#1 ] : zp[2]:15 , Potential registers zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] : zp[2]:17 , Potential registers zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] : zp[4]:19 , Potential registers zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] : zp[2]:23 , Potential registers zp[1]:25 [ sin16sb::isUpper#2 ] : zp[1]:25 , reg byte x , reg byte y , Potential registers zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] : zp[2]:26 , Potential registers zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] : zp[2]:28 , Potential registers zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 ] : zp[2]:30 , Potential registers zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 ] : zp[2]:32 , Potential registers zp[1]:34 [ mulu16_sel::select#10 ] : zp[1]:34 , reg byte x , reg byte y , Potential registers zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] : zp[2]:35 , Potential registers zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:37 , Potential registers zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:41 , Potential registers zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:45 , Potential registers zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:47 , Potential registers zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:49 , Potential registers zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:51 , reg byte x , reg byte y , Potential registers zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] : zp[2]:52 , Potential registers zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] : zp[4]:54 , Potential registers zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] : zp[2]:58 , Potential registers zp[1]:60 [ sin16s::isUpper#2 ] : zp[1]:60 , reg byte x , reg byte y , Potential registers zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp[4]:61 , Potential registers zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp[2]:65 , Potential registers zp[2]:67 [ main::sw#0 ] : zp[2]:67 , Potential registers zp[2]:69 [ print_uint::w#0 ] : zp[2]:69 , Potential registers zp[1]:71 [ print_uchar::$0 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:72 [ print_uchar::$2 ] : zp[1]:72 , reg byte a , reg byte x , reg byte y , Potential registers zp[4]:73 [ div32u16u::return#3 ] : zp[4]:73 , Potential registers zp[4]:77 [ sin16s_genb::step#0 ] : zp[4]:77 , Potential registers zp[2]:81 [ sin16sb::return#0 ] : zp[2]:81 , Potential registers zp[2]:83 [ sin16s_genb::$3 ] : zp[2]:83 , Potential registers zp[2]:85 [ sin16sb::x1#0 ] : zp[2]:85 , Potential registers zp[2]:87 [ mulu16_sel::return#18 ] : zp[2]:87 , Potential registers zp[2]:89 [ sin16sb::x2#0 ] : zp[2]:89 , Potential registers zp[2]:91 [ mulu16_sel::return#19 ] : zp[2]:91 , Potential registers zp[2]:93 [ sin16sb::x3#0 ] : zp[2]:93 , Potential registers zp[2]:95 [ mulu16_sel::return#20 ] : zp[2]:95 , Potential registers zp[2]:97 [ sin16sb::x3_6#0 ] : zp[2]:97 , Potential registers zp[2]:99 [ sin16sb::usinx#0 ] : zp[2]:99 , Potential registers zp[2]:101 [ mulu16_sel::return#10 ] : zp[2]:101 , Potential registers zp[2]:103 [ sin16sb::x4#0 ] : zp[2]:103 , Potential registers zp[2]:105 [ mulu16_sel::return#11 ] : zp[2]:105 , Potential registers zp[2]:107 [ sin16sb::x5#0 ] : zp[2]:107 , Potential registers zp[2]:109 [ sin16sb::x5_128#0 ] : zp[2]:109 , Potential registers zp[2]:111 [ sin16sb::usinx#1 ] : zp[2]:111 , Potential registers zp[2]:113 [ mul16u::b#0 ] : zp[2]:113 , Potential registers zp[4]:115 [ mul16u::return#2 ] : zp[4]:115 , Potential registers zp[4]:119 [ mulu16_sel::$0 ] : zp[4]:119 , Potential registers zp[4]:123 [ mulu16_sel::$1 ] : zp[4]:123 , Potential registers zp[2]:127 [ mulu16_sel::return#17 ] : zp[2]:127 , Potential registers zp[1]:129 [ mul16u::$1 ] : zp[1]:129 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:130 [ divr16u::return#2 ] : zp[2]:130 , Potential registers zp[2]:132 [ div32u16u::quotient_hi#0 ] : zp[2]:132 , Potential registers zp[2]:134 [ divr16u::return#3 ] : zp[2]:134 , Potential registers zp[2]:136 [ div32u16u::quotient_lo#0 ] : zp[2]:136 , Potential registers zp[4]:138 [ div32u16u::return#0 ] : zp[4]:138 , Potential registers zp[1]:142 [ divr16u::$1 ] : zp[1]:142 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:143 [ divr16u::$2 ] : zp[1]:143 , reg byte a , reg byte x , reg byte y , Potential registers zp[2]:144 [ rem16u#1 ] : zp[2]:144 , Potential registers zp[4]:146 [ div32u16u::return#2 ] : zp[4]:146 , Potential registers zp[4]:150 [ sin16s_gen::step#0 ] : zp[4]:150 , Potential registers zp[2]:154 [ sin16s::return#0 ] : zp[2]:154 , Potential registers zp[2]:156 [ sin16s_gen::$2 ] : zp[2]:156 , Potential registers zp[4]:158 [ sin16s::$4 ] : zp[4]:158 , Potential registers zp[2]:162 [ sin16s::x1#0 ] : zp[2]:162 , Potential registers zp[2]:164 [ mulu16_sel::return#0 ] : zp[2]:164 , Potential registers zp[2]:166 [ sin16s::x2#0 ] : zp[2]:166 , Potential registers zp[2]:168 [ mulu16_sel::return#1 ] : zp[2]:168 , Potential registers zp[2]:170 [ sin16s::x3#0 ] : zp[2]:170 , Potential registers zp[2]:172 [ mulu16_sel::return#14 ] : zp[2]:172 , Potential registers zp[2]:174 [ sin16s::x3_6#0 ] : zp[2]:174 , Potential registers zp[2]:176 [ sin16s::usinx#0 ] : zp[2]:176 , Potential registers zp[2]:178 [ mulu16_sel::return#15 ] : zp[2]:178 , Potential registers zp[2]:180 [ sin16s::x4#0 ] : zp[2]:180 , Potential registers zp[2]:182 [ mulu16_sel::return#16 ] : zp[2]:182 , Potential registers zp[2]:184 [ sin16s::x5#0 ] : zp[2]:184 , Potential registers zp[2]:186 [ sin16s::x5_128#0 ] : zp[2]:186 , Potential registers zp[2]:188 [ sin16s::usinx#1 ] : zp[2]:188 , REGISTER UPLIFT SCOPES Uplift Scope [mul16u] 350,016,670.33: zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 245,000,004.57: zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 200,000,002: zp[1]:129 [ mul16u::$1 ] 167,200,002.5: zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] 200,002: zp[4]:115 [ mul16u::return#2 ] 100,001: zp[2]:113 [ mul16u::b#0 ] Uplift Scope [print_char] 1,900,010: zp[1]:9 [ print_char::ch#5 print_char::ch#0 print_char::ch#3 print_char::ch#4 ] Uplift Scope [divr16u] 901,347.42: zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 318,146.32: zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 200,002: zp[1]:142 [ divr16u::$1 ] 200,002: zp[1]:143 [ divr16u::$2 ] 165,386.27: zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] 79,287.54: zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 2,002: zp[2]:130 [ divr16u::return#2 ] 2,002: zp[2]:134 [ divr16u::return#3 ] Uplift Scope [] 1,222,847.59: zp[2]:10 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#52 print_char_cursor#53 print_char_cursor#2 print_char_cursor#13 ] 2,200.4: zp[2]:144 [ rem16u#1 ] Uplift Scope [mulu16_sel] 320,023: zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 ] 250,020.5: zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 ] 200,002: zp[4]:119 [ mulu16_sel::$0 ] 200,002: zp[4]:123 [ mulu16_sel::$1 ] 20,002: zp[2]:87 [ mulu16_sel::return#18 ] 20,002: zp[2]:91 [ mulu16_sel::return#19 ] 20,002: zp[2]:95 [ mulu16_sel::return#20 ] 20,002: zp[2]:101 [ mulu16_sel::return#10 ] 20,002: zp[2]:105 [ mulu16_sel::return#11 ] 20,002: zp[2]:164 [ mulu16_sel::return#0 ] 20,002: zp[2]:168 [ mulu16_sel::return#1 ] 20,002: zp[2]:172 [ mulu16_sel::return#14 ] 20,002: zp[2]:178 [ mulu16_sel::return#15 ] 20,002: zp[2]:182 [ mulu16_sel::return#16 ] 16,667.58: zp[2]:127 [ mulu16_sel::return#17 ] 16,666.83: zp[1]:34 [ mulu16_sel::select#10 ] Uplift Scope [print_uchar] 200,002: zp[1]:71 [ print_uchar::$0 ] 200,002: zp[1]:72 [ print_uchar::$2 ] 95,005: zp[1]:14 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Uplift Scope [print_str] 301,254.25: zp[2]:7 [ print_str::str#3 print_str::str#6 print_str::str#0 ] Uplift Scope [sin16s] 110,511.5: zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 47,005: zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 20,002: zp[4]:158 [ sin16s::$4 ] 20,002: zp[2]:166 [ sin16s::x2#0 ] 20,002: zp[2]:174 [ sin16s::x3_6#0 ] 20,002: zp[2]:180 [ sin16s::x4#0 ] 20,002: zp[2]:184 [ sin16s::x5#0 ] 20,002: zp[2]:186 [ sin16s::x5_128#0 ] 5,000.5: zp[2]:170 [ sin16s::x3#0 ] 5,000.5: zp[2]:188 [ sin16s::usinx#1 ] 3,182.14: zp[2]:162 [ sin16s::x1#0 ] 2,002: zp[2]:154 [ sin16s::return#0 ] 1,666.83: zp[2]:176 [ sin16s::usinx#0 ] 303.06: zp[1]:60 [ sin16s::isUpper#2 ] Uplift Scope [sin16sb] 110,511.5: zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] 47,005: zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] 20,002: zp[2]:89 [ sin16sb::x2#0 ] 20,002: zp[2]:97 [ sin16sb::x3_6#0 ] 20,002: zp[2]:103 [ sin16sb::x4#0 ] 20,002: zp[2]:107 [ sin16sb::x5#0 ] 20,002: zp[2]:109 [ sin16sb::x5_128#0 ] 5,000.5: zp[2]:93 [ sin16sb::x3#0 ] 5,000.5: zp[2]:111 [ sin16sb::usinx#1 ] 3,182.14: zp[2]:85 [ sin16sb::x1#0 ] 2,002: zp[2]:81 [ sin16sb::return#0 ] 1,666.83: zp[2]:99 [ sin16sb::usinx#0 ] 312.53: zp[1]:25 [ sin16sb::isUpper#2 ] Uplift Scope [memset] 33,336.67: zp[2]:15 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_uint] 7,001: zp[2]:69 [ print_uint::w#0 ] Uplift Scope [sin16s_gen] 2,335.67: zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 2,002: zp[2]:156 [ sin16s_gen::$2 ] 1,376.38: zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 1,096.33: zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 100.18: zp[4]:150 [ sin16s_gen::step#0 ] Uplift Scope [sin16s_genb] 2,335.67: zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] 2,002: zp[2]:83 [ sin16s_genb::$3 ] 1,376.38: zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] 1,096.33: zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] 100.18: zp[4]:77 [ sin16s_genb::step#0 ] Uplift Scope [print_sint] 4,521.33: zp[2]:12 [ print_sint::w#4 print_sint::w#0 print_sint::w#1 ] Uplift Scope [div32u16u] 2,002: zp[2]:136 [ div32u16u::quotient_lo#0 ] 400.4: zp[2]:132 [ div32u16u::quotient_hi#0 ] 300.75: zp[4]:138 [ div32u16u::return#0 ] 202: zp[4]:73 [ div32u16u::return#3 ] 202: zp[4]:146 [ div32u16u::return#2 ] Uplift Scope [main] 168.33: zp[1]:6 [ main::i#2 main::i#1 ] 94.88: zp[2]:4 [ main::st2#2 main::st2#1 ] 80.8: zp[2]:2 [ main::st1#2 main::st1#1 ] 60.6: zp[2]:67 [ main::sw#0 ] Uplift Scope [RADIX] Uplift Scope [print_cls] Uplifting [mul16u] best 26743 combination zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp[4]:115 [ mul16u::return#2 ] zp[2]:113 [ mul16u::b#0 ] Uplifting [print_char] best 26428 combination reg byte a [ print_char::ch#5 print_char::ch#0 print_char::ch#3 print_char::ch#4 ] Uplifting [divr16u] best 26218 combination zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:130 [ divr16u::return#2 ] zp[2]:134 [ divr16u::return#3 ] Uplifting [] best 26218 combination zp[2]:10 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#52 print_char_cursor#53 print_char_cursor#2 print_char_cursor#13 ] zp[2]:144 [ rem16u#1 ] Uplifting [mulu16_sel] best 26187 combination zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 ] zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 ] zp[4]:119 [ mulu16_sel::$0 ] zp[4]:123 [ mulu16_sel::$1 ] zp[2]:87 [ mulu16_sel::return#18 ] zp[2]:91 [ mulu16_sel::return#19 ] zp[2]:95 [ mulu16_sel::return#20 ] zp[2]:101 [ mulu16_sel::return#10 ] zp[2]:105 [ mulu16_sel::return#11 ] zp[2]:164 [ mulu16_sel::return#0 ] zp[2]:168 [ mulu16_sel::return#1 ] zp[2]:172 [ mulu16_sel::return#14 ] zp[2]:178 [ mulu16_sel::return#15 ] zp[2]:182 [ mulu16_sel::return#16 ] zp[2]:127 [ mulu16_sel::return#17 ] reg byte x [ mulu16_sel::select#10 ] Uplifting [print_uchar] best 26169 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Uplifting [print_str] best 26169 combination zp[2]:7 [ print_str::str#3 print_str::str#6 print_str::str#0 ] Uplifting [sin16s] best 26160 combination zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:158 [ sin16s::$4 ] zp[2]:166 [ sin16s::x2#0 ] zp[2]:174 [ sin16s::x3_6#0 ] zp[2]:180 [ sin16s::x4#0 ] zp[2]:184 [ sin16s::x5#0 ] zp[2]:186 [ sin16s::x5_128#0 ] zp[2]:170 [ sin16s::x3#0 ] zp[2]:188 [ sin16s::usinx#1 ] zp[2]:162 [ sin16s::x1#0 ] zp[2]:154 [ sin16s::return#0 ] zp[2]:176 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] Uplifting [sin16sb] best 26151 combination zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] zp[2]:89 [ sin16sb::x2#0 ] zp[2]:97 [ sin16sb::x3_6#0 ] zp[2]:103 [ sin16sb::x4#0 ] zp[2]:107 [ sin16sb::x5#0 ] zp[2]:109 [ sin16sb::x5_128#0 ] zp[2]:93 [ sin16sb::x3#0 ] zp[2]:111 [ sin16sb::usinx#1 ] zp[2]:85 [ sin16sb::x1#0 ] zp[2]:81 [ sin16sb::return#0 ] zp[2]:99 [ sin16sb::usinx#0 ] reg byte y [ sin16sb::isUpper#2 ] Uplifting [memset] best 26151 combination zp[2]:15 [ memset::dst#2 memset::dst#1 ] Uplifting [print_uint] best 26151 combination zp[2]:69 [ print_uint::w#0 ] Uplifting [sin16s_gen] best 26151 combination zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp[2]:156 [ sin16s_gen::$2 ] zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp[4]:150 [ sin16s_gen::step#0 ] Uplifting [sin16s_genb] best 26151 combination zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] zp[2]:83 [ sin16s_genb::$3 ] zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] zp[4]:77 [ sin16s_genb::step#0 ] Uplifting [print_sint] best 26151 combination zp[2]:12 [ print_sint::w#4 print_sint::w#0 print_sint::w#1 ] Uplifting [div32u16u] best 26151 combination zp[2]:136 [ div32u16u::quotient_lo#0 ] zp[2]:132 [ div32u16u::quotient_hi#0 ] zp[4]:138 [ div32u16u::return#0 ] zp[4]:73 [ div32u16u::return#3 ] zp[4]:146 [ div32u16u::return#2 ] Uplifting [main] best 26151 combination zp[1]:6 [ main::i#2 main::i#1 ] zp[2]:4 [ main::st2#2 main::st2#1 ] zp[2]:2 [ main::st1#2 main::st1#1 ] zp[2]:67 [ main::sw#0 ] Uplifting [RADIX] best 26151 combination Uplifting [print_cls] best 26151 combination Attempting to uplift remaining variables inzp[1]:6 [ main::i#2 main::i#1 ] Uplifting [main] best 26151 combination zp[1]:6 [ main::i#2 main::i#1 ] Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 ] ] with [ zp[2]:111 [ sin16sb::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 ] ] with [ zp[2]:93 [ sin16sb::x3#0 ] ] - score: 2 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 ] ] with [ zp[2]:170 [ sin16s::x3#0 ] ] - score: 2 Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:144 [ rem16u#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:188 [ sin16s::usinx#1 ] ] - score: 2 Coalescing zero page register [ zp[2]:12 [ print_sint::w#4 print_sint::w#0 print_sint::w#1 ] ] with [ zp[2]:67 [ main::sw#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:12 [ print_sint::w#4 print_sint::w#0 print_sint::w#1 main::sw#0 ] ] with [ zp[2]:69 [ print_uint::w#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 ] ] with [ zp[2]:85 [ sin16sb::x1#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 ] ] with [ zp[2]:81 [ sin16sb::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 ] ] with [ zp[2]:89 [ sin16sb::x2#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 ] ] with [ zp[2]:103 [ sin16sb::x4#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 ] ] with [ zp[2]:166 [ sin16s::x2#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 ] ] with [ zp[2]:180 [ sin16s::x4#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 ] ] with [ zp[2]:113 [ mul16u::b#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:115 [ mul16u::return#2 ] ] - score: 1 Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:130 [ divr16u::return#2 ] ] - score: 1 Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:134 [ divr16u::return#3 ] ] - score: 1 Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:154 [ sin16s::return#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:73 [ div32u16u::return#3 ] ] with [ zp[4]:77 [ sin16s_genb::step#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:73 [ div32u16u::return#3 sin16s_genb::step#0 ] ] with [ zp[4]:138 [ div32u16u::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 ] ] with [ zp[2]:127 [ mulu16_sel::return#17 ] ] - score: 1 Coalescing zero page register [ zp[2]:95 [ mulu16_sel::return#20 ] ] with [ zp[2]:97 [ sin16sb::x3_6#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:105 [ mulu16_sel::return#11 ] ] with [ zp[2]:107 [ sin16sb::x5#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:119 [ mulu16_sel::$0 ] ] with [ zp[4]:123 [ mulu16_sel::$1 ] ] - score: 1 Coalescing zero page register [ zp[4]:146 [ div32u16u::return#2 ] ] with [ zp[4]:150 [ sin16s_gen::step#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:172 [ mulu16_sel::return#14 ] ] with [ zp[2]:174 [ sin16s::x3_6#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:182 [ mulu16_sel::return#16 ] ] with [ zp[2]:184 [ sin16s::x5#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 ] ] with [ zp[2]:83 [ sin16s_genb::$3 ] ] - score: 1 Coalescing zero page register [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 ] ] with [ zp[2]:99 [ sin16sb::usinx#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp[2]:91 [ mulu16_sel::return#19 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 ] ] with [ zp[2]:101 [ mulu16_sel::return#10 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 ] ] with [ zp[2]:164 [ mulu16_sel::return#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 ] ] with [ zp[2]:168 [ mulu16_sel::return#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 ] ] with [ zp[2]:178 [ mulu16_sel::return#15 ] ] - score: 1 Coalescing zero page register [ zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 ] ] with [ zp[4]:119 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1 Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:136 [ div32u16u::quotient_lo#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:156 [ sin16s_gen::$2 ] ] - score: 1 Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 ] ] with [ zp[2]:176 [ sin16s::usinx#0 ] ] - score: 1 Coalescing zero page register [ zp[4]:73 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 ] ] with [ zp[4]:146 [ div32u16u::return#2 sin16s_gen::step#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 ] ] with [ zp[2]:95 [ mulu16_sel::return#20 sin16sb::x3_6#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 ] ] with [ zp[2]:105 [ mulu16_sel::return#11 sin16sb::x5#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 ] ] with [ zp[2]:172 [ mulu16_sel::return#14 sin16s::x3_6#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 ] ] with [ zp[2]:182 [ mulu16_sel::return#16 sin16s::x5#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 ] ] with [ zp[2]:109 [ sin16sb::x5_128#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 ] ] with [ zp[2]:186 [ sin16s::x5_128#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:15 [ memset::dst#2 memset::dst#1 ] ] with [ zp[2]:7 [ print_str::str#3 print_str::str#6 print_str::str#0 ] ] Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:26 [ sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 ] ] Coalescing zero page register [ zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:30 [ mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] ] Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:32 [ mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 mul16u::b#0 ] ] Coalescing zero page register [ zp[2]:52 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ] with [ zp[2]:17 [ sin16s_genb::i#2 sin16s_genb::i#1 ] ] Coalescing zero page register [ zp[4]:54 [ sin16s_gen::x#2 sin16s_gen::x#1 ] ] with [ zp[4]:19 [ sin16s_genb::x#2 sin16s_genb::x#1 ] ] Coalescing zero page register [ zp[2]:58 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp[2]:23 [ sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] ] Coalescing zero page register [ zp[4]:61 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:37 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] Coalescing zero page register [ zp[2]:65 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] with [ zp[2]:28 [ sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 ] ] Coalescing zero page register [ zp[2]:87 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 ] ] with [ zp[2]:35 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ] Coalescing zero page register [ zp[4]:158 [ sin16s::$4 ] ] with [ zp[4]:41 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ] Coalescing zero page register [ zp[2]:162 [ sin16s::x1#0 ] ] with [ zp[2]:132 [ div32u16u::quotient_hi#0 ] ] Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 ] ] with [ zp[2]:15 [ memset::dst#2 memset::dst#1 print_str::str#3 print_str::str#6 print_str::str#0 ] ] Allocated (was zp[2]:10) zp[2]:7 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#52 print_char_cursor#53 print_char_cursor#2 print_char_cursor#13 ] Allocated (was zp[2]:12) zp[2]:9 [ print_sint::w#4 print_sint::w#0 print_sint::w#1 main::sw#0 print_uint::w#0 ] Allocated (was zp[2]:45) zp[2]:11 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 memset::dst#2 memset::dst#1 print_str::str#3 print_str::str#6 print_str::str#0 ] Allocated (was zp[2]:47) zp[2]:13 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] Allocated (was zp[2]:49) zp[2]:15 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 mul16u::b#0 ] Allocated (was zp[2]:52) zp[2]:17 [ sin16s_gen::i#2 sin16s_gen::i#1 sin16s_genb::i#2 sin16s_genb::i#1 ] Allocated (was zp[4]:54) zp[4]:19 [ sin16s_gen::x#2 sin16s_gen::x#1 sin16s_genb::x#2 sin16s_genb::x#1 ] Allocated (was zp[2]:58) zp[2]:23 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] Allocated (was zp[4]:61) zp[4]:25 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] Allocated (was zp[2]:65) zp[2]:29 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 ] Allocated (was zp[4]:73) zp[4]:31 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 div32u16u::return#2 sin16s_gen::step#0 ] Allocated (was zp[2]:87) zp[2]:35 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] Allocated (was zp[4]:158) zp[4]:37 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] Allocated (was zp[2]:162) zp[2]:41 [ sin16s::x1#0 div32u16u::quotient_hi#0 ] ASSEMBLER BEFORE OPTIMIZATION // File Comments // Generates a 16-bit signed sinus // Upstart .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 // PI in u[4.28] format .const PI_u4f28 = $3243f6a9 // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 // PI in u[4.12] format .const PI_u4f12 = $3244 // PI/2 in u[4.12] format .const PI_HALF_u4f12 = $1922 .const SIZEOF_SIGNED_WORD = 2 .label print_line_cursor = $400 // Remainder after unsigned 16-bit division .label rem16u = $b .label print_char_cursor = 7 // @begin __bbegin: // [1] phi from @begin to @1 [phi:@begin->@1] __b1_from___bbegin: jmp __b1 // @1 __b1: // [2] call main // [4] phi from @1 to main [phi:@1->main] main_from___b1: jsr main // [3] phi from @1 to @end [phi:@1->@end] __bend_from___b1: jmp __bend // @end __bend: // main main: { .label wavelength = $78 .label sw = 9 .label st1 = 2 .label st2 = 4 .label i = 6 // [5] call sin16s_gen // [169] phi from main to sin16s_gen [phi:main->sin16s_gen] sin16s_gen_from_main: jsr sin16s_gen // [6] phi from main to main::@4 [phi:main->main::@4] __b4_from_main: jmp __b4 // main::@4 __b4: // [7] call sin16s_genb // [68] phi from main::@4 to sin16s_genb [phi:main::@4->sin16s_genb] sin16s_genb_from___b4: jsr sin16s_genb // [8] phi from main::@4 to main::@5 [phi:main::@4->main::@5] __b5_from___b4: jmp __b5 // main::@5 __b5: // [9] call print_cls // [59] phi from main::@5 to print_cls [phi:main::@5->print_cls] print_cls_from___b5: jsr print_cls // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] __b1_from___b5: // [10] phi (byte) main::i#2 = (byte) 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // [10] phi (byte*) print_char_cursor#53 = (const byte*) print_line_cursor#0 [phi:main::@5->main::@1#1] -- pbuz1=pbuc1 lda #print_line_cursor sta.z print_char_cursor+1 // [10] phi (signed word*) main::st2#2 = (const signed word*) main::sintab2 [phi:main::@5->main::@1#2] -- pwsz1=pwsc1 lda #sintab2 sta.z st2+1 // [10] phi (signed word*) main::st1#2 = (const signed word*) main::sintab1 [phi:main::@5->main::@1#3] -- pwsz1=pwsc1 lda #sintab1 sta.z st1+1 jmp __b1 // [10] phi from main::@7 to main::@1 [phi:main::@7->main::@1] __b1_from___b7: // [10] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@7->main::@1#0] -- register_copy // [10] phi (byte*) print_char_cursor#53 = (byte*) print_char_cursor#2 [phi:main::@7->main::@1#1] -- register_copy // [10] phi (signed word*) main::st2#2 = (signed word*) main::st2#1 [phi:main::@7->main::@1#2] -- register_copy // [10] phi (signed word*) main::st1#2 = (signed word*) main::st1#1 [phi:main::@7->main::@1#3] -- register_copy jmp __b1 // main::@1 __b1: // [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) -- vwsz1=_deref_pwsz2_minus__deref_pwsz3 ldy #0 sec lda (st1),y sbc (st2),y sta.z sw iny lda (st1),y sbc (st2),y sta.z sw+1 // [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 -- vwsz1_lt_0_then_la1 lda.z sw+1 bmi __b2_from___b1 // [13] phi from main::@1 to main::@3 [phi:main::@1->main::@3] __b3_from___b1: jmp __b3 // main::@3 __b3: // [14] call print_str // [25] phi from main::@3 to print_str [phi:main::@3->print_str] print_str_from___b3: // [25] phi (byte*) print_char_cursor#55 = (byte*) print_char_cursor#53 [phi:main::@3->print_str#0] -- register_copy // [25] phi (byte*) print_str::str#6 = (const byte*) main::str1 [phi:main::@3->print_str#1] -- pbuz1=pbuc1 lda #str1 sta.z print_str.str+1 jsr print_str // [15] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] __b2_from___b1: __b2_from___b3: // [15] phi (byte*) print_char_cursor#52 = (byte*) print_char_cursor#53 [phi:main::@1/main::@3->main::@2#0] -- register_copy jmp __b2 // main::@2 __b2: // [16] (signed word) print_sint::w#1 ← (signed word) main::sw#0 // [17] call print_sint jsr print_sint // [18] phi from main::@2 to main::@6 [phi:main::@2->main::@6] __b6_from___b2: jmp __b6 // main::@6 __b6: // [19] call print_str // [25] phi from main::@6 to print_str [phi:main::@6->print_str] print_str_from___b6: // [25] phi (byte*) print_char_cursor#55 = (byte*) print_char_cursor#13 [phi:main::@6->print_str#0] -- register_copy // [25] phi (byte*) print_str::str#6 = (const byte*) main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 lda #str sta.z print_str.str+1 jsr print_str jmp __b7 // main::@7 __b7: // [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z st1 sta.z st1 bcc !+ inc.z st1+1 !: // [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z st2 sta.z st2 bcc !+ inc.z st2+1 !: // [22] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [23] if((byte) main::i#1!=(byte) $78) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$78 cmp.z i bne __b1_from___b7 jmp __breturn // main::@return __breturn: // [24] return rts sintab1: .fill 2*$78, 0 sintab2: .fill 2*$78, 0 str: .text " " .byte 0 str1: .text " " .byte 0 } // print_str // Print a zero-terminated string // print_str(byte* zp($b) str) print_str: { .label str = $b // [26] phi from print_str print_str::@3 to print_str::@1 [phi:print_str/print_str::@3->print_str::@1] __b1_from_print_str: __b1_from___b3: // [26] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#55 [phi:print_str/print_str::@3->print_str::@1#0] -- register_copy // [26] phi (byte*) print_str::str#3 = (byte*) print_str::str#6 [phi:print_str/print_str::@3->print_str::@1#1] -- register_copy jmp __b1 // print_str::@1 __b1: // [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 bne __b2 jmp __breturn // print_str::@return __breturn: // [28] return rts // print_str::@2 __b2: // [29] (byte) print_char::ch#0 ← *((byte*) print_str::str#3) -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y // [30] call print_char // [32] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] print_char_from___b2: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#2 [phi:print_str::@2->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char jmp __b3 // print_str::@3 __b3: // [31] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: jmp __b1_from___b3 } // print_char // Print a single char // print_char(byte register(A) ch) print_char: { // [33] *((byte*) print_char_cursor#35) ← (byte) print_char::ch#5 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y // [34] (byte*) print_char_cursor#13 ← ++ (byte*) print_char_cursor#35 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: jmp __breturn // print_char::@return __breturn: // [35] return rts } // print_sint // Print a signed int as HEX // print_sint(signed word zp(9) w) print_sint: { .label w = 9 // [36] if((signed word) print_sint::w#1<(signed byte) 0) goto print_sint::@1 -- vwsz1_lt_0_then_la1 lda.z w+1 bmi __b1_from_print_sint // [37] phi from print_sint to print_sint::@3 [phi:print_sint->print_sint::@3] __b3_from_print_sint: jmp __b3 // print_sint::@3 __b3: // [38] call print_char // [32] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] print_char_from___b3: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#52 [phi:print_sint::@3->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [39] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] __b2_from___b3: __b2_from___b4: // [39] phi (signed word) print_sint::w#4 = (signed word) print_sint::w#1 [phi:print_sint::@3/print_sint::@4->print_sint::@2#0] -- register_copy jmp __b2 // print_sint::@2 __b2: // [40] (word) print_uint::w#0 ← (word)(signed word) print_sint::w#4 // [41] call print_uint jsr print_uint jmp __breturn // print_sint::@return __breturn: // [42] return rts // [43] phi from print_sint to print_sint::@1 [phi:print_sint->print_sint::@1] __b1_from_print_sint: jmp __b1 // print_sint::@1 __b1: // [44] call print_char // [32] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] print_char_from___b1: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#52 [phi:print_sint::@1->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char jmp __b4 // print_sint::@4 __b4: // [45] (signed word) print_sint::w#0 ← - (signed word) print_sint::w#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z w sta.z w lda #0 sbc.z w+1 sta.z w+1 jmp __b2_from___b4 } // print_uint // Print a unsigned int as HEX // print_uint(word zp(9) w) print_uint: { .label w = 9 // [46] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 -- vbuxx=_hi_vwuz1 ldx.z w+1 // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] print_uchar_from_print_uint: // [51] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar jmp __b1 // print_uint::@1 __b1: // [48] (byte) print_uchar::b#1 ← < (word) print_uint::w#0 -- vbuxx=_lo_vwuz1 ldx.z w // [49] call print_uchar // [51] phi from print_uint::@1 to print_uchar [phi:print_uint::@1->print_uchar] print_uchar_from___b1: // [51] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar jmp __breturn // print_uint::@return __breturn: // [50] return rts } // print_uchar // Print a char as HEX // print_uchar(byte register(X) b) print_uchar: { // [52] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr // [53] (byte) print_char::ch#3 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y // [54] call print_char // Table of hexadecimal digits // [32] phi from print_uchar to print_char [phi:print_uchar->print_char] print_char_from_print_uchar: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#13 [phi:print_uchar->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char jmp __b1 // print_uchar::@1 __b1: // [55] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 // [56] (byte) print_char::ch#4 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2) -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x // [57] call print_char // [32] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] print_char_from___b1: // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#13 [phi:print_uchar::@1->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char jmp __breturn // print_uchar::@return __breturn: // [58] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // [60] call memset // [62] phi from print_cls to memset [phi:print_cls->memset] memset_from_print_cls: jsr memset jmp __breturn // print_cls::@return __breturn: // [61] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .const c = ' ' .const num = $3e8 .label str = print_line_cursor .label end = str+num .label dst = $b // [63] phi from memset to memset::@1 [phi:memset->memset::@1] __b1_from_memset: // [63] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str sta.z dst+1 jmp __b1 // memset::@1 __b1: // [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 lda.z dst cmp #memset::@1] __b1_from___b2: // [63] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // sin16s_genb // Generate signed (large) word sinus table - on the full -$7fff - $7fff range // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin16s_genb(signed word* zp($17) sintab) sin16s_genb: { .label __3 = $1d .label step = $1f .label sintab = $17 // u[4.28] // Iterate over the table .label x = $13 .label i = $11 // [69] call div32u16u // [141] phi from sin16s_genb to div32u16u [phi:sin16s_genb->div32u16u] div32u16u_from_sin16s_genb: jsr div32u16u // [70] (dword) div32u16u::return#3 ← (dword) div32u16u::return#0 jmp __b3 // sin16s_genb::@3 __b3: // [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 // [72] phi from sin16s_genb::@3 to sin16s_genb::@1 [phi:sin16s_genb::@3->sin16s_genb::@1] __b1_from___b3: // [72] phi (signed word*) sin16s_genb::sintab#2 = (const signed word*) main::sintab2 [phi:sin16s_genb::@3->sin16s_genb::@1#0] -- pwsz1=pwsc1 lda #main.sintab2 sta.z sintab+1 // [72] phi (dword) sin16s_genb::x#2 = (dword) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vduc1 lda #<0 sta.z x lda #>0 sta.z x+1 lda #<0>>$10 sta.z x+2 lda #>0>>$10 sta.z x+3 // [72] phi (word) sin16s_genb::i#2 = (word) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 sta.z i+1 jmp __b1 // u[4.28] // sin16s_genb::@1 __b1: // [73] if((word) sin16s_genb::i#2<(const word) main::wavelength) goto sin16s_genb::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z i+1 cmp #>main.wavelength bcc __b2 bne !+ lda.z i cmp # (dword) sin16s_genb::x#2 -- vwuz1=_hi_vduz2 lda.z x+2 sta.z sin16sb.x lda.z x+3 sta.z sin16sb.x+1 // [76] call sin16sb jsr sin16sb // [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 jmp __b4 // sin16s_genb::@4 __b4: // [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 // [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 -- _deref_pwsz1=vwsz2 ldy #0 lda.z __3 sta (sintab),y iny lda.z __3+1 sta (sintab),y // [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z sintab sta.z sintab bcc !+ inc.z sintab+1 !: // [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 -- vduz1=vduz1_plus_vduz2 lda.z x clc adc.z step sta.z x lda.z x+1 adc.z step+1 sta.z x+1 lda.z x+2 adc.z step+2 sta.z x+2 lda.z x+3 adc.z step+3 sta.z x+3 // [82] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 -- vwuz1=_inc_vwuz1 inc.z i bne !+ inc.z i+1 !: // [72] phi from sin16s_genb::@4 to sin16s_genb::@1 [phi:sin16s_genb::@4->sin16s_genb::@1] __b1_from___b4: // [72] phi (signed word*) sin16s_genb::sintab#2 = (signed word*) sin16s_genb::sintab#0 [phi:sin16s_genb::@4->sin16s_genb::@1#0] -- register_copy // [72] phi (dword) sin16s_genb::x#2 = (dword) sin16s_genb::x#1 [phi:sin16s_genb::@4->sin16s_genb::@1#1] -- register_copy // [72] phi (word) sin16s_genb::i#2 = (word) sin16s_genb::i#1 [phi:sin16s_genb::@4->sin16s_genb::@1#2] -- register_copy jmp __b1 } // sin16sb // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff // sin16sb(word zp($b) x) sin16sb: { .label x = $b .label return = $1d .label x1 = $b .label x2 = $d .label x3 = $d .label x3_6 = $23 .label usinx = $1d .label x4 = $d .label x5 = $23 .label x5_128 = $23 .label sinx = $1d // [83] if((word) sin16sb::x#0<(const nomodify word) PI_u4f12) goto sin16sb::@1 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_u4f12 bcc __b1_from_sin16sb bne !+ lda.z x cmp #PI_u4f12 sta.z x+1 // [85] phi from sin16sb::@4 to sin16sb::@1 [phi:sin16sb::@4->sin16sb::@1] __b1_from___b4: // [85] phi (byte) sin16sb::isUpper#2 = (byte) 1 [phi:sin16sb::@4->sin16sb::@1#0] -- vbuyy=vbuc1 ldy #1 // [85] phi (word) sin16sb::x#4 = (word) sin16sb::x#1 [phi:sin16sb::@4->sin16sb::@1#1] -- register_copy jmp __b1 // [85] phi from sin16sb to sin16sb::@1 [phi:sin16sb->sin16sb::@1] __b1_from_sin16sb: // [85] phi (byte) sin16sb::isUpper#2 = (byte) 0 [phi:sin16sb->sin16sb::@1#0] -- vbuyy=vbuc1 ldy #0 // [85] phi (word) sin16sb::x#4 = (word) sin16sb::x#0 [phi:sin16sb->sin16sb::@1#1] -- register_copy jmp __b1 // sin16sb::@1 __b1: // [86] if((word) sin16sb::x#4<(const nomodify word) PI_HALF_u4f12) goto sin16sb::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_HALF_u4f12 bcc __b2_from___b1 bne !+ lda.z x cmp #PI_u4f12 sbc.z x+1 sta.z x+1 // [88] phi from sin16sb::@1 sin16sb::@5 to sin16sb::@2 [phi:sin16sb::@1/sin16sb::@5->sin16sb::@2] __b2_from___b1: __b2_from___b5: // [88] phi (word) sin16sb::x#6 = (word) sin16sb::x#4 [phi:sin16sb::@1/sin16sb::@5->sin16sb::@2#0] -- register_copy jmp __b2 // sin16sb::@2 __b2: // [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z x1 rol.z x1+1 asl.z x1 rol.z x1+1 asl.z x1 rol.z x1+1 // [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 // [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [92] call mulu16_sel // [122] phi from sin16sb::@2 to mulu16_sel [phi:sin16sb::@2->mulu16_sel] mulu16_sel_from___b2: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16sb::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#5 [phi:sin16sb::@2->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#5 [phi:sin16sb::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 jmp __b7 // sin16sb::@7 __b7: // [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z x2 lda.z mulu16_sel.return_1+1 sta.z x2+1 // [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 // [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [97] call mulu16_sel // [122] phi from sin16sb::@7 to mulu16_sel [phi:sin16sb::@7->mulu16_sel] mulu16_sel_from___b7: // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16sb::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#6 [phi:sin16sb::@7->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#6 [phi:sin16sb::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 jmp __b8 // sin16sb::@8 __b8: // [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 // [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 // [101] call mulu16_sel // [122] phi from sin16sb::@8 to mulu16_sel [phi:sin16sb::@8->mulu16_sel] mulu16_sel_from___b8: // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16sb::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [122] phi (word) mulu16_sel::v2#10 = (word)(number) $10000/(number) 6 [phi:sin16sb::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#7 [phi:sin16sb::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 jmp __b9 // sin16sb::@9 __b9: // [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 // [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 sta.z usinx lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 // [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 // [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [107] call mulu16_sel // [122] phi from sin16sb::@9 to mulu16_sel [phi:sin16sb::@9->mulu16_sel] mulu16_sel_from___b9: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16sb::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#8 [phi:sin16sb::@9->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#8 [phi:sin16sb::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 jmp __b10 // sin16sb::@10 __b10: // [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 // [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 // [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [112] call mulu16_sel // [122] phi from sin16sb::@10 to mulu16_sel [phi:sin16sb::@10->mulu16_sel] mulu16_sel_from___b10: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16sb::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#9 [phi:sin16sb::@10->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#9 [phi:sin16sb::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 jmp __b11 // sin16sb::@11 __b11: // [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 // [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 // [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 sta.z usinx lda.z usinx+1 adc.z x5_128+1 sta.z usinx+1 // [117] if((byte) sin16sb::isUpper#2==(byte) 0) goto sin16sb::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b12 jmp __b6 // sin16sb::@6 __b6: // [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx sta.z sinx lda #0 sbc.z sinx+1 sta.z sinx+1 // [119] phi from sin16sb::@12 sin16sb::@6 to sin16sb::@3 [phi:sin16sb::@12/sin16sb::@6->sin16sb::@3] __b3_from___b12: __b3_from___b6: // [119] phi (signed word) sin16sb::return#1 = (signed word) sin16sb::return#5 [phi:sin16sb::@12/sin16sb::@6->sin16sb::@3#0] -- register_copy jmp __b3 // sin16sb::@3 __b3: jmp __breturn // sin16sb::@return __breturn: // [120] return rts // sin16sb::@12 __b12: // [121] (signed word) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 jmp __b3_from___b12 } // mulu16_sel // Calculate val*val for two unsigned int values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip // mulu16_sel(word zp($d) v1, word zp($f) v2, byte register(X) select) mulu16_sel: { .label __0 = $19 .label __1 = $19 .label v1 = $d .label v2 = $f .label return = $d .label return_1 = $23 // [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 // [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 // [125] call mul16u jsr mul16u // [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 jmp __b1 // mulu16_sel::@1 __b1: // [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 // [128] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#10 -- vduz1=vduz1_rol_vbuxx cpx #0 beq !e+ !: asl.z __1 rol.z __1+1 rol.z __1+2 rol.z __1+3 dex bne !- !e: // [129] (word) mulu16_sel::return#17 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return_1 lda.z __1+3 sta.z return_1+1 jmp __breturn // mulu16_sel::@return __breturn: // [130] return rts } // mul16u // Perform binary multiplication of two unsigned 16-bit unsigned ints into a 32-bit unsigned long // mul16u(word zp($23) a, word zp($f) b) mul16u: { .label mb = $25 .label a = $23 .label res = $19 .label b = $f .label return = $19 // [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 sta.z mb+1 lda #0 sta.z mb+2 sta.z mb+3 // [132] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] __b1_from_mul16u: // [132] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy // [132] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 lda #<0 sta.z res lda #>0 sta.z res+1 lda #<0>>$10 sta.z res+2 lda #>0>>$10 sta.z res+3 // [132] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy jmp __b1 // mul16u::@1 __b1: // [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 bne __b2 jmp __breturn // mul16u::@return __breturn: // [134] return rts // mul16u::@2 __b2: // [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a // [136] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3_from___b2 jmp __b4 // mul16u::@4 __b4: // [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb sta.z res lda.z res+1 adc.z mb+1 sta.z res+1 lda.z res+2 adc.z mb+2 sta.z res+2 lda.z res+3 adc.z mb+3 sta.z res+3 // [138] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] __b3_from___b2: __b3_from___b4: // [138] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy jmp __b3 // mul16u::@3 __b3: // [139] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a // [140] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 // [132] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] __b1_from___b3: // [132] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy // [132] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy // [132] phi (word) mul16u::a#2 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // div32u16u // Divide unsigned 32-bit unsigned long dividend with a 16-bit unsigned int divisor // The 16-bit unsigned int remainder can be found in rem16u after the division div32u16u: { .label quotient_hi = $29 .label quotient_lo = $f .label return = $1f // [142] call divr16u // [151] phi from div32u16u to divr16u [phi:div32u16u->divr16u] divr16u_from_div32u16u: // [151] phi (word) divr16u::dividend#5 = >(const nomodify dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 // [151] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem lda #>0 sta.z divr16u.rem+1 jsr divr16u // [143] (word) divr16u::return#2 ← (word) divr16u::return#0 jmp __b1 // div32u16u::@1 __b1: // [144] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 // [145] (word) divr16u::rem#4 ← (word) rem16u#1 // [146] call divr16u // [151] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u] divr16u_from___b1: // [151] phi (word) divr16u::dividend#5 = <(const nomodify dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 // [151] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // [147] (word) divr16u::return#3 ← (word) divr16u::return#0 jmp __b2 // div32u16u::@2 __b2: // [148] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 // [149] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 lda.z quotient_hi sta.z return+2 lda.z quotient_hi+1 sta.z return+3 lda.z quotient_lo sta.z return lda.z quotient_lo+1 sta.z return+1 jmp __breturn // div32u16u::@return __breturn: // [150] return rts } // divr16u // Performs division on two 16 bit unsigned ints and an initial remainder // Returns the quotient dividend/divisor. // The final remainder will be set into the global variable rem16u // Implemented using simple binary division // divr16u(word zp($d) dividend, word zp($b) rem) divr16u: { .label rem = $b .label dividend = $d .label quotient = $f .label return = $f // [152] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] __b1_from_divr16u: // [152] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 // [152] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 lda #<0 sta.z quotient lda #>0 sta.z quotient+1 // [152] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy // [152] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy jmp __b1 // [152] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] __b1_from___b3: // [152] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy // [152] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy // [152] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy // [152] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp __b1 // divr16u::@1 __b1: // [153] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 // [154] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 // [155] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 // [156] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2_from___b1 jmp __b4 // divr16u::@4 __b4: // [157] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem // [158] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] __b2_from___b1: __b2_from___b4: // [158] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp __b2 // divr16u::@2 __b2: // [159] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 // [160] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 // [161] if((word) divr16u::rem#6<(const word) main::wavelength) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>main.wavelength bcc __b3_from___b2 bne !+ lda.z rem cmp #main.wavelength sta.z rem+1 // [164] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] __b3_from___b2: __b3_from___b5: // [164] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy // [164] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp __b3 // divr16u::@3 __b3: // [165] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx // [166] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1_from___b3 jmp __b6 // divr16u::@6 __b6: // [167] (word) rem16u#1 ← (word) divr16u::rem#11 jmp __breturn // divr16u::@return __breturn: // [168] return rts } // sin16s_gen // Generate signed (large) unsigned int sinus table - on the full -$7fff - $7fff range // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin16s_gen(signed word* zp($17) sintab) sin16s_gen: { .label __2 = $1d .label step = $1f .label sintab = $17 // u[4.28] // Iterate over the table .label x = $13 .label i = $11 // [170] call div32u16u // [141] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] div32u16u_from_sin16s_gen: jsr div32u16u // [171] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 jmp __b3 // sin16s_gen::@3 __b3: // [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 // [173] phi from sin16s_gen::@3 to sin16s_gen::@1 [phi:sin16s_gen::@3->sin16s_gen::@1] __b1_from___b3: // [173] phi (signed word*) sin16s_gen::sintab#2 = (const signed word*) main::sintab1 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 lda #main.sintab1 sta.z sintab+1 // [173] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 lda #<0 sta.z x lda #>0 sta.z x+1 lda #<0>>$10 sta.z x+2 lda #>0>>$10 sta.z x+3 // [173] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i lda #>0 sta.z i+1 jmp __b1 // u[4.28] // sin16s_gen::@1 __b1: // [174] if((word) sin16s_gen::i#2<(const word) main::wavelength) goto sin16s_gen::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z i+1 cmp #>main.wavelength bcc __b2 bne !+ lda.z i cmp #sin16s_gen::@1] __b1_from___b4: // [173] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy // [173] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy // [173] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy jmp __b1 } // sin16s // Calculate signed int sinus sin(x) // x: unsigned long input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed int sin(x) s[0.15] - using the full range -$7fff - $7fff // sin16s(dword zp($19) x) sin16s: { .label __4 = $25 .label x = $19 .label return = $1d .label x1 = $29 .label x2 = $d .label x3 = $d .label x3_6 = $23 .label usinx = $1d .label x4 = $d .label x5 = $23 .label x5_128 = $23 .label sinx = $1d // [184] if((dword) sin16s::x#0<(const nomodify dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b1_from_sin16s bne !+ lda.z x+2 cmp #>$10 bcc __b1_from_sin16s bne !+ lda.z x+1 cmp #>PI_u4f28 bcc __b1_from_sin16s bne !+ lda.z x cmp #PI_u4f28 sta.z x+1 lda.z x+2 sbc #>$10 sta.z x+2 lda.z x+3 sbc #>PI_u4f28>>$10 sta.z x+3 // [186] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] __b1_from___b4: // [186] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 // [186] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 // [186] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b1_from_sin16s: // [186] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 // [186] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy jmp __b1 // sin16s::@1 __b1: // [187] if((dword) sin16s::x#4<(const nomodify dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2_from___b1 bne !+ lda.z x+2 cmp #>$10 bcc __b2_from___b1 bne !+ lda.z x+1 cmp #>PI_HALF_u4f28 bcc __b2_from___b1 bne !+ lda.z x cmp #PI_u4f28 sbc.z x+1 sta.z x+1 lda #>$10 sbc.z x+2 sta.z x+2 lda #>PI_u4f28>>$10 sbc.z x+3 sta.z x+3 // [189] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] __b2_from___b1: __b2_from___b5: // [189] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy jmp __b2 // sin16s::@2 __b2: // [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 lda.z x+1 rol sta.z __4+1 lda.z x+2 rol sta.z __4+2 lda.z x+3 rol sta.z __4+3 asl.z __4 rol.z __4+1 rol.z __4+2 rol.z __4+3 asl.z __4 rol.z __4+1 rol.z __4+2 rol.z __4+3 // [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 // [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 // [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [194] call mulu16_sel // [122] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] mulu16_sel_from___b2: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 jmp __b7 // sin16s::@7 __b7: // [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 // [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 // [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [199] call mulu16_sel // [122] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] mulu16_sel_from___b7: // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 jmp __b8 // sin16s::@8 __b8: // [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 // [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 // [203] call mulu16_sel // [122] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] mulu16_sel_from___b8: // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [122] phi (word) mulu16_sel::v2#10 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 jmp __b9 // sin16s::@9 __b9: // [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 // [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 sta.z usinx lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 // [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 // [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [209] call mulu16_sel // [122] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] mulu16_sel_from___b9: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 jmp __b10 // sin16s::@10 __b10: // [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 // [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 // [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [214] call mulu16_sel // [122] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] mulu16_sel_from___b10: // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 jmp __b11 // sin16s::@11 __b11: // [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 // [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 // [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 sta.z usinx lda.z usinx+1 adc.z x5_128+1 sta.z usinx+1 // [219] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b12 jmp __b6 // sin16s::@6 __b6: // [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx sta.z sinx lda #0 sbc.z sinx+1 sta.z sinx+1 // [221] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] __b3_from___b12: __b3_from___b6: // [221] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy jmp __b3 // sin16s::@3 __b3: jmp __breturn // sin16s::@return __breturn: // [222] return rts // sin16s::@12 __b12: // [223] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 jmp __b3_from___b12 } // File Data print_hextab: .text "0123456789abcdef" ASSEMBLER OPTIMIZATIONS Removing instruction jmp __b1 Removing instruction jmp __bend Removing instruction jmp __b4 Removing instruction jmp __b5 Removing instruction jmp __b1 Removing instruction jmp __b3 Removing instruction jmp __b2 Removing instruction jmp __b6 Removing instruction jmp __b7 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b4 Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b4 Removing instruction jmp __b4 Removing instruction jmp __b1 Removing instruction jmp __b5 Removing instruction jmp __b2 Removing instruction jmp __b7 Removing instruction jmp __b8 Removing instruction jmp __b9 Removing instruction jmp __b10 Removing instruction jmp __b11 Removing instruction jmp __b6 Removing instruction jmp __b3 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b4 Removing instruction jmp __b3 Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b4 Removing instruction jmp __b2 Removing instruction jmp __b5 Removing instruction jmp __b3 Removing instruction jmp __b6 Removing instruction jmp __breturn Removing instruction jmp __b3 Removing instruction jmp __b1 Removing instruction jmp __breturn Removing instruction jmp __b4 Removing instruction jmp __b4 Removing instruction jmp __b1 Removing instruction jmp __b5 Removing instruction jmp __b2 Removing instruction jmp __b7 Removing instruction jmp __b8 Removing instruction jmp __b9 Removing instruction jmp __b10 Removing instruction jmp __b11 Removing instruction jmp __b6 Removing instruction jmp __b3 Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda.z sw+1 Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction lda #>0 Replacing instruction lda #<0 with TXA Removing instruction lda #>0 Removing instruction lda #>0 Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label __b2_from___b1 with __b2 Replacing label __b1_from___b7 with __b1 Replacing label __b1_from___b3 with __b1 Replacing label __b1_from_print_sint with __b1 Replacing label __b2_from___b4 with __b2 Replacing label __b2_from___b1 with __b2 Replacing label __b2_from___b1 with __b2 Replacing label __b3_from___b12 with __b3 Replacing label __b3_from___b2 with __b3 Replacing label __b2_from___b1 with __b2 Replacing label __b3_from___b2 with __b3 Replacing label __b3_from___b2 with __b3 Replacing label __b1_from___b3 with __b1 Replacing label __b2_from___b1 with __b2 Replacing label __b2_from___b1 with __b2 Replacing label __b2_from___b1 with __b2 Replacing label __b2_from___b1 with __b2 Replacing label __b3_from___b12 with __b3 Removing instruction __b1_from___bbegin: Removing instruction __b1: Removing instruction main_from___b1: Removing instruction __bend_from___b1: Removing instruction __b4_from_main: Removing instruction sin16s_genb_from___b4: Removing instruction __b5_from___b4: Removing instruction print_cls_from___b5: Removing instruction __b1_from___b7: Removing instruction __b3_from___b1: Removing instruction print_str_from___b3: Removing instruction __b2_from___b1: Removing instruction __b2_from___b3: Removing instruction __b6_from___b2: Removing instruction print_str_from___b6: Removing instruction __b1_from_print_str: Removing instruction __b1_from___b3: Removing instruction __b3_from_print_sint: Removing instruction print_char_from___b3: Removing instruction __b2_from___b3: Removing instruction __b2_from___b4: Removing instruction __b1_from_print_sint: Removing instruction print_char_from___b1: Removing instruction __b1_from___b3: Removing instruction __b2_from___b1: Removing instruction __b2_from___b5: Removing instruction mulu16_sel_from___b8: Removing instruction __b3_from___b12: Removing instruction __b3_from___b6: Removing instruction __breturn: Removing instruction __b3_from___b2: Removing instruction __b3_from___b4: Removing instruction __b1_from___b3: Removing instruction __b2_from___b1: Removing instruction __b2_from___b4: Removing instruction __b3_from___b2: Removing instruction __b3_from___b5: Removing instruction __breturn: Removing instruction __b1_from___b3: Removing instruction __b2_from___b1: Removing instruction __b2_from___b5: Removing instruction mulu16_sel_from___b8: Removing instruction __b3_from___b12: Removing instruction __b3_from___b6: Removing instruction __breturn: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction __bbegin: Removing instruction __bend: Removing instruction sin16s_gen_from_main: Removing instruction __b4: Removing instruction __b5: Removing instruction __b1_from___b5: Removing instruction __b3: Removing instruction __b6: Removing instruction __b7: Removing instruction __breturn: Removing instruction __breturn: Removing instruction print_char_from___b2: Removing instruction __b3: Removing instruction __breturn: Removing instruction __b3: Removing instruction __breturn: Removing instruction __b4: Removing instruction print_uchar_from_print_uint: Removing instruction __b1: Removing instruction print_uchar_from___b1: Removing instruction __breturn: Removing instruction print_char_from_print_uchar: Removing instruction __b1: Removing instruction print_char_from___b1: Removing instruction __breturn: Removing instruction memset_from_print_cls: Removing instruction __breturn: Removing instruction __b1_from_memset: Removing instruction __breturn: Removing instruction __b1_from___b2: Removing instruction div32u16u_from_sin16s_genb: Removing instruction __b3: Removing instruction __breturn: Removing instruction __b4: Removing instruction __b1_from___b4: Removing instruction __b4: Removing instruction __b1_from___b4: Removing instruction __b5: Removing instruction mulu16_sel_from___b2: Removing instruction __b7: Removing instruction mulu16_sel_from___b7: Removing instruction __b8: Removing instruction __b9: Removing instruction mulu16_sel_from___b9: Removing instruction __b10: Removing instruction mulu16_sel_from___b10: Removing instruction __b11: Removing instruction __b6: Removing instruction __b1: Removing instruction __breturn: Removing instruction __b1_from_mul16u: Removing instruction __breturn: Removing instruction __b4: Removing instruction __b1_from___b3: Removing instruction divr16u_from_div32u16u: Removing instruction __b1: Removing instruction divr16u_from___b1: Removing instruction __b2: Removing instruction __breturn: Removing instruction __b1_from_divr16u: Removing instruction __b4: Removing instruction __b5: Removing instruction __b6: Removing instruction div32u16u_from_sin16s_gen: Removing instruction __b3: Removing instruction __breturn: Removing instruction __b4: Removing instruction __b1_from___b4: Removing instruction __b4: Removing instruction __b1_from___b4: Removing instruction __b5: Removing instruction mulu16_sel_from___b2: Removing instruction __b7: Removing instruction mulu16_sel_from___b7: Removing instruction __b8: Removing instruction __b9: Removing instruction mulu16_sel_from___b9: Removing instruction __b10: Removing instruction mulu16_sel_from___b10: Removing instruction __b11: Removing instruction __b6: Succesful ASM optimization Pass5UnusedLabelElimination Removing instruction jsr main Succesful ASM optimization Pass5SkipBegin Skipping double jump to __b3 in beq __b12 Replacing jump to rts with rts in jmp __b3 Skipping double jump to __b3 in beq __b12 Replacing jump to rts with rts in jmp __b3 Succesful ASM optimization Pass5DoubleJumpElimination Relabelling long label __b1_from_sin16sb to __b4 Relabelling long label __b1_from_sin16s to __b4 Succesful ASM optimization Pass5RelabelLongLabels Removing instruction jmp __b1 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #<0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __b12: Removing instruction __b12: Succesful ASM optimization Pass5UnusedLabelElimination Removing unreachable instruction rts Removing unreachable instruction rts Succesful ASM optimization Pass5UnreachableCodeElimination FINAL SYMBOL TABLE (label) @1 (label) @begin (label) @end (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify word) PI_HALF_u4f12 = (word) $1922 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify word) PI_u4f12 = (word) $3244 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 (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) SIZEOF_SIGNED_WORD = (byte) 2 (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (label) div32u16u::@1 (label) div32u16u::@2 (label) div32u16u::@return (dword) div32u16u::dividend (word) div32u16u::divisor (dword) div32u16u::quotient (word) div32u16u::quotient_hi (word) div32u16u::quotient_hi#0 quotient_hi zp[2]:41 400.4 (word) div32u16u::quotient_lo (word) div32u16u::quotient_lo#0 quotient_lo zp[2]:15 2002.0 (dword) div32u16u::return (dword) div32u16u::return#0 return zp[4]:31 300.75 (dword) div32u16u::return#2 return zp[4]:31 202.0 (dword) div32u16u::return#3 return zp[4]:31 202.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 reg byte a 200002.0 (byte~) divr16u::$2 reg byte a 200002.0 (label) divr16u::@1 (label) divr16u::@2 (label) divr16u::@3 (label) divr16u::@4 (label) divr16u::@5 (label) divr16u::@6 (label) divr16u::@return (word) divr16u::dividend (word) divr16u::dividend#0 dividend zp[2]:13 25000.25 (word) divr16u::dividend#3 dividend zp[2]:13 44286.28571428572 (word) divr16u::dividend#5 dividend zp[2]:13 10001.0 (word) divr16u::divisor (byte) divr16u::i (byte) divr16u::i#1 reg byte x 150001.5 (byte) divr16u::i#2 reg byte x 15384.76923076923 (word) divr16u::quotient (word) divr16u::quotient#1 quotient zp[2]:15 150001.5 (word) divr16u::quotient#2 quotient zp[2]:15 100001.0 (word) divr16u::quotient#3 quotient zp[2]:15 25000.25 (word) divr16u::rem (word) divr16u::rem#0 rem zp[2]:11 75000.75 (word) divr16u::rem#1 rem zp[2]:11 200002.0 (word) divr16u::rem#10 rem zp[2]:11 11002.0 (word) divr16u::rem#11 rem zp[2]:11 103334.66666666667 (word) divr16u::rem#2 rem zp[2]:11 200002.0 (word) divr16u::rem#4 rem zp[2]:11 2002.0 (word) divr16u::rem#5 rem zp[2]:11 210003.0 (word) divr16u::rem#6 rem zp[2]:11 100001.0 (word) divr16u::return (word) divr16u::return#0 return zp[2]:15 43143.57142857143 (word) divr16u::return#2 return zp[2]:15 2002.0 (word) divr16u::return#3 return zp[2]:15 2002.0 (void()) main() (label) main::@1 (label) main::@2 (label) main::@3 (label) main::@4 (label) main::@5 (label) main::@6 (label) main::@7 (label) main::@return (byte) main::i (byte) main::i#1 i zp[1]:6 151.5 (byte) main::i#2 i zp[1]:6 16.833333333333332 (const signed word*) main::sintab1[(number) $78] = { fill( $78, 0) } (const signed word*) main::sintab2[(number) $78] = { fill( $78, 0) } (signed word*) main::st1 (signed word*) main::st1#1 st1 zp[2]:2 50.5 (signed word*) main::st1#2 st1 zp[2]:2 30.299999999999997 (signed word*) main::st2 (signed word*) main::st2#1 st2 zp[2]:4 67.33333333333333 (signed word*) main::st2#2 st2 zp[2]:4 27.545454545454547 (const byte*) main::str[(byte) 4] = (byte*) " " (const byte*) main::str1[(byte) 2] = (byte*) " " (signed word) main::sw (signed word) main::sw#0 sw zp[2]:9 60.599999999999994 (const word) main::wavelength = (word) $78 (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (label) memset::@1 (label) memset::@2 (label) memset::@return (byte) memset::c (const byte) memset::c#0 c = (byte) ' ' (byte*) memset::dst (byte*) memset::dst#1 dst zp[2]:11 20002.0 (byte*) memset::dst#2 dst zp[2]:11 13334.666666666666 (byte*) memset::end (const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0 (word) memset::num (const word) memset::num#0 num = (word) $3e8 (void*) memset::return (void*) memset::str (const void*) memset::str#0 str = (void*)(const byte*) print_line_cursor#0 (dword()) mul16u((word) mul16u::a , (word) mul16u::b) (byte~) mul16u::$1 reg byte a 2.00000002E8 (label) mul16u::@1 (label) mul16u::@2 (label) mul16u::@3 (label) mul16u::@4 (label) mul16u::@return (word) mul16u::a (word) mul16u::a#0 a zp[2]:35 1.00000001E8 (word) mul16u::a#1 a zp[2]:35 366667.3333333334 (word) mul16u::a#2 a zp[2]:35 6.683333416666667E7 (word) mul16u::b (word) mul16u::b#0 b zp[2]:15 100001.0 (dword) mul16u::mb (dword) mul16u::mb#0 mb zp[4]:37 2000002.0 (dword) mul16u::mb#1 mb zp[4]:37 2.00000002E8 (dword) mul16u::mb#2 mb zp[4]:37 4.300000057142857E7 (dword) mul16u::res (dword) mul16u::res#1 res zp[4]:25 2.00000002E8 (dword) mul16u::res#2 res zp[4]:25 5.0016667333333336E7 (dword) mul16u::res#6 res zp[4]:25 1.00000001E8 (dword) mul16u::return (dword) mul16u::return#2 return zp[4]:25 200002.0 (word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select) (dword~) mulu16_sel::$0 zp[4]:25 200002.0 (dword~) mulu16_sel::$1 zp[4]:25 200002.0 (label) mulu16_sel::@1 (label) mulu16_sel::@return (word) mulu16_sel::return (word) mulu16_sel::return#0 return zp[2]:13 20002.0 (word) mulu16_sel::return#1 return zp[2]:13 20002.0 (word) mulu16_sel::return#10 return zp[2]:13 20002.0 (word) mulu16_sel::return#11 return_1 zp[2]:35 20002.0 (word) mulu16_sel::return#14 return_1 zp[2]:35 20002.0 (word) mulu16_sel::return#15 return zp[2]:13 20002.0 (word) mulu16_sel::return#16 return_1 zp[2]:35 20002.0 (word) mulu16_sel::return#17 return_1 zp[2]:35 16667.583333333332 (word) mulu16_sel::return#18 return_1 zp[2]:35 20002.0 (word) mulu16_sel::return#19 return zp[2]:13 20002.0 (word) mulu16_sel::return#20 return_1 zp[2]:35 20002.0 (byte) mulu16_sel::select (byte) mulu16_sel::select#10 reg byte x 16666.833333333332 (word) mulu16_sel::v1 (word) mulu16_sel::v1#0 v1 zp[2]:13 10001.0 (word) mulu16_sel::v1#1 v1 zp[2]:13 10001.0 (word) mulu16_sel::v1#10 v1 zp[2]:13 200011.0 (word) mulu16_sel::v1#2 v1 zp[2]:13 20002.0 (word) mulu16_sel::v1#3 v1 zp[2]:13 10001.0 (word) mulu16_sel::v1#4 v1 zp[2]:13 10001.0 (word) mulu16_sel::v1#5 v1 zp[2]:13 10001.0 (word) mulu16_sel::v1#6 v1 zp[2]:13 10001.0 (word) mulu16_sel::v1#7 v1 zp[2]:13 20002.0 (word) mulu16_sel::v1#8 v1 zp[2]:13 10001.0 (word) mulu16_sel::v1#9 v1 zp[2]:13 10001.0 (word) mulu16_sel::v2 (word) mulu16_sel::v2#0 v2 zp[2]:15 20002.0 (word) mulu16_sel::v2#1 v2 zp[2]:15 20002.0 (word) mulu16_sel::v2#10 v2 zp[2]:15 90004.5 (word) mulu16_sel::v2#3 v2 zp[2]:15 20002.0 (word) mulu16_sel::v2#4 v2 zp[2]:15 20002.0 (word) mulu16_sel::v2#5 v2 zp[2]:15 20002.0 (word) mulu16_sel::v2#6 v2 zp[2]:15 20002.0 (word) mulu16_sel::v2#8 v2 zp[2]:15 20002.0 (word) mulu16_sel::v2#9 v2 zp[2]:15 20002.0 (void()) print_char((byte) print_char::ch) (label) print_char::@return (byte) print_char::ch (byte) print_char::ch#0 reg byte a 200002.0 (byte) print_char::ch#3 reg byte a 200002.0 (byte) print_char::ch#4 reg byte a 200002.0 (byte) print_char::ch#5 reg byte a 1300004.0 (byte*) print_char_cursor (byte*) print_char_cursor#13 print_char_cursor zp[2]:7 50004.03846153846 (byte*) print_char_cursor#2 print_char_cursor zp[2]:7 20120.5 (byte*) print_char_cursor#35 print_char_cursor zp[2]:7 1151003.5 (byte*) print_char_cursor#52 print_char_cursor zp[2]:7 440.79999999999995 (byte*) print_char_cursor#53 print_char_cursor zp[2]:7 75.75 (byte*) print_char_cursor#55 print_char_cursor zp[2]:7 1203.0 (void()) print_cls() (label) print_cls::@return (const to_nomodify byte*) print_hextab[] = (byte*) "0123456789abcdef"z (byte*) print_line_cursor (const byte*) print_line_cursor#0 print_line_cursor = (byte*) 1024 (byte*) print_screen (void()) print_sint((signed word) print_sint::w) (label) print_sint::@1 (label) print_sint::@2 (label) print_sint::@3 (label) print_sint::@4 (label) print_sint::@return (signed word) print_sint::w (signed word) print_sint::w#0 w zp[2]:9 2002.0 (signed word) print_sint::w#1 w zp[2]:9 517.3333333333334 (signed word) print_sint::w#4 w zp[2]:9 2002.0 (void()) print_str((byte*) print_str::str) (label) print_str::@1 (label) print_str::@2 (label) print_str::@3 (label) print_str::@return (byte*) print_str::str (byte*) print_str::str#0 str zp[2]:11 200002.0 (byte*) print_str::str#3 str zp[2]:11 100251.25 (byte*) print_str::str#6 str zp[2]:11 1001.0 (void()) print_uchar((byte) print_uchar::b) (byte~) print_uchar::$0 reg byte a 200002.0 (byte~) print_uchar::$2 reg byte x 200002.0 (label) print_uchar::@1 (label) print_uchar::@return (byte) print_uchar::b (byte) print_uchar::b#0 reg byte x 20002.0 (byte) print_uchar::b#1 reg byte x 20002.0 (byte) print_uchar::b#2 reg byte x 55001.0 (void()) print_uint((word) print_uint::w) (label) print_uint::@1 (label) print_uint::@return (word) print_uint::w (word) print_uint::w#0 w zp[2]:9 7001.0 (word) rem16u (word) rem16u#1 rem16u zp[2]:11 2200.4 (signed word()) sin16s((dword) sin16s::x) (dword~) sin16s::$4 zp[4]:37 20002.0 (label) sin16s::@1 (label) sin16s::@10 (label) sin16s::@11 (label) sin16s::@12 (label) sin16s::@2 (label) sin16s::@3 (label) sin16s::@4 (label) sin16s::@5 (label) sin16s::@6 (label) sin16s::@7 (label) sin16s::@8 (label) sin16s::@9 (label) sin16s::@return (byte) sin16s::isUpper (byte) sin16s::isUpper#2 reg byte y 303.06060606060606 (signed word) sin16s::return (signed word) sin16s::return#0 return zp[2]:29 2002.0 (signed word) sin16s::return#1 return zp[2]:29 7001.0 (signed word) sin16s::return#5 return zp[2]:29 20002.0 (signed word) sin16s::sinx (signed word) sin16s::sinx#1 sinx zp[2]:29 20002.0 (word) sin16s::usinx (word) sin16s::usinx#0 usinx zp[2]:29 1666.8333333333333 (word) sin16s::usinx#1 usinx zp[2]:29 5000.5 (dword) sin16s::x (dword) sin16s::x#0 x zp[4]:25 15502.0 (dword) sin16s::x#1 x zp[4]:25 20002.0 (dword) sin16s::x#2 x zp[4]:25 20002.0 (dword) sin16s::x#4 x zp[4]:25 25002.5 (dword) sin16s::x#6 x zp[4]:25 30003.0 (word) sin16s::x1 (word) sin16s::x1#0 x1 zp[2]:41 3182.1363636363635 (word) sin16s::x2 (word) sin16s::x2#0 x2 zp[2]:13 20002.0 (word) sin16s::x3 (word) sin16s::x3#0 x3 zp[2]:13 5000.5 (word) sin16s::x3_6 (word) sin16s::x3_6#0 x3_6 zp[2]:35 20002.0 (word) sin16s::x4 (word) sin16s::x4#0 x4 zp[2]:13 20002.0 (word) sin16s::x5 (word) sin16s::x5#0 x5 zp[2]:35 20002.0 (word) sin16s::x5_128 (word) sin16s::x5_128#0 x5_128 zp[2]:35 20002.0 (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) (signed word~) sin16s_gen::$2 zp[2]:29 2002.0 (label) sin16s_gen::@1 (label) sin16s_gen::@2 (label) sin16s_gen::@3 (label) sin16s_gen::@4 (label) sin16s_gen::@return (word) sin16s_gen::i (word) sin16s_gen::i#1 i zp[2]:17 2002.0 (word) sin16s_gen::i#2 i zp[2]:17 333.6666666666667 (signed word*) sin16s_gen::sintab (signed word*) sin16s_gen::sintab#0 sintab zp[2]:23 667.3333333333334 (signed word*) sin16s_gen::sintab#2 sintab zp[2]:23 429.0 (dword) sin16s_gen::step (dword) sin16s_gen::step#0 step zp[4]:31 100.18181818181819 (word) sin16s_gen::wavelength (dword) sin16s_gen::x (dword) sin16s_gen::x#1 x zp[4]:19 1001.0 (dword) sin16s_gen::x#2 x zp[4]:19 375.375 (void()) sin16s_genb((signed word*) sin16s_genb::sintab , (word) sin16s_genb::wavelength) (signed word~) sin16s_genb::$3 zp[2]:29 2002.0 (label) sin16s_genb::@1 (label) sin16s_genb::@2 (label) sin16s_genb::@3 (label) sin16s_genb::@4 (label) sin16s_genb::@return (word) sin16s_genb::i (word) sin16s_genb::i#1 i zp[2]:17 2002.0 (word) sin16s_genb::i#2 i zp[2]:17 333.6666666666667 (signed word*) sin16s_genb::sintab (signed word*) sin16s_genb::sintab#0 sintab zp[2]:23 667.3333333333334 (signed word*) sin16s_genb::sintab#2 sintab zp[2]:23 429.0 (dword) sin16s_genb::step (dword) sin16s_genb::step#0 step zp[4]:31 100.18181818181819 (word) sin16s_genb::wavelength (dword) sin16s_genb::x (dword) sin16s_genb::x#1 x zp[4]:19 1001.0 (dword) sin16s_genb::x#2 x zp[4]:19 375.375 (signed word()) sin16sb((word) sin16sb::x) (label) sin16sb::@1 (label) sin16sb::@10 (label) sin16sb::@11 (label) sin16sb::@12 (label) sin16sb::@2 (label) sin16sb::@3 (label) sin16sb::@4 (label) sin16sb::@5 (label) sin16sb::@6 (label) sin16sb::@7 (label) sin16sb::@8 (label) sin16sb::@9 (label) sin16sb::@return (byte) sin16sb::isUpper (byte) sin16sb::isUpper#2 reg byte y 312.53125 (signed word) sin16sb::return (signed word) sin16sb::return#0 return zp[2]:29 2002.0 (signed word) sin16sb::return#1 return zp[2]:29 7001.0 (signed word) sin16sb::return#5 return zp[2]:29 20002.0 (signed word) sin16sb::sinx (signed word) sin16sb::sinx#1 sinx zp[2]:29 20002.0 (word) sin16sb::usinx (word) sin16sb::usinx#0 usinx zp[2]:29 1666.8333333333333 (word) sin16sb::usinx#1 usinx zp[2]:29 5000.5 (word) sin16sb::x (word) sin16sb::x#0 x zp[2]:11 15502.0 (word) sin16sb::x#1 x zp[2]:11 20002.0 (word) sin16sb::x#2 x zp[2]:11 20002.0 (word) sin16sb::x#4 x zp[2]:11 25002.5 (word) sin16sb::x#6 x zp[2]:11 30003.0 (word) sin16sb::x1 (word) sin16sb::x1#0 x1 zp[2]:11 3182.1363636363635 (word) sin16sb::x2 (word) sin16sb::x2#0 x2 zp[2]:13 20002.0 (word) sin16sb::x3 (word) sin16sb::x3#0 x3 zp[2]:13 5000.5 (word) sin16sb::x3_6 (word) sin16sb::x3_6#0 x3_6 zp[2]:35 20002.0 (word) sin16sb::x4 (word) sin16sb::x4#0 x4 zp[2]:13 20002.0 (word) sin16sb::x5 (word) sin16sb::x5#0 x5 zp[2]:35 20002.0 (word) sin16sb::x5_128 (word) sin16sb::x5_128#0 x5_128 zp[2]:35 20002.0 zp[2]:2 [ main::st1#2 main::st1#1 ] zp[2]:4 [ main::st2#2 main::st2#1 ] zp[1]:6 [ main::i#2 main::i#1 ] reg byte a [ print_char::ch#5 print_char::ch#0 print_char::ch#3 print_char::ch#4 ] zp[2]:7 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#52 print_char_cursor#53 print_char_cursor#2 print_char_cursor#13 ] zp[2]:9 [ print_sint::w#4 print_sint::w#0 print_sint::w#1 main::sw#0 print_uint::w#0 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] reg byte y [ sin16sb::isUpper#2 ] reg byte x [ mulu16_sel::select#10 ] zp[2]:11 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 memset::dst#2 memset::dst#1 print_str::str#3 print_str::str#6 print_str::str#0 ] zp[2]:13 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v1#10 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 mulu16_sel::v1#8 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 ] zp[2]:15 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mulu16_sel::v2#10 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mulu16_sel::v2#8 mul16u::b#0 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:17 [ sin16s_gen::i#2 sin16s_gen::i#1 sin16s_genb::i#2 sin16s_genb::i#1 ] zp[4]:19 [ sin16s_gen::x#2 sin16s_gen::x#1 sin16s_genb::x#2 sin16s_genb::x#1 ] zp[2]:23 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 sin16s_genb::sintab#2 sin16s_genb::sintab#0 ] reg byte y [ sin16s::isUpper#2 ] zp[4]:25 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] zp[2]:29 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 ] reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] zp[4]:31 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 div32u16u::return#2 sin16s_gen::step#0 ] zp[2]:35 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] reg byte a [ mul16u::$1 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] zp[4]:37 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] zp[2]:41 [ sin16s::x1#0 div32u16u::quotient_hi#0 ] FINAL ASSEMBLER Score: 21818 // File Comments // Generates a 16-bit signed sinus // Upstart .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels // PI*2 in u[4.28] format .const PI2_u4f28 = $6487ed51 // PI in u[4.28] format .const PI_u4f28 = $3243f6a9 // PI/2 in u[4.28] format .const PI_HALF_u4f28 = $1921fb54 // PI in u[4.12] format .const PI_u4f12 = $3244 // PI/2 in u[4.12] format .const PI_HALF_u4f12 = $1922 .const SIZEOF_SIGNED_WORD = 2 .label print_line_cursor = $400 // Remainder after unsigned 16-bit division .label rem16u = $b .label print_char_cursor = 7 // @begin // [1] phi from @begin to @1 [phi:@begin->@1] // @1 // [2] call main // [4] phi from @1 to main [phi:@1->main] // [3] phi from @1 to @end [phi:@1->@end] // @end // main main: { .label wavelength = $78 .label sw = 9 .label st1 = 2 .label st2 = 4 .label i = 6 // sin16s_gen(sintab1, wavelength) // [5] call sin16s_gen // [169] phi from main to sin16s_gen [phi:main->sin16s_gen] jsr sin16s_gen // [6] phi from main to main::@4 [phi:main->main::@4] // main::@4 // sin16s_genb(sintab2, wavelength) // [7] call sin16s_genb // [68] phi from main::@4 to sin16s_genb [phi:main::@4->sin16s_genb] jsr sin16s_genb // [8] phi from main::@4 to main::@5 [phi:main::@4->main::@5] // main::@5 // print_cls() // [9] call print_cls // [59] phi from main::@5 to print_cls [phi:main::@5->print_cls] jsr print_cls // [10] phi from main::@5 to main::@1 [phi:main::@5->main::@1] // [10] phi (byte) main::i#2 = (byte) 0 [phi:main::@5->main::@1#0] -- vbuz1=vbuc1 lda #0 sta.z i // [10] phi (byte*) print_char_cursor#53 = (const byte*) print_line_cursor#0 [phi:main::@5->main::@1#1] -- pbuz1=pbuc1 lda #print_line_cursor sta.z print_char_cursor+1 // [10] phi (signed word*) main::st2#2 = (const signed word*) main::sintab2 [phi:main::@5->main::@1#2] -- pwsz1=pwsc1 lda #sintab2 sta.z st2+1 // [10] phi (signed word*) main::st1#2 = (const signed word*) main::sintab1 [phi:main::@5->main::@1#3] -- pwsz1=pwsc1 lda #sintab1 sta.z st1+1 // [10] phi from main::@7 to main::@1 [phi:main::@7->main::@1] // [10] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@7->main::@1#0] -- register_copy // [10] phi (byte*) print_char_cursor#53 = (byte*) print_char_cursor#2 [phi:main::@7->main::@1#1] -- register_copy // [10] phi (signed word*) main::st2#2 = (signed word*) main::st2#1 [phi:main::@7->main::@1#2] -- register_copy // [10] phi (signed word*) main::st1#2 = (signed word*) main::st1#1 [phi:main::@7->main::@1#3] -- register_copy // main::@1 __b1: // sw = *st1 - *st2 // [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) -- vwsz1=_deref_pwsz2_minus__deref_pwsz3 ldy #0 sec lda (st1),y sbc (st2),y sta.z sw iny lda (st1),y sbc (st2),y sta.z sw+1 // if(sw>=0) // [12] if((signed word) main::sw#0<(signed byte) 0) goto main::@2 -- vwsz1_lt_0_then_la1 bmi __b2 // [13] phi from main::@1 to main::@3 [phi:main::@1->main::@3] // main::@3 // print_str(" ") // [14] call print_str // [25] phi from main::@3 to print_str [phi:main::@3->print_str] // [25] phi (byte*) print_char_cursor#55 = (byte*) print_char_cursor#53 [phi:main::@3->print_str#0] -- register_copy // [25] phi (byte*) print_str::str#6 = (const byte*) main::str1 [phi:main::@3->print_str#1] -- pbuz1=pbuc1 lda #str1 sta.z print_str.str+1 jsr print_str // [15] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] // [15] phi (byte*) print_char_cursor#52 = (byte*) print_char_cursor#53 [phi:main::@1/main::@3->main::@2#0] -- register_copy // main::@2 __b2: // print_sint(sw) // [16] (signed word) print_sint::w#1 ← (signed word) main::sw#0 // [17] call print_sint jsr print_sint // [18] phi from main::@2 to main::@6 [phi:main::@2->main::@6] // main::@6 // print_str(" ") // [19] call print_str // [25] phi from main::@6 to print_str [phi:main::@6->print_str] // [25] phi (byte*) print_char_cursor#55 = (byte*) print_char_cursor#13 [phi:main::@6->print_str#0] -- register_copy // [25] phi (byte*) print_str::str#6 = (const byte*) main::str [phi:main::@6->print_str#1] -- pbuz1=pbuc1 lda #str sta.z print_str.str+1 jsr print_str // main::@7 // st1++; // [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z st1 sta.z st1 bcc !+ inc.z st1+1 !: // st2++; // [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z st2 sta.z st2 bcc !+ inc.z st2+1 !: // for( byte i: 0..119) // [22] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 inc.z i // [23] if((byte) main::i#1!=(byte) $78) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$78 cmp.z i bne __b1 // main::@return // } // [24] return rts sintab1: .fill 2*$78, 0 sintab2: .fill 2*$78, 0 str: .text " " .byte 0 str1: .text " " .byte 0 } // print_str // Print a zero-terminated string // print_str(byte* zp($b) str) print_str: { .label str = $b // [26] phi from print_str print_str::@3 to print_str::@1 [phi:print_str/print_str::@3->print_str::@1] // [26] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#55 [phi:print_str/print_str::@3->print_str::@1#0] -- register_copy // [26] phi (byte*) print_str::str#3 = (byte*) print_str::str#6 [phi:print_str/print_str::@3->print_str::@1#1] -- register_copy // print_str::@1 __b1: // while(*str) // [27] if((byte) 0!=*((byte*) print_str::str#3)) goto print_str::@2 -- vbuc1_neq__deref_pbuz1_then_la1 ldy #0 lda (str),y cmp #0 bne __b2 // print_str::@return // } // [28] return rts // print_str::@2 __b2: // print_char(*(str++)) // [29] (byte) print_char::ch#0 ← *((byte*) print_str::str#3) -- vbuaa=_deref_pbuz1 ldy #0 lda (str),y // [30] call print_char // [32] phi from print_str::@2 to print_char [phi:print_str::@2->print_char] // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#2 [phi:print_str::@2->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) print_char::ch#0 [phi:print_str::@2->print_char#1] -- register_copy jsr print_char // print_str::@3 // print_char(*(str++)); // [31] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 -- pbuz1=_inc_pbuz1 inc.z str bne !+ inc.z str+1 !: jmp __b1 } // print_char // Print a single char // print_char(byte register(A) ch) print_char: { // *(print_char_cursor++) = ch // [33] *((byte*) print_char_cursor#35) ← (byte) print_char::ch#5 -- _deref_pbuz1=vbuaa ldy #0 sta (print_char_cursor),y // *(print_char_cursor++) = ch; // [34] (byte*) print_char_cursor#13 ← ++ (byte*) print_char_cursor#35 -- pbuz1=_inc_pbuz1 inc.z print_char_cursor bne !+ inc.z print_char_cursor+1 !: // print_char::@return // } // [35] return rts } // print_sint // Print a signed int as HEX // print_sint(signed word zp(9) w) print_sint: { .label w = 9 // if(w<0) // [36] if((signed word) print_sint::w#1<(signed byte) 0) goto print_sint::@1 -- vwsz1_lt_0_then_la1 lda.z w+1 bmi __b1 // [37] phi from print_sint to print_sint::@3 [phi:print_sint->print_sint::@3] // print_sint::@3 // print_char(' ') // [38] call print_char // [32] phi from print_sint::@3 to print_char [phi:print_sint::@3->print_char] // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#52 [phi:print_sint::@3->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) ' ' [phi:print_sint::@3->print_char#1] -- vbuaa=vbuc1 lda #' ' jsr print_char // [39] phi from print_sint::@3 print_sint::@4 to print_sint::@2 [phi:print_sint::@3/print_sint::@4->print_sint::@2] // [39] phi (signed word) print_sint::w#4 = (signed word) print_sint::w#1 [phi:print_sint::@3/print_sint::@4->print_sint::@2#0] -- register_copy // print_sint::@2 __b2: // print_uint((unsigned int)w) // [40] (word) print_uint::w#0 ← (word)(signed word) print_sint::w#4 // [41] call print_uint jsr print_uint // print_sint::@return // } // [42] return rts // [43] phi from print_sint to print_sint::@1 [phi:print_sint->print_sint::@1] // print_sint::@1 __b1: // print_char('-') // [44] call print_char // [32] phi from print_sint::@1 to print_char [phi:print_sint::@1->print_char] // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#52 [phi:print_sint::@1->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) '-' [phi:print_sint::@1->print_char#1] -- vbuaa=vbuc1 lda #'-' jsr print_char // print_sint::@4 // w = -w // [45] (signed word) print_sint::w#0 ← - (signed word) print_sint::w#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z w sta.z w lda #0 sbc.z w+1 sta.z w+1 jmp __b2 } // print_uint // Print a unsigned int as HEX // print_uint(word zp(9) w) print_uint: { .label w = 9 // print_uchar(>w) // [46] (byte) print_uchar::b#0 ← > (word) print_uint::w#0 -- vbuxx=_hi_vwuz1 ldx.z w+1 // [47] call print_uchar // [51] phi from print_uint to print_uchar [phi:print_uint->print_uchar] // [51] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#0 [phi:print_uint->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@1 // print_uchar(print_uchar] // [51] phi (byte) print_uchar::b#2 = (byte) print_uchar::b#1 [phi:print_uint::@1->print_uchar#0] -- register_copy jsr print_uchar // print_uint::@return // } // [50] return rts } // print_uchar // Print a char as HEX // print_uchar(byte register(X) b) print_uchar: { // b>>4 // [52] (byte~) print_uchar::$0 ← (byte) print_uchar::b#2 >> (byte) 4 -- vbuaa=vbuxx_ror_4 txa lsr lsr lsr lsr // print_char(print_hextab[b>>4]) // [53] (byte) print_char::ch#3 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$0) -- vbuaa=pbuc1_derefidx_vbuaa tay lda print_hextab,y // [54] call print_char // Table of hexadecimal digits // [32] phi from print_uchar to print_char [phi:print_uchar->print_char] // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#13 [phi:print_uchar->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) print_char::ch#3 [phi:print_uchar->print_char#1] -- register_copy jsr print_char // print_uchar::@1 // b&$f // [55] (byte~) print_uchar::$2 ← (byte) print_uchar::b#2 & (byte) $f -- vbuxx=vbuxx_band_vbuc1 lda #$f axs #0 // print_char(print_hextab[b&$f]) // [56] (byte) print_char::ch#4 ← *((const to_nomodify byte*) print_hextab + (byte~) print_uchar::$2) -- vbuaa=pbuc1_derefidx_vbuxx lda print_hextab,x // [57] call print_char // [32] phi from print_uchar::@1 to print_char [phi:print_uchar::@1->print_char] // [32] phi (byte*) print_char_cursor#35 = (byte*) print_char_cursor#13 [phi:print_uchar::@1->print_char#0] -- register_copy // [32] phi (byte) print_char::ch#5 = (byte) print_char::ch#4 [phi:print_uchar::@1->print_char#1] -- register_copy jsr print_char // print_uchar::@return // } // [58] return rts } // print_cls // Clear the screen. Also resets current line/char cursor. print_cls: { // memset(print_screen, ' ', 1000) // [60] call memset // [62] phi from print_cls to memset [phi:print_cls->memset] jsr memset // print_cls::@return // } // [61] return rts } // memset // Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str. memset: { .const c = ' ' .const num = $3e8 .label str = print_line_cursor .label end = str+num .label dst = $b // [63] phi from memset to memset::@1 [phi:memset->memset::@1] // [63] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 lda #str sta.z dst+1 // memset::@1 __b1: // for(char* dst = str; dst!=end; dst++) // [64] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 -- pbuz1_neq_pbuc1_then_la1 lda.z dst+1 cmp #>end bne __b2 lda.z dst cmp #memset::@1] // [63] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@2->memset::@1#0] -- register_copy jmp __b1 } // sin16s_genb // Generate signed (large) word sinus table - on the full -$7fff - $7fff range // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin16s_genb(signed word* zp($17) sintab) sin16s_genb: { .label __3 = $1d .label step = $1f .label sintab = $17 // u[4.28] // Iterate over the table .label x = $13 .label i = $11 // div32u16u(PI2_u4f28, wavelength) // [69] call div32u16u // [141] phi from sin16s_genb to div32u16u [phi:sin16s_genb->div32u16u] jsr div32u16u // div32u16u(PI2_u4f28, wavelength) // [70] (dword) div32u16u::return#3 ← (dword) div32u16u::return#0 // sin16s_genb::@3 // step = div32u16u(PI2_u4f28, wavelength) // [71] (dword) sin16s_genb::step#0 ← (dword) div32u16u::return#3 // [72] phi from sin16s_genb::@3 to sin16s_genb::@1 [phi:sin16s_genb::@3->sin16s_genb::@1] // [72] phi (signed word*) sin16s_genb::sintab#2 = (const signed word*) main::sintab2 [phi:sin16s_genb::@3->sin16s_genb::@1#0] -- pwsz1=pwsc1 lda #main.sintab2 sta.z sintab+1 // [72] phi (dword) sin16s_genb::x#2 = (dword) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#1] -- vduz1=vduc1 lda #<0 sta.z x sta.z x+1 lda #<0>>$10 sta.z x+2 lda #>0>>$10 sta.z x+3 // [72] phi (word) sin16s_genb::i#2 = (word) 0 [phi:sin16s_genb::@3->sin16s_genb::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i sta.z i+1 // u[4.28] // sin16s_genb::@1 __b1: // for( word i=0; imain.wavelength bcc __b2 bne !+ lda.z i cmp #x) // [75] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 -- vwuz1=_hi_vduz2 lda.z x+2 sta.z sin16sb.x lda.z x+3 sta.z sin16sb.x+1 // [76] call sin16sb jsr sin16sb // [77] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 // sin16s_genb::@4 // [78] (signed word~) sin16s_genb::$3 ← (signed word) sin16sb::return#0 // *sintab++ = sin16sb(>x) // [79] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$3 -- _deref_pwsz1=vwsz2 ldy #0 lda.z __3 sta (sintab),y iny lda.z __3+1 sta (sintab),y // *sintab++ = sin16sb(>x); // [80] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 lda #SIZEOF_SIGNED_WORD clc adc.z sintab sta.z sintab bcc !+ inc.z sintab+1 !: // x = x + step // [81] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 -- vduz1=vduz1_plus_vduz2 lda.z x clc adc.z step sta.z x lda.z x+1 adc.z step+1 sta.z x+1 lda.z x+2 adc.z step+2 sta.z x+2 lda.z x+3 adc.z step+3 sta.z x+3 // for( word i=0; isin16s_genb::@1] // [72] phi (signed word*) sin16s_genb::sintab#2 = (signed word*) sin16s_genb::sintab#0 [phi:sin16s_genb::@4->sin16s_genb::@1#0] -- register_copy // [72] phi (dword) sin16s_genb::x#2 = (dword) sin16s_genb::x#1 [phi:sin16s_genb::@4->sin16s_genb::@1#1] -- register_copy // [72] phi (word) sin16s_genb::i#2 = (word) sin16s_genb::i#1 [phi:sin16s_genb::@4->sin16s_genb::@1#2] -- register_copy jmp __b1 } // sin16sb // Calculate signed word sinus sin(x) // x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff // sin16sb(word zp($b) x) sin16sb: { .label x = $b .label return = $1d .label x1 = $b .label x2 = $d .label x3 = $d .label x3_6 = $23 .label usinx = $1d .label x4 = $d .label x5 = $23 .label x5_128 = $23 .label sinx = $1d // if(x >= PI_u4f12 ) // [83] if((word) sin16sb::x#0<(const nomodify word) PI_u4f12) goto sin16sb::@1 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_u4f12 bcc __b4 bne !+ lda.z x cmp #PI_u4f12 sta.z x+1 // [85] phi from sin16sb::@4 to sin16sb::@1 [phi:sin16sb::@4->sin16sb::@1] // [85] phi (byte) sin16sb::isUpper#2 = (byte) 1 [phi:sin16sb::@4->sin16sb::@1#0] -- vbuyy=vbuc1 ldy #1 // [85] phi (word) sin16sb::x#4 = (word) sin16sb::x#1 [phi:sin16sb::@4->sin16sb::@1#1] -- register_copy jmp __b1 // [85] phi from sin16sb to sin16sb::@1 [phi:sin16sb->sin16sb::@1] __b4: // [85] phi (byte) sin16sb::isUpper#2 = (byte) 0 [phi:sin16sb->sin16sb::@1#0] -- vbuyy=vbuc1 ldy #0 // [85] phi (word) sin16sb::x#4 = (word) sin16sb::x#0 [phi:sin16sb->sin16sb::@1#1] -- register_copy // sin16sb::@1 __b1: // if(x >= PI_HALF_u4f12 ) // [86] if((word) sin16sb::x#4<(const nomodify word) PI_HALF_u4f12) goto sin16sb::@2 -- vwuz1_lt_vwuc1_then_la1 lda.z x+1 cmp #>PI_HALF_u4f12 bcc __b2 bne !+ lda.z x cmp #PI_u4f12 sbc.z x+1 sta.z x+1 // [88] phi from sin16sb::@1 sin16sb::@5 to sin16sb::@2 [phi:sin16sb::@1/sin16sb::@5->sin16sb::@2] // [88] phi (word) sin16sb::x#6 = (word) sin16sb::x#4 [phi:sin16sb::@1/sin16sb::@5->sin16sb::@2#0] -- register_copy // sin16sb::@2 __b2: // x1 = x*8 // [89] (word) sin16sb::x1#0 ← (word) sin16sb::x#6 << (byte) 3 -- vwuz1=vwuz1_rol_3 asl.z x1 rol.z x1+1 asl.z x1 rol.z x1+1 asl.z x1 rol.z x1+1 // mulu16_sel(x1, x1, 0) // [90] (word) mulu16_sel::v1#5 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 // [91] (word) mulu16_sel::v2#5 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [92] call mulu16_sel // [122] phi from sin16sb::@2 to mulu16_sel [phi:sin16sb::@2->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16sb::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#5 [phi:sin16sb::@2->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#5 [phi:sin16sb::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x1, x1, 0) // [93] (word) mulu16_sel::return#18 ← (word) mulu16_sel::return#17 // sin16sb::@7 // x2 = mulu16_sel(x1, x1, 0) // [94] (word) sin16sb::x2#0 ← (word) mulu16_sel::return#18 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z x2 lda.z mulu16_sel.return_1+1 sta.z x2+1 // mulu16_sel(x2, x1, 1) // [95] (word) mulu16_sel::v1#6 ← (word) sin16sb::x2#0 // [96] (word) mulu16_sel::v2#6 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [97] call mulu16_sel // [122] phi from sin16sb::@7 to mulu16_sel [phi:sin16sb::@7->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16sb::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#6 [phi:sin16sb::@7->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#6 [phi:sin16sb::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x2, x1, 1) // [98] (word) mulu16_sel::return#19 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 // sin16sb::@8 // x3 = mulu16_sel(x2, x1, 1) // [99] (word) sin16sb::x3#0 ← (word) mulu16_sel::return#19 // mulu16_sel(x3, $10000/6, 1) // [100] (word) mulu16_sel::v1#7 ← (word) sin16sb::x3#0 // [101] call mulu16_sel // [122] phi from sin16sb::@8 to mulu16_sel [phi:sin16sb::@8->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16sb::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [122] phi (word) mulu16_sel::v2#10 = (word)(number) $10000/(number) 6 [phi:sin16sb::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#7 [phi:sin16sb::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, $10000/6, 1) // [102] (word) mulu16_sel::return#20 ← (word) mulu16_sel::return#17 // sin16sb::@9 // x3_6 = mulu16_sel(x3, $10000/6, 1) // [103] (word) sin16sb::x3_6#0 ← (word) mulu16_sel::return#20 // usinx = x1 - x3_6 // [104] (word) sin16sb::usinx#0 ← (word) sin16sb::x1#0 - (word) sin16sb::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 sta.z usinx lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 // mulu16_sel(x3, x1, 0) // [105] (word) mulu16_sel::v1#8 ← (word) sin16sb::x3#0 // [106] (word) mulu16_sel::v2#8 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [107] call mulu16_sel // [122] phi from sin16sb::@9 to mulu16_sel [phi:sin16sb::@9->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16sb::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#8 [phi:sin16sb::@9->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#8 [phi:sin16sb::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, x1, 0) // [108] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 // sin16sb::@10 // x4 = mulu16_sel(x3, x1, 0) // [109] (word) sin16sb::x4#0 ← (word) mulu16_sel::return#10 // mulu16_sel(x4, x1, 0) // [110] (word) mulu16_sel::v1#9 ← (word) sin16sb::x4#0 // [111] (word) mulu16_sel::v2#9 ← (word) sin16sb::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [112] call mulu16_sel // [122] phi from sin16sb::@10 to mulu16_sel [phi:sin16sb::@10->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16sb::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#9 [phi:sin16sb::@10->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#9 [phi:sin16sb::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x4, x1, 0) // [113] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#17 // sin16sb::@11 // x5 = mulu16_sel(x4, x1, 0) // [114] (word) sin16sb::x5#0 ← (word) mulu16_sel::return#11 // x5_128 = x5/$10 // [115] (word) sin16sb::x5_128#0 ← (word) sin16sb::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 // usinx = usinx + x5_128 // [116] (word) sin16sb::usinx#1 ← (word) sin16sb::usinx#0 + (word) sin16sb::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 sta.z usinx lda.z usinx+1 adc.z x5_128+1 sta.z usinx+1 // if(isUpper!=0) // [117] if((byte) sin16sb::isUpper#2==(byte) 0) goto sin16sb::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b3 // sin16sb::@6 // sinx = -(signed word)usinx // [118] (signed word) sin16sb::sinx#1 ← - (signed word)(word) sin16sb::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx sta.z sinx lda #0 sbc.z sinx+1 sta.z sinx+1 // [119] phi from sin16sb::@12 sin16sb::@6 to sin16sb::@3 [phi:sin16sb::@12/sin16sb::@6->sin16sb::@3] // [119] phi (signed word) sin16sb::return#1 = (signed word) sin16sb::return#5 [phi:sin16sb::@12/sin16sb::@6->sin16sb::@3#0] -- register_copy // sin16sb::@3 __b3: // sin16sb::@return // } // [120] return rts // sin16sb::@12 // [121] (signed word) sin16sb::return#5 ← (signed word)(word) sin16sb::usinx#1 } // mulu16_sel // Calculate val*val for two unsigned int values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip // mulu16_sel(word zp($d) v1, word zp($f) v2, byte register(X) select) mulu16_sel: { .label __0 = $19 .label __1 = $19 .label v1 = $d .label v2 = $f .label return = $d .label return_1 = $23 // mul16u(v1, v2) // [123] (word) mul16u::a#1 ← (word) mulu16_sel::v1#10 -- vwuz1=vwuz2 lda.z v1 sta.z mul16u.a lda.z v1+1 sta.z mul16u.a+1 // [124] (word) mul16u::b#0 ← (word) mulu16_sel::v2#10 // [125] call mul16u jsr mul16u // [126] (dword) mul16u::return#2 ← (dword) mul16u::res#2 // mulu16_sel::@1 // [127] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 // mul16u(v1, v2)< (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 lda.z __1+2 sta.z return_1 lda.z __1+3 sta.z return_1+1 // mulu16_sel::@return // } // [130] return rts } // mul16u // Perform binary multiplication of two unsigned 16-bit unsigned ints into a 32-bit unsigned long // mul16u(word zp($23) a, word zp($f) b) mul16u: { .label mb = $25 .label a = $23 .label res = $19 .label b = $f .label return = $19 // mb = b // [131] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#0 -- vduz1=_dword_vwuz2 lda.z b sta.z mb lda.z b+1 sta.z mb+1 lda #0 sta.z mb+2 sta.z mb+3 // [132] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1] // [132] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy // [132] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 sta.z res sta.z res+1 lda #<0>>$10 sta.z res+2 lda #>0>>$10 sta.z res+3 // [132] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy // mul16u::@1 __b1: // while(a!=0) // [133] if((word) mul16u::a#2!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 lda.z a bne __b2 lda.z a+1 bne __b2 // mul16u::@return // } // [134] return rts // mul16u::@2 __b2: // a&1 // [135] (byte~) mul16u::$1 ← (word) mul16u::a#2 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 lda #1 and.z a // if( (a&1) != 0) // [136] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3 // mul16u::@4 // res = res + mb // [137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 lda.z res clc adc.z mb sta.z res lda.z res+1 adc.z mb+1 sta.z res+1 lda.z res+2 adc.z mb+2 sta.z res+2 lda.z res+3 adc.z mb+3 sta.z res+3 // [138] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3] // [138] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy // mul16u::@3 __b3: // a = a>>1 // [139] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte) 1 -- vwuz1=vwuz1_ror_1 lsr.z a+1 ror.z a // mb = mb<<1 // [140] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 asl.z mb rol.z mb+1 rol.z mb+2 rol.z mb+3 // [132] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1] // [132] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy // [132] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy // [132] phi (word) mul16u::a#2 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy jmp __b1 } // div32u16u // Divide unsigned 32-bit unsigned long dividend with a 16-bit unsigned int divisor // The 16-bit unsigned int remainder can be found in rem16u after the division div32u16u: { .label quotient_hi = $29 .label quotient_lo = $f .label return = $1f // divr16u(>dividend, divisor, 0) // [142] call divr16u // [151] phi from div32u16u to divr16u [phi:div32u16u->divr16u] // [151] phi (word) divr16u::dividend#5 = >(const nomodify dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 lda #>$10 sta.z divr16u.dividend lda #>PI2_u4f28>>$10 sta.z divr16u.dividend+1 // [151] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 lda #<0 sta.z divr16u.rem sta.z divr16u.rem+1 jsr divr16u // divr16u(>dividend, divisor, 0) // [143] (word) divr16u::return#2 ← (word) divr16u::return#0 // div32u16u::@1 // quotient_hi = divr16u(>dividend, divisor, 0) // [144] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 lda.z divr16u.return sta.z quotient_hi lda.z divr16u.return+1 sta.z quotient_hi+1 // divr16u(divr16u] // [151] phi (word) divr16u::dividend#5 = <(const nomodify dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 lda #PI2_u4f28&$ffff sta.z divr16u.dividend+1 // [151] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy jsr divr16u // divr16u(divr16u::@1] // [152] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 // [152] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 txa sta.z quotient sta.z quotient+1 // [152] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy // [152] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy // [152] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] // [152] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy // [152] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy // [152] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy // [152] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy // divr16u::@1 __b1: // rem = rem << 1 // [153] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z rem rol.z rem+1 // >dividend // [154] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 lda.z dividend+1 // >dividend & $80 // [155] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 and #$80 // if( (>dividend & $80) != 0 ) // [156] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2 // divr16u::@4 // rem = rem | 1 // [157] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora.z rem sta.z rem // [158] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] // [158] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy // divr16u::@2 __b2: // dividend = dividend << 1 // [159] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z dividend rol.z dividend+1 // quotient = quotient << 1 // [160] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 asl.z quotient rol.z quotient+1 // if(rem>=divisor) // [161] if((word) divr16u::rem#6<(const word) main::wavelength) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 lda.z rem+1 cmp #>main.wavelength bcc __b3 bne !+ lda.z rem cmp #main.wavelength sta.z rem+1 // [164] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] // [164] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy // [164] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy // divr16u::@3 __b3: // for( char i : 0..15) // [165] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx inx // [166] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne __b1 // divr16u::@6 // rem16u = rem // [167] (word) rem16u#1 ← (word) divr16u::rem#11 // divr16u::@return // } // [168] return rts } // sin16s_gen // Generate signed (large) unsigned int sinus table - on the full -$7fff - $7fff range // sintab - the table to generate into // wavelength - the number of sinus points in a total sinus wavelength (the size of the table) // sin16s_gen(signed word* zp($17) sintab) sin16s_gen: { .label __2 = $1d .label step = $1f .label sintab = $17 // u[4.28] // Iterate over the table .label x = $13 .label i = $11 // div32u16u(PI2_u4f28, wavelength) // [170] call div32u16u // [141] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u] jsr div32u16u // div32u16u(PI2_u4f28, wavelength) // [171] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 // sin16s_gen::@3 // step = div32u16u(PI2_u4f28, wavelength) // [172] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 // [173] phi from sin16s_gen::@3 to sin16s_gen::@1 [phi:sin16s_gen::@3->sin16s_gen::@1] // [173] phi (signed word*) sin16s_gen::sintab#2 = (const signed word*) main::sintab1 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- pwsz1=pwsc1 lda #main.sintab1 sta.z sintab+1 // [173] phi (dword) sin16s_gen::x#2 = (dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- vduz1=vduc1 lda #<0 sta.z x sta.z x+1 lda #<0>>$10 sta.z x+2 lda #>0>>$10 sta.z x+3 // [173] phi (word) sin16s_gen::i#2 = (word) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vwuz1=vwuc1 lda #<0 sta.z i sta.z i+1 // u[4.28] // sin16s_gen::@1 __b1: // for( unsigned int i=0; imain.wavelength bcc __b2 bne !+ lda.z i cmp #sin16s_gen::@1] // [173] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy // [173] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy // [173] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy jmp __b1 } // sin16s // Calculate signed int sinus sin(x) // x: unsigned long input u[4.28] in the interval $00000000 - PI2_u4f28 // result: signed int sin(x) s[0.15] - using the full range -$7fff - $7fff // sin16s(dword zp($19) x) sin16s: { .label __4 = $25 .label x = $19 .label return = $1d .label x1 = $29 .label x2 = $d .label x3 = $d .label x3_6 = $23 .label usinx = $1d .label x4 = $d .label x5 = $23 .label x5_128 = $23 .label sinx = $1d // if(x >= PI_u4f28 ) // [184] if((dword) sin16s::x#0<(const nomodify dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_u4f28>>$10 bcc __b4 bne !+ lda.z x+2 cmp #>$10 bcc __b4 bne !+ lda.z x+1 cmp #>PI_u4f28 bcc __b4 bne !+ lda.z x cmp #PI_u4f28 sta.z x+1 lda.z x+2 sbc #>$10 sta.z x+2 lda.z x+3 sbc #>PI_u4f28>>$10 sta.z x+3 // [186] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1] // [186] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 ldy #1 // [186] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy jmp __b1 // [186] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1] __b4: // [186] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 ldy #0 // [186] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy // sin16s::@1 __b1: // if(x >= PI_HALF_u4f28 ) // [187] if((dword) sin16s::x#4<(const nomodify dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 lda.z x+3 cmp #>PI_HALF_u4f28>>$10 bcc __b2 bne !+ lda.z x+2 cmp #>$10 bcc __b2 bne !+ lda.z x+1 cmp #>PI_HALF_u4f28 bcc __b2 bne !+ lda.z x cmp #PI_u4f28 sbc.z x+1 sta.z x+1 lda #>$10 sbc.z x+2 sta.z x+2 lda #>PI_u4f28>>$10 sbc.z x+3 sta.z x+3 // [189] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2] // [189] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy // sin16s::@2 __b2: // x<<3 // [190] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 lda.z x asl sta.z __4 lda.z x+1 rol sta.z __4+1 lda.z x+2 rol sta.z __4+2 lda.z x+3 rol sta.z __4+3 asl.z __4 rol.z __4+1 rol.z __4+2 rol.z __4+3 asl.z __4 rol.z __4+1 rol.z __4+2 rol.z __4+3 // x1 = >x<<3 // [191] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 lda.z __4+2 sta.z x1 lda.z __4+3 sta.z x1+1 // mulu16_sel(x1, x1, 0) // [192] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v1 lda.z x1+1 sta.z mulu16_sel.v1+1 // [193] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [194] call mulu16_sel // [122] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x1, x1, 0) // [195] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 // sin16s::@7 // x2 = mulu16_sel(x1, x1, 0) // [196] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 // mulu16_sel(x2, x1, 1) // [197] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 // [198] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [199] call mulu16_sel // [122] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x2, x1, 1) // [200] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 // sin16s::@8 // x3 = mulu16_sel(x2, x1, 1) // [201] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 // mulu16_sel(x3, $10000/6, 1) // [202] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 // [203] call mulu16_sel // [122] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 ldx #1 // [122] phi (word) mulu16_sel::v2#10 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 lda #<$10000/6 sta.z mulu16_sel.v2 lda #>$10000/6 sta.z mulu16_sel.v2+1 // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, $10000/6, 1) // [204] (word) mulu16_sel::return#14 ← (word) mulu16_sel::return#17 // sin16s::@9 // x3_6 = mulu16_sel(x3, $10000/6, 1) // [205] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#14 // usinx = x1 - x3_6 // [206] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 lda.z x1 sec sbc.z x3_6 sta.z usinx lda.z x1+1 sbc.z x3_6+1 sta.z usinx+1 // mulu16_sel(x3, x1, 0) // [207] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 // [208] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [209] call mulu16_sel // [122] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x3, x1, 0) // [210] (word) mulu16_sel::return#15 ← (word) mulu16_sel::return#17 -- vwuz1=vwuz2 lda.z mulu16_sel.return_1 sta.z mulu16_sel.return lda.z mulu16_sel.return_1+1 sta.z mulu16_sel.return+1 // sin16s::@10 // x4 = mulu16_sel(x3, x1, 0) // [211] (word) sin16s::x4#0 ← (word) mulu16_sel::return#15 // mulu16_sel(x4, x1, 0) // [212] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 // [213] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 lda.z x1 sta.z mulu16_sel.v2 lda.z x1+1 sta.z mulu16_sel.v2+1 // [214] call mulu16_sel // [122] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel] // [122] phi (byte) mulu16_sel::select#10 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 ldx #0 // [122] phi (word) mulu16_sel::v2#10 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy // [122] phi (word) mulu16_sel::v1#10 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy jsr mulu16_sel // mulu16_sel(x4, x1, 0) // [215] (word) mulu16_sel::return#16 ← (word) mulu16_sel::return#17 // sin16s::@11 // x5 = mulu16_sel(x4, x1, 0) // [216] (word) sin16s::x5#0 ← (word) mulu16_sel::return#16 // x5_128 = x5>>4 // [217] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 lsr.z x5_128+1 ror.z x5_128 // usinx = usinx + x5_128 // [218] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 lda.z usinx clc adc.z x5_128 sta.z usinx lda.z usinx+1 adc.z x5_128+1 sta.z usinx+1 // if(isUpper!=0) // [219] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 cpy #0 beq __b3 // sin16s::@6 // sinx = -(signed int)usinx // [220] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 sec lda #0 sbc.z sinx sta.z sinx lda #0 sbc.z sinx+1 sta.z sinx+1 // [221] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3] // [221] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy // sin16s::@3 __b3: // sin16s::@return // } // [222] return rts // sin16s::@12 // [223] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 } // File Data print_hextab: .text "0123456789abcdef"