1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-29 03:56:15 +00:00
kickc/src/test/ref/sinusgen16b.log

9372 lines
572 KiB
Plaintext

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 = <PI2_u4f28
Constant (const word) divr16u::divisor#1 = main::wavelength
Successful SSA optimization Pass2ConstantIdentification
Inlining constant with var siblings (const word) divr16u::dividend#1
Inlining constant with var siblings (const word) divr16u::divisor#0
Inlining constant with var siblings (const word) divr16u::dividend#2
Inlining constant with var siblings (const word) divr16u::divisor#1
Constant inlined divr16u::divisor#1 = (const word) main::wavelength
Constant inlined divr16u::dividend#1 = >(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
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
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
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
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
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
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 #<end
bne __b2
jmp __breturn
// memset::@return
__breturn:
// [65] return
rts
// memset::@2
__b2:
// [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1
lda #c
ldy #0
sta (dst),y
// [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1
inc.z dst
bne !+
inc.z dst+1
!:
// [63] phi from memset::@2 to memset::@1 [phi:memset::@2->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
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 #<main.wavelength
bcc __b2
!:
jmp __breturn
// sin16s_genb::@return
__breturn:
// [74] return
rts
// sin16s_genb::@2
__b2:
// [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 -- 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
bcc __b1_from_sin16sb
!:
jmp __b4
// sin16sb::@4
__b4:
// [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const nomodify word) PI_u4f12 -- vwuz1=vwuz1_minus_vwuc1
lda.z x
sec
sbc #<PI_u4f12
sta.z x
lda.z x+1
sbc #>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_HALF_u4f12
bcc __b2_from___b1
!:
jmp __b5
// sin16sb::@5
__b5:
// [87] (word) sin16sb::x#2 ← (const nomodify word) PI_u4f12 - (word) sin16sb::x#4 -- vwuz1=vwuc1_minus_vwuz1
sec
lda #<PI_u4f12
sbc.z x
sta.z x
lda #>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 #<PI2_u4f28>>$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
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
bcc __b3_from___b2
!:
jmp __b5
// divr16u::@5
__b5:
// [162] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1
inc.z quotient
bne !+
inc.z quotient+1
!:
// [163] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength -- vwuz1=vwuz1_minus_vwuc1
lda.z rem
sec
sbc #<main.wavelength
sta.z rem
lda.z rem+1
sbc #>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
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 #<main.wavelength
bcc __b2
!:
jmp __breturn
// sin16s_gen::@return
__breturn:
// [175] return
rts
// sin16s_gen::@2
__b2:
// [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2
lda.z x
sta.z sin16s.x
lda.z x+1
sta.z sin16s.x+1
lda.z x+2
sta.z sin16s.x+2
lda.z x+3
sta.z sin16s.x+3
// [177] call sin16s
jsr sin16s
// [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2
lda.z sin16s.return_1
sta.z sin16s.return
lda.z sin16s.return_1+1
sta.z sin16s.return+1
jmp __b4
// sin16s_gen::@4
__b4:
// [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2
lda.z sin16s.return
sta.z __2
lda.z sin16s.return+1
sta.z __2+1
// [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2
ldy #0
lda.z __2
sta (sintab),y
iny
lda.z __2+1
sta (sintab),y
// [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::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
!:
// [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::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
// [183] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1
inc.z i
bne !+
inc.z i+1
!:
// [173] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->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 #<PI_u4f28>>$10
bcc __b1_from_sin16s
bne !+
lda.z x+1
cmp #>PI_u4f28
bcc __b1_from_sin16s
bne !+
lda.z x
cmp #<PI_u4f28
bcc __b1_from_sin16s
!:
jmp __b4
// sin16s::@4
__b4:
// [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const nomodify dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1
lda.z x
sec
sbc #<PI_u4f28
sta.z x
lda.z x+1
sbc #>PI_u4f28
sta.z x+1
lda.z x+2
sbc #<PI_u4f28>>$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 #<PI_HALF_u4f28>>$10
bcc __b2_from___b1
bne !+
lda.z x+1
cmp #>PI_HALF_u4f28
bcc __b2_from___b1
bne !+
lda.z x
cmp #<PI_HALF_u4f28
bcc __b2_from___b1
!:
jmp __b5
// sin16s::@5
__b5:
// [188] (dword) sin16s::x#2 ← (const nomodify dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1
lda #<PI_u4f28
sec
sbc.z x
sta.z x
lda #>PI_u4f28
sbc.z x+1
sta.z x+1
lda #<PI_u4f28>>$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
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
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
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
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
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
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 #<end
bne __b2
jmp __breturn
// memset::@return
__breturn:
// [65] return
rts
// memset::@2
__b2:
// [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1
lda #c
ldy #0
sta (dst),y
// [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1
inc.z dst
bne !+
inc.z dst+1
!:
// [63] phi from memset::@2 to memset::@1 [phi:memset::@2->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
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 #<main.wavelength
bcc __b2
!:
jmp __breturn
// sin16s_genb::@return
__breturn:
// [74] return
rts
// sin16s_genb::@2
__b2:
// [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
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
bcc __b1_from_sin16sb
!:
jmp __b4
// sin16sb::@4
__b4:
// [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const nomodify word) PI_u4f12 -- vwuz1=vwuz1_minus_vwuc1
lda.z x
sec
sbc #<PI_u4f12
sta.z x
lda.z x+1
sbc #>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_HALF_u4f12
bcc __b2_from___b1
!:
jmp __b5
// sin16sb::@5
__b5:
// [87] (word) sin16sb::x#2 ← (const nomodify word) PI_u4f12 - (word) sin16sb::x#4 -- vwuz1=vwuc1_minus_vwuz1
sec
lda #<PI_u4f12
sbc.z x
sta.z x
lda #>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 #<PI2_u4f28>>$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
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
bcc __b3_from___b2
!:
jmp __b5
// divr16u::@5
__b5:
// [162] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1
inc.z quotient
bne !+
inc.z quotient+1
!:
// [163] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength -- vwuz1=vwuz1_minus_vwuc1
lda.z rem
sec
sbc #<main.wavelength
sta.z rem
lda.z rem+1
sbc #>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
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 #<main.wavelength
bcc __b2
!:
jmp __breturn
// sin16s_gen::@return
__breturn:
// [175] return
rts
// sin16s_gen::@2
__b2:
// [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2
lda.z x
sta.z sin16s.x
lda.z x+1
sta.z sin16s.x+1
lda.z x+2
sta.z sin16s.x+2
lda.z x+3
sta.z sin16s.x+3
// [177] call sin16s
jsr sin16s
// [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
jmp __b4
// sin16s_gen::@4
__b4:
// [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0
// [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2
ldy #0
lda.z __2
sta (sintab),y
iny
lda.z __2+1
sta (sintab),y
// [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::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
!:
// [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::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
// [183] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1
inc.z i
bne !+
inc.z i+1
!:
// [173] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->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 #<PI_u4f28>>$10
bcc __b1_from_sin16s
bne !+
lda.z x+1
cmp #>PI_u4f28
bcc __b1_from_sin16s
bne !+
lda.z x
cmp #<PI_u4f28
bcc __b1_from_sin16s
!:
jmp __b4
// sin16s::@4
__b4:
// [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const nomodify dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1
lda.z x
sec
sbc #<PI_u4f28
sta.z x
lda.z x+1
sbc #>PI_u4f28
sta.z x+1
lda.z x+2
sbc #<PI_u4f28>>$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 #<PI_HALF_u4f28>>$10
bcc __b2_from___b1
bne !+
lda.z x+1
cmp #>PI_HALF_u4f28
bcc __b2_from___b1
bne !+
lda.z x
cmp #<PI_HALF_u4f28
bcc __b2_from___b1
!:
jmp __b5
// sin16s::@5
__b5:
// [188] (dword) sin16s::x#2 ← (const nomodify dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1
lda #<PI_u4f28
sec
sbc.z x
sta.z x
lda #>PI_u4f28
sbc.z x+1
sta.z x+1
lda #<PI_u4f28>>$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
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
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
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
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
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(<w)
// [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]
// [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
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 #<end
bne __b2
// memset::@return
// }
// [65] return
rts
// memset::@2
__b2:
// *dst = c
// [66] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1
lda #c
ldy #0
sta (dst),y
// for(char* dst = str; dst!=end; dst++)
// [67] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1
inc.z dst
bne !+
inc.z dst+1
!:
// [63] phi from memset::@2 to memset::@1 [phi:memset::@2->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
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; i<wavelength; i++)
// [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 #<main.wavelength
bcc __b2
!:
// sin16s_genb::@return
// }
// [74] return
rts
// sin16s_genb::@2
__b2:
// sin16sb(>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; i<wavelength; i++)
// [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]
// [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
bcc __b4
!:
// sin16sb::@4
// x = x - PI_u4f12
// [84] (word) sin16sb::x#1 ← (word) sin16sb::x#0 - (const nomodify word) PI_u4f12 -- vwuz1=vwuz1_minus_vwuc1
lda.z x
sec
sbc #<PI_u4f12
sta.z x
lda.z x+1
sbc #>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_HALF_u4f12
bcc __b2
!:
// sin16sb::@5
// x = PI_u4f12 - x
// [87] (word) sin16sb::x#2 ← (const nomodify word) PI_u4f12 - (word) sin16sb::x#4 -- vwuz1=vwuc1_minus_vwuz1
sec
lda #<PI_u4f12
sbc.z x
sta.z x
lda #>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)<<select
// [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:
// >mul16u(v1, v2)<<select
// [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
// 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 #<PI2_u4f28>>$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(<dividend, divisor, rem16u)
// [145] (word) divr16u::rem#4 ← (word) rem16u#1
// [146] call divr16u
// [151] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->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
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(<dividend, divisor, rem16u)
// [147] (word) divr16u::return#3 ← (word) divr16u::return#0
// div32u16u::@2
// quotient_lo = divr16u(<dividend, divisor, rem16u)
// [148] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
// quotient = { quotient_hi, quotient_lo}
// [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
// div32u16u::@return
// }
// [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]
// [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
bcc __b3
!:
// divr16u::@5
// quotient++;
// [162] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1
inc.z quotient
bne !+
inc.z quotient+1
!:
// rem = rem - divisor
// [163] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength -- vwuz1=vwuz1_minus_vwuc1
lda.z rem
sec
sbc #<main.wavelength
sta.z rem
lda.z rem+1
sbc #>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
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; i<wavelength; i++)
// [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 #<main.wavelength
bcc __b2
!:
// sin16s_gen::@return
// }
// [175] return
rts
// sin16s_gen::@2
__b2:
// sin16s(x)
// [176] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2
lda.z x
sta.z sin16s.x
lda.z x+1
sta.z sin16s.x+1
lda.z x+2
sta.z sin16s.x+2
lda.z x+3
sta.z sin16s.x+3
// [177] call sin16s
jsr sin16s
// [178] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
// sin16s_gen::@4
// [179] (signed word~) sin16s_gen::$2 ← (signed word) sin16s::return#0
// *sintab++ = sin16s(x)
// [180] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$2 -- _deref_pwsz1=vwsz2
ldy #0
lda.z __2
sta (sintab),y
iny
lda.z __2+1
sta (sintab),y
// *sintab++ = sin16s(x);
// [181] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::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
// [182] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::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( unsigned int i=0; i<wavelength; i++)
// [183] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1
inc.z i
bne !+
inc.z i+1
!:
// [173] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->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 #<PI_u4f28>>$10
bcc __b4
bne !+
lda.z x+1
cmp #>PI_u4f28
bcc __b4
bne !+
lda.z x
cmp #<PI_u4f28
bcc __b4
!:
// sin16s::@4
// x = x - PI_u4f28
// [185] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const nomodify dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1
lda.z x
sec
sbc #<PI_u4f28
sta.z x
lda.z x+1
sbc #>PI_u4f28
sta.z x+1
lda.z x+2
sbc #<PI_u4f28>>$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 #<PI_HALF_u4f28>>$10
bcc __b2
bne !+
lda.z x+1
cmp #>PI_HALF_u4f28
bcc __b2
bne !+
lda.z x
cmp #<PI_HALF_u4f28
bcc __b2
!:
// sin16s::@5
// x = PI_u4f28 - x
// [188] (dword) sin16s::x#2 ← (const nomodify dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1
lda #<PI_u4f28
sec
sbc.z x
sta.z x
lda #>PI_u4f28
sbc.z x+1
sta.z x+1
lda #<PI_u4f28>>$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"