
CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  (byte) rem8u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:@2
@2: scope:[]  from @begin
  (word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:@5
divr16u: scope:[divr16u]  from div32u16u div32u16u::@2
  (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@2/(word) divr16u::divisor#1 )
  (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 )
  (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 )
  (word) divr16u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) divr16u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 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 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (word) divr16u::rem#0 ← (word~) divr16u::$0
  (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
  (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
  (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 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 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (word) divr16u::dividend#0 ← (word~) divr16u::$6
  (word~) divr16u::$7 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 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 )
  (word/dword~) divr16u::$5 ← (word) divr16u::rem#7 | (byte/signed byte/word/signed word/dword/signed dword) 1
  (word) divr16u::rem#1 ← (word/dword~) 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,15)
  (bool~) divr16u::$11 ← (byte) divr16u::i#1 != rangelast(0,15)
  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#11 ← 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#11
  return 
  to:@return
div32u16u: scope:[div32u16u]  from sin16s_gen
  (word) rem16u#20 ← phi( sin16s_gen/(word) rem16u#21 )
  (word) div32u16u::divisor#1 ← phi( sin16s_gen/(word) div32u16u::divisor#0 )
  (dword) div32u16u::dividend#1 ← phi( sin16s_gen/(dword) div32u16u::dividend#0 )
  (word~) div32u16u::$0 ← > (dword) div32u16u::dividend#1
  (word) divr16u::dividend#1 ← (word~) div32u16u::$0
  (word) divr16u::divisor#0 ← (word) div32u16u::divisor#1
  (word) divr16u::rem#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call divr16u 
  (word) divr16u::return#2 ← (word) divr16u::return#1
  to:div32u16u::@2
div32u16u::@2: scope:[div32u16u]  from div32u16u
  (word) div32u16u::divisor#2 ← phi( div32u16u/(word) div32u16u::divisor#1 )
  (dword) div32u16u::dividend#2 ← phi( div32u16u/(dword) div32u16u::dividend#1 )
  (word) rem16u#12 ← 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#12
  (word) div32u16u::quotient_hi#0 ← (word~) div32u16u::$1
  (word~) div32u16u::$2 ← < (dword) div32u16u::dividend#2
  (word) divr16u::dividend#2 ← (word~) div32u16u::$2
  (word) divr16u::divisor#1 ← (word) div32u16u::divisor#2
  (word) divr16u::rem#4 ← (word) rem16u#3
  call divr16u 
  (word) divr16u::return#3 ← (word) divr16u::return#1
  to:div32u16u::@3
div32u16u::@3: scope:[div32u16u]  from div32u16u::@2
  (word) div32u16u::quotient_hi#1 ← phi( div32u16u::@2/(word) div32u16u::quotient_hi#0 )
  (word) rem16u#13 ← phi( div32u16u::@2/(word) rem16u#2 )
  (word) divr16u::return#6 ← phi( div32u16u::@2/(word) divr16u::return#3 )
  (word~) div32u16u::$3 ← (word) divr16u::return#6
  (word) rem16u#4 ← (word) rem16u#13
  (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3
  (dword) div32u16u::quotient#0 ← { (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::@3
  (word) rem16u#14 ← phi( div32u16u::@3/(word) rem16u#4 )
  (dword) div32u16u::return#3 ← phi( div32u16u::@3/(dword) div32u16u::return#0 )
  (dword) div32u16u::return#1 ← (dword) div32u16u::return#3
  (word) rem16u#5 ← (word) rem16u#14
  return 
  to:@return
@5: scope:[]  from @2
  (word) rem16u#37 ← phi( @2/(word) rem16u#0 )
  (signed byte) rem8s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:@6
@6: scope:[]  from @5
  (word) rem16u#34 ← phi( @5/(word) rem16u#37 )
  (signed word) rem16s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:@13
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 ← (byte/signed byte/word/signed word/dword/signed 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 != (byte/signed byte/word/signed word/dword/signed dword) 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 )
  (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
  (bool~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) mul16u::$3 ← ! (bool~) mul16u::$2
  if((bool~) mul16u::$3) goto mul16u::@4
  to:mul16u::@7
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::@7
  (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#5 mul16u::@7/(dword) mul16u::res#1 )
  (dword) mul16u::mb#2 ← phi( mul16u::@2/(dword) mul16u::mb#4 mul16u::@7/(dword) mul16u::mb#3 )
  (word) mul16u::a#4 ← phi( mul16u::@2/(word) mul16u::a#3 mul16u::@7/(word) mul16u::a#6 )
  (word~) mul16u::$5 ← (word) mul16u::a#4 >> (byte/signed byte/word/signed word/dword/signed dword) 1
  (word) mul16u::a#0 ← (word~) mul16u::$5
  (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (dword) mul16u::mb#1 ← (dword~) mul16u::$6
  to:mul16u::@1
mul16u::@7: 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
@13: scope:[]  from @6
  (word) rem16u#31 ← phi( @6/(word) rem16u#34 )
  (dword) PI2_u4f28#0 ← (dword/signed dword) 1686629713
  (dword) PI_u4f28#0 ← (dword/signed dword) 843314857
  (dword) PI_HALF_u4f28#0 ← (dword/signed dword) 421657428
  (word) PI2_u4f12#0 ← (word/signed word/dword/signed dword) 25736
  (word) PI_u4f12#0 ← (word/signed word/dword/signed dword) 12868
  (word) PI_HALF_u4f12#0 ← (word/signed word/dword/signed dword) 6434
  to:@20
sin16s_gen: scope:[sin16s_gen]  from main
  (signed word*) sin16s_gen::sintab#5 ← phi( main/(signed word*) sin16s_gen::sintab#1 )
  (word) rem16u#21 ← phi( main/(word) rem16u#23 )
  (word) sin16s_gen::wavelength#1 ← phi( main/(word) sin16s_gen::wavelength#0 )
  (dword) div32u16u::dividend#0 ← (dword) PI2_u4f28#0
  (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
  (word) sin16s_gen::wavelength#4 ← phi( sin16s_gen/(word) sin16s_gen::wavelength#1 )
  (signed word*) sin16s_gen::sintab#4 ← phi( sin16s_gen/(signed word*) sin16s_gen::sintab#5 )
  (word) rem16u#15 ← phi( sin16s_gen/(word) rem16u#5 )
  (dword) div32u16u::return#4 ← phi( sin16s_gen/(dword) div32u16u::return#2 )
  (dword~) sin16s_gen::$0 ← (dword) div32u16u::return#4
  (word) rem16u#6 ← (word) rem16u#15
  (dword) sin16s_gen::step#0 ← (dword~) sin16s_gen::$0
  (dword) sin16s_gen::x#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (word) sin16s_gen::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:sin16s_gen::@1
sin16s_gen::@1: scope:[sin16s_gen]  from sin16s_gen::@3 sin16s_gen::@4
  (word) rem16u#26 ← phi( sin16s_gen::@3/(word) rem16u#6 sin16s_gen::@4/(word) rem16u#22 )
  (word) sin16s_gen::wavelength#3 ← phi( sin16s_gen::@3/(word) sin16s_gen::wavelength#4 sin16s_gen::@4/(word) sin16s_gen::wavelength#2 )
  (word) sin16s_gen::i#3 ← phi( sin16s_gen::@3/(word) sin16s_gen::i#0 sin16s_gen::@4/(word) sin16s_gen::i#1 )
  (dword) sin16s_gen::step#2 ← phi( sin16s_gen::@3/(dword) sin16s_gen::step#0 sin16s_gen::@4/(dword) sin16s_gen::step#1 )
  (signed word*) sin16s_gen::sintab#3 ← phi( sin16s_gen::@3/(signed word*) sin16s_gen::sintab#4 sin16s_gen::@4/(signed word*) sin16s_gen::sintab#0 )
  (dword) sin16s_gen::x#2 ← phi( sin16s_gen::@3/(dword) sin16s_gen::x#0 sin16s_gen::@4/(dword) sin16s_gen::x#1 )
  (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::@1
  (word) rem16u#22 ← phi( sin16s_gen::@1/(word) rem16u#26 )
  (word) sin16s_gen::wavelength#2 ← phi( sin16s_gen::@1/(word) sin16s_gen::wavelength#3 )
  (word) sin16s_gen::i#2 ← phi( sin16s_gen::@1/(word) sin16s_gen::i#3 )
  (dword) sin16s_gen::step#1 ← phi( sin16s_gen::@1/(dword) sin16s_gen::step#2 )
  (dword) sin16s_gen::x#3 ← phi( sin16s_gen::@1/(dword) sin16s_gen::x#2 )
  (signed word*) sin16s_gen::sintab#2 ← phi( sin16s_gen::@1/(signed word*) sin16s_gen::sintab#3 )
  (signed word) sin16s::return#3 ← phi( sin16s_gen::@1/(signed word) sin16s::return#0 )
  (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#3
  *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1
  (signed word*~) sin16s_gen::$2 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
  (signed word*) sin16s_gen::sintab#0 ← (signed word*~) sin16s_gen::$2
  (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#2
  (bool~) sin16s_gen::$4 ← (word) sin16s_gen::i#1 < (word) sin16s_gen::wavelength#2
  if((bool~) sin16s_gen::$4) goto sin16s_gen::@1
  to:sin16s_gen::@return
sin16s_gen::@return: scope:[sin16s_gen]  from sin16s_gen::@4
  (word) rem16u#16 ← phi( sin16s_gen::@4/(word) rem16u#22 )
  (word) rem16u#7 ← (word) rem16u#16
  return 
  to:@return
sin16s: scope:[sin16s]  from sin16s_gen::@1
  (dword) sin16s::x#3 ← phi( sin16s_gen::@1/(dword) sin16s::x#0 )
  (byte) sin16s::isUpper#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (dword) PI_u4f28#0
  (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::$3 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0
  (bool~) sin16s::$4 ← ! (bool~) sin16s::$3
  if((bool~) sin16s::$4) goto sin16s::@2
  to:sin16s::@5
sin16s::@4: scope:[sin16s]  from sin16s
  (dword) sin16s::x#5 ← phi( sin16s/(dword) sin16s::x#3 )
  (dword~) sin16s::$2 ← (dword) sin16s::x#5 - (dword) PI_u4f28#0
  (dword) sin16s::x#1 ← (dword~) sin16s::$2
  (byte) sin16s::isUpper#1 ← (byte/signed byte/word/signed word/dword/signed dword) 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::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
  (word~) sin16s::$7 ← > (dword~) sin16s::$6
  (word) sin16s::x1#0 ← (word~) sin16s::$7
  (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
  (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
  (byte) mulu16_sel::select#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call mulu16_sel 
  (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#6
  to:sin16s::@8
sin16s::@8: 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#7 ← phi( sin16s::@2/(word) mulu16_sel::return#0 )
  (word~) sin16s::$8 ← (word) mulu16_sel::return#7
  (word) sin16s::x2#0 ← (word~) sin16s::$8
  (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
  (word) mulu16_sel::v2#1 ← (word) sin16s::x1#1
  (byte) mulu16_sel::select#1 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  call mulu16_sel 
  (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#6
  to:sin16s::@9
sin16s::@9: scope:[sin16s]  from sin16s::@8
  (byte) sin16s::isUpper#5 ← phi( sin16s::@8/(byte) sin16s::isUpper#6 )
  (word) sin16s::x1#4 ← phi( sin16s::@8/(word) sin16s::x1#1 )
  (word) mulu16_sel::return#8 ← phi( sin16s::@8/(word) mulu16_sel::return#1 )
  (word~) sin16s::$9 ← (word) mulu16_sel::return#8
  (word) sin16s::x3#0 ← (word~) sin16s::$9
  (word/signed word/dword/signed dword~) sin16s::$10 ← (dword/signed dword) 65536 / (byte/signed byte/word/signed word/dword/signed dword) 6
  (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
  (word) mulu16_sel::v2#2 ← (word/signed word/dword/signed dword~) sin16s::$10
  (byte) mulu16_sel::select#2 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  call mulu16_sel 
  (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#6
  to:sin16s::@10
sin16s::@10: scope:[sin16s]  from sin16s::@9
  (byte) sin16s::isUpper#4 ← phi( sin16s::@9/(byte) sin16s::isUpper#5 )
  (word) sin16s::x3#1 ← phi( sin16s::@9/(word) sin16s::x3#0 )
  (word) sin16s::x1#2 ← phi( sin16s::@9/(word) sin16s::x1#4 )
  (word) mulu16_sel::return#9 ← phi( sin16s::@9/(word) mulu16_sel::return#2 )
  (word~) sin16s::$11 ← (word) mulu16_sel::return#9
  (word) sin16s::x3_6#0 ← (word~) sin16s::$11
  (word~) sin16s::$12 ← (word) sin16s::x1#2 - (word) sin16s::x3_6#0
  (word) sin16s::usinx#0 ← (word~) sin16s::$12
  (word) mulu16_sel::v1#3 ← (word) sin16s::x3#1
  (word) mulu16_sel::v2#3 ← (word) sin16s::x1#2
  (byte) mulu16_sel::select#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call mulu16_sel 
  (word) mulu16_sel::return#3 ← (word) mulu16_sel::return#6
  to:sin16s::@11
sin16s::@11: scope:[sin16s]  from sin16s::@10
  (byte) sin16s::isUpper#3 ← phi( sin16s::@10/(byte) sin16s::isUpper#4 )
  (word) sin16s::usinx#4 ← phi( sin16s::@10/(word) sin16s::usinx#0 )
  (word) sin16s::x1#3 ← phi( sin16s::@10/(word) sin16s::x1#2 )
  (word) mulu16_sel::return#10 ← phi( sin16s::@10/(word) mulu16_sel::return#3 )
  (word~) sin16s::$13 ← (word) mulu16_sel::return#10
  (word) sin16s::x4#0 ← (word~) sin16s::$13
  (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
  (word) mulu16_sel::v2#4 ← (word) sin16s::x1#3
  (byte) mulu16_sel::select#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call mulu16_sel 
  (word) mulu16_sel::return#4 ← (word) mulu16_sel::return#6
  to:sin16s::@12
sin16s::@12: scope:[sin16s]  from sin16s::@11
  (byte) sin16s::isUpper#2 ← phi( sin16s::@11/(byte) sin16s::isUpper#3 )
  (word) sin16s::usinx#2 ← phi( sin16s::@11/(word) sin16s::usinx#4 )
  (word) mulu16_sel::return#11 ← phi( sin16s::@11/(word) mulu16_sel::return#4 )
  (word~) sin16s::$14 ← (word) mulu16_sel::return#11
  (word) sin16s::x5#0 ← (word~) sin16s::$14
  (word~) sin16s::$15 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
  (word) sin16s::x5_128#0 ← (word~) sin16s::$15
  (word~) sin16s::$16 ← (word) sin16s::usinx#2 + (word) sin16s::x5_128#0
  (word) sin16s::usinx#1 ← (word~) sin16s::$16
  (signed word~) sin16s::$17 ← ((signed word)) (word) sin16s::usinx#1
  (signed word) sin16s::sinx#0 ← (signed word~) sin16s::$17
  (bool~) sin16s::$18 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) sin16s::$19 ← ! (bool~) sin16s::$18
  if((bool~) sin16s::$19) 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::$5 ← (dword) PI_u4f28#0 - (dword) sin16s::x#7
  (dword) sin16s::x#2 ← (dword~) sin16s::$5
  to:sin16s::@2
sin16s::@3: scope:[sin16s]  from sin16s::@12 sin16s::@6
  (signed word) sin16s::sinx#2 ← phi( sin16s::@12/(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::@12
  (word) sin16s::usinx#3 ← phi( sin16s::@12/(word) sin16s::usinx#1 )
  (signed word~) sin16s::$20 ← ((signed word)) (word) sin16s::usinx#3
  (signed word~) sin16s::$21 ← - (signed word~) sin16s::$20
  (signed word) sin16s::sinx#1 ← (signed word~) sin16s::$21
  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
mulu16_sel: scope:[mulu16_sel]  from sin16s::@10 sin16s::@11 sin16s::@2 sin16s::@8 sin16s::@9
  (byte) mulu16_sel::select#6 ← phi( sin16s::@10/(byte) mulu16_sel::select#3 sin16s::@11/(byte) mulu16_sel::select#4 sin16s::@2/(byte) mulu16_sel::select#0 sin16s::@8/(byte) mulu16_sel::select#1 sin16s::@9/(byte) mulu16_sel::select#2 )
  (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(word) mulu16_sel::v2#2 )
  (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
  (word) mul16u::a#1 ← (word) mulu16_sel::v1#5
  (word) mul16u::b#0 ← (word) mulu16_sel::v2#5
  call mul16u 
  (dword) mul16u::return#2 ← (dword) mul16u::return#1
  to:mulu16_sel::@2
mulu16_sel::@2: scope:[mulu16_sel]  from mulu16_sel
  (byte) mulu16_sel::select#5 ← phi( mulu16_sel/(byte) mulu16_sel::select#6 )
  (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#5
  (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::@2
  (word) mulu16_sel::return#12 ← phi( mulu16_sel::@2/(word) mulu16_sel::return#5 )
  (word) mulu16_sel::return#6 ← (word) mulu16_sel::return#12
  return 
  to:@return
@20: scope:[]  from @13
  (word) rem16u#29 ← phi( @13/(word) rem16u#31 )
  (byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*) print_line_cursor#0 ← (byte*) print_screen#0
  (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
  to:@32
print_str: scope:[print_str]  from main::@3 main::@7
  (byte*) print_char_cursor#51 ← phi( main::@3/(byte*) print_char_cursor#49 main::@7/(byte*) print_char_cursor#17 )
  (byte*) print_str::str#5 ← 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::@2
  (byte*) print_char_cursor#42 ← phi( print_str/(byte*) print_char_cursor#51 print_str::@2/(byte*) print_char_cursor#1 )
  (byte*) print_str::str#3 ← phi( print_str/(byte*) print_str::str#5 print_str::@2/(byte*) print_str::str#0 )
  (bool~) print_str::$0 ← *((byte*) print_str::str#3) != (byte) '@'
  if((bool~) print_str::$0) goto print_str::@2
  to:print_str::@return
print_str::@2: scope:[print_str]  from print_str::@1
  (byte*) print_char_cursor#22 ← phi( print_str::@1/(byte*) print_char_cursor#42 )
  (byte*) print_str::str#4 ← phi( print_str::@1/(byte*) print_str::str#3 )
  *((byte*) print_char_cursor#22) ← *((byte*) print_str::str#4)
  (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#22
  (byte*) print_str::str#0 ← ++ (byte*) print_str::str#4
  to:print_str::@1
print_str::@return: scope:[print_str]  from print_str::@1
  (byte*) print_char_cursor#23 ← phi( print_str::@1/(byte*) print_char_cursor#42 )
  (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#23
  return 
  to:@return
print_sword: scope:[print_sword]  from main::@2
  (byte*) print_char_cursor#52 ← phi( main::@2/(byte*) print_char_cursor#48 )
  (signed word) print_sword::w#2 ← phi( main::@2/(signed word) print_sword::w#1 )
  (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) print_sword::$1 ← ! (bool~) print_sword::$0
  if((bool~) print_sword::$1) goto print_sword::@1
  to:print_sword::@2
print_sword::@1: scope:[print_sword]  from print_sword print_sword::@4
  (byte*) print_char_cursor#43 ← phi( print_sword/(byte*) print_char_cursor#52 print_sword::@4/(byte*) print_char_cursor#4 )
  (signed word) print_sword::w#3 ← phi( print_sword/(signed word) print_sword::w#2 print_sword::@4/(signed word) print_sword::w#0 )
  (word~) print_sword::$4 ← ((word)) (signed word) print_sword::w#3
  (word) print_word::w#0 ← (word~) print_sword::$4
  call print_word 
  to:print_sword::@3
print_sword::@3: scope:[print_sword]  from print_sword::@1
  (byte*) print_char_cursor#24 ← phi( print_sword::@1/(byte*) print_char_cursor#8 )
  (byte*) print_char_cursor#3 ← (byte*) print_char_cursor#24
  to:print_sword::@return
print_sword::@2: scope:[print_sword]  from print_sword
  (signed word) print_sword::w#5 ← phi( print_sword/(signed word) print_sword::w#2 )
  (byte*) print_char_cursor#44 ← phi( print_sword/(byte*) print_char_cursor#52 )
  (byte) print_char::ch#0 ← (byte) '-'
  call print_char 
  to:print_sword::@4
print_sword::@4: scope:[print_sword]  from print_sword::@2
  (signed word) print_sword::w#4 ← phi( print_sword::@2/(signed word) print_sword::w#5 )
  (byte*) print_char_cursor#25 ← phi( print_sword::@2/(byte*) print_char_cursor#13 )
  (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#25
  (signed word~) print_sword::$3 ← - (signed word) print_sword::w#4
  (signed word) print_sword::w#0 ← (signed word~) print_sword::$3
  to:print_sword::@1
print_sword::@return: scope:[print_sword]  from print_sword::@3
  (byte*) print_char_cursor#26 ← phi( print_sword::@3/(byte*) print_char_cursor#3 )
  (byte*) print_char_cursor#5 ← (byte*) print_char_cursor#26
  return 
  to:@return
print_word: scope:[print_word]  from print_sword::@1
  (byte*) print_char_cursor#45 ← phi( print_sword::@1/(byte*) print_char_cursor#43 )
  (word) print_word::w#1 ← phi( print_sword::@1/(word) print_word::w#0 )
  (byte~) print_word::$0 ← > (word) print_word::w#1
  (byte) print_byte::b#0 ← (byte~) print_word::$0
  call print_byte 
  to:print_word::@1
print_word::@1: scope:[print_word]  from print_word
  (word) print_word::w#2 ← phi( print_word/(word) print_word::w#1 )
  (byte*) print_char_cursor#27 ← phi( print_word/(byte*) print_char_cursor#11 )
  (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#27
  (byte~) print_word::$2 ← < (word) print_word::w#2
  (byte) print_byte::b#1 ← (byte~) print_word::$2
  call print_byte 
  to:print_word::@2
print_word::@2: scope:[print_word]  from print_word::@1
  (byte*) print_char_cursor#28 ← phi( print_word::@1/(byte*) print_char_cursor#11 )
  (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#28
  to:print_word::@return
print_word::@return: scope:[print_word]  from print_word::@2
  (byte*) print_char_cursor#29 ← phi( print_word::@2/(byte*) print_char_cursor#7 )
  (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#29
  return 
  to:@return
@32: scope:[]  from @20
  (byte*) print_screen#7 ← phi( @20/(byte*) print_screen#0 )
  (byte*) print_char_cursor#55 ← phi( @20/(byte*) print_char_cursor#0 )
  (byte*) print_line_cursor#15 ← phi( @20/(byte*) print_line_cursor#0 )
  (word) rem16u#28 ← phi( @20/(word) rem16u#29 )
  (byte[]) print_hextab#0 ← (const string) $0
  to:@40
print_byte: scope:[print_byte]  from print_word print_word::@1
  (byte*) print_char_cursor#46 ← phi( print_word/(byte*) print_char_cursor#45 print_word::@1/(byte*) print_char_cursor#6 )
  (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
  (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) print_char::ch#1 ← *((byte[]) print_hextab#0 + (byte~) print_byte::$0)
  call print_char 
  to:print_byte::@1
print_byte::@1: scope:[print_byte]  from print_byte
  (byte) print_byte::b#3 ← phi( print_byte/(byte) print_byte::b#2 )
  (byte*) print_char_cursor#30 ← phi( print_byte/(byte*) print_char_cursor#13 )
  (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#30
  (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) 15
  (byte) print_char::ch#2 ← *((byte[]) print_hextab#0 + (byte~) print_byte::$2)
  call print_char 
  to:print_byte::@2
print_byte::@2: scope:[print_byte]  from print_byte::@1
  (byte*) print_char_cursor#31 ← phi( print_byte::@1/(byte*) print_char_cursor#13 )
  (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#31
  to:print_byte::@return
print_byte::@return: scope:[print_byte]  from print_byte::@2
  (byte*) print_char_cursor#32 ← phi( print_byte::@2/(byte*) print_char_cursor#10 )
  (byte*) print_char_cursor#11 ← (byte*) print_char_cursor#32
  return 
  to:@return
print_char: scope:[print_char]  from print_byte print_byte::@1 print_sword::@2
  (byte*) print_char_cursor#33 ← phi( print_byte/(byte*) print_char_cursor#46 print_byte::@1/(byte*) print_char_cursor#9 print_sword::@2/(byte*) print_char_cursor#44 )
  (byte) print_char::ch#3 ← phi( print_byte/(byte) print_char::ch#1 print_byte::@1/(byte) print_char::ch#2 print_sword::@2/(byte) print_char::ch#0 )
  *((byte*) print_char_cursor#33) ← (byte) print_char::ch#3
  (byte*) print_char_cursor#12 ← ++ (byte*) print_char_cursor#33
  to:print_char::@return
print_char::@return: scope:[print_char]  from print_char
  (byte*) print_char_cursor#34 ← phi( print_char/(byte*) print_char_cursor#12 )
  (byte*) print_char_cursor#13 ← (byte*) print_char_cursor#34
  return 
  to:@return
print_cls: scope:[print_cls]  from main::@5
  (byte*) print_screen#1 ← phi( main::@5/(byte*) print_screen#4 )
  (byte*) print_cls::sc#0 ← (byte*) print_screen#1
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls print_cls::@1
  (byte*) print_screen#2 ← phi( print_cls/(byte*) print_screen#1 print_cls::@1/(byte*) print_screen#2 )
  (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 )
  *((byte*) print_cls::sc#2) ← (byte) ' '
  (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
  (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (word/signed word/dword/signed dword) 1000
  (bool~) print_cls::$1 ← (byte*) print_cls::sc#1 != (byte*~) print_cls::$0
  if((bool~) print_cls::$1) goto print_cls::@1
  to:print_cls::@2
print_cls::@2: scope:[print_cls]  from print_cls::@1
  (byte*) print_screen#3 ← phi( print_cls::@1/(byte*) print_screen#2 )
  (byte*) print_line_cursor#1 ← (byte*) print_screen#3
  (byte*) print_char_cursor#14 ← (byte*) print_line_cursor#1
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@2
  (byte*) print_char_cursor#35 ← phi( print_cls::@2/(byte*) print_char_cursor#14 )
  (byte*) print_line_cursor#6 ← phi( print_cls::@2/(byte*) print_line_cursor#1 )
  (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#6
  (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#35
  return 
  to:@return
main: scope:[main]  from @40
  (byte*) print_char_cursor#53 ← phi( @40/(byte*) print_char_cursor#50 )
  (byte*) print_line_cursor#13 ← phi( @40/(byte*) print_line_cursor#12 )
  (byte*) print_screen#5 ← phi( @40/(byte*) print_screen#6 )
  (word) rem16u#23 ← phi( @40/(word) rem16u#25 )
  (word) main::wavelength#0 ← (byte/signed byte/word/signed word/dword/signed dword) 120
  (signed word[120]) main::sintab1#0 ← { fill( 120, 0) }
  (signed word*) sin16s_gen::sintab#1 ← (signed word[120]) main::sintab1#0
  (word) sin16s_gen::wavelength#0 ← (word) main::wavelength#0
  call sin16s_gen 
  to:main::@5
main::@5: scope:[main]  from main
  (word) main::wavelength#8 ← phi( main/(word) main::wavelength#0 )
  (byte*) print_char_cursor#47 ← phi( main/(byte*) print_char_cursor#53 )
  (byte*) print_line_cursor#10 ← phi( main/(byte*) print_line_cursor#13 )
  (byte*) print_screen#4 ← phi( main/(byte*) print_screen#5 )
  (word) rem16u#17 ← phi( main/(word) rem16u#7 )
  (word) rem16u#8 ← (word) rem16u#17
  call print_cls 
  to:main::@6
main::@6: scope:[main]  from main::@5
  (word) rem16u#35 ← phi( main::@5/(word) rem16u#8 )
  (word) main::wavelength#6 ← phi( main::@5/(word) main::wavelength#8 )
  (byte*) print_char_cursor#36 ← phi( main::@5/(byte*) print_char_cursor#15 )
  (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#16 ← (byte*) print_char_cursor#36
  (signed word*) main::st1#0 ← (signed word[120]) main::sintab1#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#32 ← phi( main::@6/(word) rem16u#35 main::@8/(word) rem16u#24 )
  (word) main::wavelength#4 ← phi( main::@6/(word) main::wavelength#6 main::@8/(word) main::wavelength#1 )
  (byte*) print_char_cursor#54 ← phi( main::@6/(byte*) print_char_cursor#16 main::@8/(byte*) print_char_cursor#18 )
  (signed word*) main::st1#2 ← phi( main::@6/(signed word*) main::st1#0 main::@8/(signed word*) main::st1#1 )
  (signed word) main::sw#0 ← *((signed word*) main::st1#2)
  (bool~) main::$2 ← (signed word) main::sw#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) main::$3 ← ! (bool~) main::$2
  if((bool~) main::$3) 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#30 ← phi( main::@1/(word) rem16u#32 main::@9/(word) rem16u#33 )
  (word) main::wavelength#3 ← phi( main::@1/(word) main::wavelength#4 main::@9/(word) main::wavelength#5 )
  (signed word*) main::st1#5 ← phi( main::@1/(signed word*) main::st1#2 main::@9/(signed word*) main::st1#6 )
  (byte*) print_char_cursor#48 ← phi( main::@1/(byte*) print_char_cursor#54 main::@9/(byte*) print_char_cursor#19 )
  (signed word) main::sw#1 ← phi( main::@1/(signed word) main::sw#0 main::@9/(signed word) main::sw#2 )
  (signed word) print_sword::w#1 ← (signed word) main::sw#1
  call print_sword 
  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#27 ← phi( main::@2/(word) rem16u#30 )
  (word) main::wavelength#2 ← phi( main::@2/(word) main::wavelength#3 )
  (signed word*) main::st1#4 ← phi( main::@2/(signed word*) main::st1#5 )
  (byte*) print_char_cursor#37 ← phi( main::@2/(byte*) print_char_cursor#5 )
  (byte*) print_char_cursor#17 ← (byte*) print_char_cursor#37
  (byte*) print_str::str#1 ← (const string) 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#24 ← phi( main::@7/(word) rem16u#27 )
  (word) main::wavelength#1 ← phi( main::@7/(word) main::wavelength#2 )
  (signed word*) main::st1#3 ← phi( main::@7/(signed word*) main::st1#4 )
  (byte*) print_char_cursor#38 ← phi( main::@7/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#38
  (signed word*~) main::$7 ← (signed word*) main::st1#3 + (byte/signed byte/word/signed word/dword/signed dword) 2
  (signed word*) main::st1#1 ← (signed word*~) main::$7
  (word/signed dword/dword~) main::$8 ← (word) main::wavelength#1 * (byte/signed byte/word/signed word/dword/signed dword) 2
  (signed word*~) main::$9 ← (signed word[120]) main::sintab1#0 + (word/signed dword/dword~) main::$8
  (bool~) main::$10 ← (signed word*) main::st1#1 < (signed word*~) main::$9
  if((bool~) main::$10) 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#36 ← phi( main::@1/(word) rem16u#32 )
  (word) main::wavelength#7 ← phi( main::@1/(word) main::wavelength#4 )
  (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#49 ← phi( main::@1/(byte*) print_char_cursor#54 )
  (byte*) print_str::str#2 ← (const string) 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#33 ← phi( main::@3/(word) rem16u#36 )
  (word) main::wavelength#5 ← phi( main::@3/(word) main::wavelength#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#39 ← phi( main::@3/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#19 ← (byte*) print_char_cursor#39
  to:main::@2
main::@return: scope:[main]  from main::@8
  (byte*) print_char_cursor#40 ← phi( main::@8/(byte*) print_char_cursor#18 )
  (byte*) print_line_cursor#8 ← phi( main::@8/(byte*) print_line_cursor#11 )
  (word) rem16u#18 ← phi( main::@8/(word) rem16u#24 )
  (word) rem16u#9 ← (word) rem16u#18
  (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#8
  (byte*) print_char_cursor#20 ← (byte*) print_char_cursor#40
  return 
  to:@return
@40: scope:[]  from @32
  (byte*) print_screen#6 ← phi( @32/(byte*) print_screen#7 )
  (byte*) print_char_cursor#50 ← phi( @32/(byte*) print_char_cursor#55 )
  (byte*) print_line_cursor#12 ← phi( @32/(byte*) print_line_cursor#15 )
  (word) rem16u#25 ← phi( @32/(word) rem16u#28 )
  call main 
  to:@41
@41: scope:[]  from @40
  (byte*) print_char_cursor#41 ← phi( @40/(byte*) print_char_cursor#20 )
  (byte*) print_line_cursor#9 ← phi( @40/(byte*) print_line_cursor#4 )
  (word) rem16u#19 ← phi( @40/(word) rem16u#9 )
  (word) rem16u#10 ← (word) rem16u#19
  (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#9
  (byte*) print_char_cursor#21 ← (byte*) print_char_cursor#41
  to:@end
@end: scope:[]  from @41

SYMBOL TABLE SSA
(const string) $0 = (string) "0123456789abcdef"
(label) @13
(label) @2
(label) @20
(label) @32
(label) @40
(label) @41
(label) @5
(label) @6
(label) @begin
(label) @end
(word) PI2_u4f12
(word) PI2_u4f12#0
(dword) PI2_u4f28
(dword) PI2_u4f28#0
(word) PI_HALF_u4f12
(word) PI_HALF_u4f12#0
(dword) PI_HALF_u4f28
(dword) PI_HALF_u4f28#0
(word) PI_u4f12
(word) PI_u4f12#0
(dword) PI_u4f28
(dword) PI_u4f28#0
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(word~) div32u16u::$0
(word~) div32u16u::$1
(word~) div32u16u::$2
(word~) div32u16u::$3
(label) div32u16u::@2
(label) div32u16u::@3
(label) div32u16u::@return
(dword) div32u16u::dividend
(dword) div32u16u::dividend#0
(dword) div32u16u::dividend#1
(dword) div32u16u::dividend#2
(word) div32u16u::divisor
(word) div32u16u::divisor#0
(word) div32u16u::divisor#1
(word) div32u16u::divisor#2
(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
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(word~) divr16u::$0
(byte~) divr16u::$1
(word~) divr16u::$10
(bool~) divr16u::$11
(byte~) divr16u::$2
(bool~) divr16u::$3
(bool~) divr16u::$4
(word/dword~) 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()
(bool~) main::$10
(bool~) main::$2
(bool~) main::$3
(signed word*~) main::$7
(word/signed dword/dword~) main::$8
(signed word*~) main::$9
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(signed word[120]) main::sintab1
(signed word[120]) main::sintab1#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
(const string) main::str = (string) "   @"
(const string) main::str1 = (string) " @"
(signed word) main::sw
(signed word) main::sw#0
(signed word) main::sw#1
(signed word) main::sw#2
(signed word) main::sw#3
(word) main::wavelength
(word) main::wavelength#0
(word) main::wavelength#1
(word) main::wavelength#2
(word) main::wavelength#3
(word) main::wavelength#4
(word) main::wavelength#5
(word) main::wavelength#6
(word) main::wavelength#7
(word) main::wavelength#8
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(bool~) mul16u::$0
(byte/word~) 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::@7
(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::@2
(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#2
(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#2
(byte) mulu16_sel::select#3
(byte) mulu16_sel::select#4
(byte) mulu16_sel::select#5
(byte) mulu16_sel::select#6
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0
(word) mulu16_sel::v1#1
(word) mulu16_sel::v1#2
(word) mulu16_sel::v1#3
(word) mulu16_sel::v1#4
(word) mulu16_sel::v1#5
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0
(word) mulu16_sel::v2#1
(word) mulu16_sel::v2#2
(word) mulu16_sel::v2#3
(word) mulu16_sel::v2#4
(word) mulu16_sel::v2#5
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0
(byte~) print_byte::$2
(label) print_byte::@1
(label) print_byte::@2
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0
(byte) print_byte::b#1
(byte) print_byte::b#2
(byte) print_byte::b#3
(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_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#6
(byte*) print_char_cursor#7
(byte*) print_char_cursor#8
(byte*) print_char_cursor#9
(void()) print_cls()
(byte*~) print_cls::$0
(bool~) print_cls::$1
(label) print_cls::@1
(label) print_cls::@2
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#0
(byte*) print_cls::sc#1
(byte*) print_cls::sc#2
(byte[]) print_hextab
(byte[]) print_hextab#0
(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
(byte*) print_screen#7
(void()) print_str((byte*) print_str::str)
(bool~) print_str::$0
(label) print_str::@1
(label) print_str::@2
(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
(void()) print_sword((signed word) print_sword::w)
(bool~) print_sword::$0
(bool~) print_sword::$1
(signed word~) print_sword::$3
(word~) print_sword::$4
(label) print_sword::@1
(label) print_sword::@2
(label) print_sword::@3
(label) print_sword::@4
(label) print_sword::@return
(signed word) print_sword::w
(signed word) print_sword::w#0
(signed word) print_sword::w#1
(signed word) print_sword::w#2
(signed word) print_sword::w#3
(signed word) print_sword::w#4
(signed word) print_sword::w#5
(void()) print_word((word) print_word::w)
(byte~) print_word::$0
(byte~) print_word::$2
(label) print_word::@1
(label) print_word::@2
(label) print_word::@return
(word) print_word::w
(word) print_word::w#0
(word) print_word::w#1
(word) print_word::w#2
(signed word) rem16s
(signed word) rem16s#0
(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#4
(word) rem16u#5
(word) rem16u#6
(word) rem16u#7
(word) rem16u#8
(word) rem16u#9
(signed byte) rem8s
(signed byte) rem8s#0
(byte) rem8u
(byte) rem8u#0
(signed word()) sin16s((dword) sin16s::x)
(bool~) sin16s::$0
(bool~) sin16s::$1
(word/signed word/dword/signed dword~) sin16s::$10
(word~) sin16s::$11
(word~) sin16s::$12
(word~) sin16s::$13
(word~) sin16s::$14
(word~) sin16s::$15
(word~) sin16s::$16
(signed word~) sin16s::$17
(bool~) sin16s::$18
(bool~) sin16s::$19
(dword~) sin16s::$2
(signed word~) sin16s::$20
(signed word~) sin16s::$21
(bool~) sin16s::$3
(bool~) sin16s::$4
(dword~) sin16s::$5
(dword~) sin16s::$6
(word~) sin16s::$7
(word~) sin16s::$8
(word~) sin16s::$9
(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::@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
(signed word~) sin16s_gen::$1
(signed word*~) sin16s_gen::$2
(dword~) sin16s_gen::$3
(bool~) sin16s_gen::$4
(label) sin16s_gen::@1
(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
(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
(dword) sin16s_gen::step
(dword) sin16s_gen::step#0
(dword) sin16s_gen::step#1
(dword) sin16s_gen::step#2
(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
(dword) sin16s_gen::x
(dword) sin16s_gen::x#0
(dword) sin16s_gen::x#1
(dword) sin16s_gen::x#2
(dword) sin16s_gen::x#3

Inversing boolean not [11] (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [10] (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [19] (bool~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from [18] (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2
Inversing boolean not [79] (bool~) mul16u::$3 ← (byte/word~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [78] (bool~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [132] (bool~) sin16s::$1 ← (dword) sin16s::x#3 < (dword) PI_u4f28#0 from [131] (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (dword) PI_u4f28#0
Inversing boolean not [136] (bool~) sin16s::$4 ← (dword) sin16s::x#4 < (dword) PI_HALF_u4f28#0 from [135] (bool~) sin16s::$3 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0
Inversing boolean not [196] (bool~) sin16s::$19 ← (byte) sin16s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [195] (bool~) sin16s::$18 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [240] (bool~) print_sword::$1 ← (signed word) print_sword::w#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [239] (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [325] (bool~) main::$3 ← (signed word) main::sw#0 < (byte/signed byte/word/signed word/dword/signed dword) 0 from [324] (bool~) main::$2 ← (signed word) main::sw#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7 
Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#8 
Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 
Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#7 
Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 
Alias (word) divr16u::divisor#4 = (word) divr16u::divisor#5 
Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 
Alias (word) divr16u::rem#1 = (word/dword~) divr16u::$5 
Alias (word) divr16u::rem#6 = (word) divr16u::rem#8 
Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#3 
Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 
Alias (word) divr16u::rem#2 = (word~) divr16u::$10 
Alias (word) divr16u::rem#11 = (word) divr16u::rem#9 
Alias (word) divr16u::return#0 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#4 (word) divr16u::return#1 
Alias (word) rem16u#1 = (word) rem16u#11 (word) rem16u#2 
Alias (word) divr16u::dividend#1 = (word~) div32u16u::$0 
Alias (word) divr16u::return#2 = (word) divr16u::return#5 
Alias (dword) div32u16u::dividend#1 = (dword) div32u16u::dividend#2 
Alias (word) div32u16u::divisor#1 = (word) div32u16u::divisor#2 
Alias (word) rem16u#12 = (word) rem16u#3 
Alias (word) div32u16u::quotient_hi#0 = (word~) div32u16u::$1 (word) div32u16u::quotient_hi#1 
Alias (word) divr16u::dividend#2 = (word~) div32u16u::$2 
Alias (word) divr16u::return#3 = (word) divr16u::return#6 
Alias (word) rem16u#13 = (word) rem16u#4 (word) rem16u#14 (word) rem16u#5 
Alias (word) div32u16u::quotient_lo#0 = (word~) div32u16u::$3 
Alias (dword) div32u16u::return#0 = (dword) div32u16u::quotient#0 (dword) div32u16u::return#3 (dword) div32u16u::return#1 
Alias (word) rem16u#0 = (word) rem16u#37 (word) rem16u#34 (word) rem16u#31 (word) rem16u#29 (word) rem16u#28 (word) rem16u#25 
Alias (word) mul16u::a#2 = (word) mul16u::a#3 (word) mul16u::a#6 
Alias (dword) mul16u::mb#3 = (dword) mul16u::mb#4 (dword) mul16u::mb#5 
Alias (dword) mul16u::res#2 = (dword) mul16u::res#5 (dword) mul16u::res#4 (dword) mul16u::return#0 (dword) mul16u::res#3 (dword) mul16u::return#3 (dword) mul16u::return#1 
Alias (word) mul16u::a#0 = (word~) mul16u::$5 
Alias (dword) mul16u::mb#1 = (dword~) mul16u::$6 
Alias (dword) mul16u::res#1 = (dword~) mul16u::$4 
Alias (dword) div32u16u::return#2 = (dword) div32u16u::return#4 
Alias (signed word*) sin16s_gen::sintab#4 = (signed word*) sin16s_gen::sintab#5 
Alias (word) sin16s_gen::wavelength#1 = (word) sin16s_gen::wavelength#4 
Alias (word) rem16u#15 = (word) rem16u#6 
Alias (dword) sin16s_gen::step#0 = (dword~) sin16s_gen::$0 
Alias (signed word) sin16s::return#0 = (signed word) sin16s::return#3 
Alias (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#3 
Alias (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#3 
Alias (dword) sin16s_gen::step#1 = (dword) sin16s_gen::step#2 
Alias (word) sin16s_gen::i#2 = (word) sin16s_gen::i#3 
Alias (word) sin16s_gen::wavelength#2 = (word) sin16s_gen::wavelength#3 
Alias (word) rem16u#16 = (word) rem16u#22 (word) rem16u#26 (word) rem16u#7 
Alias (signed word*) sin16s_gen::sintab#0 = (signed word*~) sin16s_gen::$2 
Alias (dword) sin16s_gen::x#1 = (dword~) sin16s_gen::$3 
Alias (dword) sin16s::x#3 = (dword) sin16s::x#5 
Alias (dword) sin16s::x#1 = (dword~) sin16s::$2 
Alias (word) sin16s::x1#0 = (word~) sin16s::$7 (word) sin16s::x1#1 (word) sin16s::x1#4 (word) sin16s::x1#2 (word) sin16s::x1#3 
Alias (word) mulu16_sel::return#0 = (word) mulu16_sel::return#7 
Alias (byte) sin16s::isUpper#2 = (byte) sin16s::isUpper#6 (byte) sin16s::isUpper#7 (byte) sin16s::isUpper#5 (byte) sin16s::isUpper#4 (byte) sin16s::isUpper#3 
Alias (word) sin16s::x2#0 = (word~) sin16s::$8 
Alias (word) mulu16_sel::return#1 = (word) mulu16_sel::return#8 
Alias (word) sin16s::x3#0 = (word~) sin16s::$9 (word) sin16s::x3#1 
Alias (word) mulu16_sel::v2#2 = (word/signed word/dword/signed dword~) sin16s::$10 
Alias (word) mulu16_sel::return#2 = (word) mulu16_sel::return#9 
Alias (word) sin16s::x3_6#0 = (word~) sin16s::$11 
Alias (word) sin16s::usinx#0 = (word~) sin16s::$12 (word) sin16s::usinx#4 (word) sin16s::usinx#2 
Alias (word) mulu16_sel::return#10 = (word) mulu16_sel::return#3 
Alias (word) sin16s::x4#0 = (word~) sin16s::$13 
Alias (word) mulu16_sel::return#11 = (word) mulu16_sel::return#4 
Alias (word) sin16s::x5#0 = (word~) sin16s::$14 
Alias (word) sin16s::x5_128#0 = (word~) sin16s::$15 
Alias (word) sin16s::usinx#1 = (word~) sin16s::$16 (word) sin16s::usinx#3 
Alias (signed word) sin16s::sinx#0 = (signed word~) sin16s::$17 
Alias (dword) sin16s::x#4 = (dword) sin16s::x#7 
Alias (byte) sin16s::isUpper#8 = (byte) sin16s::isUpper#9 
Alias (dword) sin16s::x#2 = (dword~) sin16s::$5 
Alias (signed word) sin16s::return#1 = (signed word) sin16s::sinx#2 (signed word) sin16s::return#4 (signed word) sin16s::return#2 
Alias (signed word) sin16s::sinx#1 = (signed word~) sin16s::$21 
Alias (dword) mul16u::return#2 = (dword) mul16u::return#4 
Alias (byte) mulu16_sel::select#5 = (byte) mulu16_sel::select#6 
Alias (word) mulu16_sel::return#12 = (word) mulu16_sel::return#5 (word~) mulu16_sel::$2 (word) mulu16_sel::return#6 
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#15 (byte*) print_char_cursor#55 (byte*) print_screen#7 (byte*) print_line_cursor#12 (byte*) print_char_cursor#50 (byte*) print_screen#6 
Alias (byte*) print_str::str#3 = (byte*) print_str::str#4 
Alias (byte*) print_char_cursor#2 = (byte*) print_char_cursor#22 (byte*) print_char_cursor#42 (byte*) print_char_cursor#23 
Alias (word) print_word::w#0 = (word~) print_sword::$4 
Alias (byte*) print_char_cursor#24 = (byte*) print_char_cursor#3 (byte*) print_char_cursor#26 (byte*) print_char_cursor#5 
Alias (byte*) print_char_cursor#44 = (byte*) print_char_cursor#52 
Alias (signed word) print_sword::w#2 = (signed word) print_sword::w#5 (signed word) print_sword::w#4 
Alias (byte*) print_char_cursor#25 = (byte*) print_char_cursor#4 
Alias (signed word) print_sword::w#0 = (signed word~) print_sword::$3 
Alias (byte) print_byte::b#0 = (byte~) print_word::$0 
Alias (word) print_word::w#1 = (word) print_word::w#2 
Alias (byte*) print_char_cursor#27 = (byte*) print_char_cursor#6 
Alias (byte) print_byte::b#1 = (byte~) print_word::$2 
Alias (byte*) print_char_cursor#28 = (byte*) print_char_cursor#7 (byte*) print_char_cursor#29 (byte*) print_char_cursor#8 
Alias (byte) print_byte::b#2 = (byte) print_byte::b#3 
Alias (byte*) print_char_cursor#30 = (byte*) print_char_cursor#9 
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#31 (byte*) print_char_cursor#32 (byte*) print_char_cursor#11 
Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#34 (byte*) print_char_cursor#13 
Alias (byte*) print_line_cursor#1 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_char_cursor#14 (byte*) print_line_cursor#6 (byte*) print_char_cursor#35 (byte*) print_line_cursor#2 (byte*) print_char_cursor#15 
Alias (byte*) print_screen#4 = (byte*) print_screen#5 
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#13 
Alias (byte*) print_char_cursor#47 = (byte*) print_char_cursor#53 
Alias (word) main::wavelength#0 = (word) main::wavelength#8 (word) main::wavelength#6 
Alias (word) rem16u#17 = (word) rem16u#8 (word) rem16u#35 
Alias (byte*) print_line_cursor#3 = (byte*) print_line_cursor#7 
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#36 
Alias (signed word[120]) main::sintab1#0 = (signed word*) main::st1#0 
Alias (signed word*) main::st1#3 = (signed word*) main::st1#4 (signed word*) main::st1#5 
Alias (word) main::wavelength#1 = (word) main::wavelength#2 (word) main::wavelength#3 
Alias (word) rem16u#18 = (word) rem16u#27 (word) rem16u#30 (word) rem16u#24 (word) rem16u#9 
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#14 (byte*) print_line_cursor#16 (byte*) print_line_cursor#8 (byte*) print_line_cursor#4 
Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#37 
Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#38 (byte*) print_char_cursor#40 (byte*) print_char_cursor#20 
Alias (signed word*) main::st1#1 = (signed word*~) main::$7 
Alias (byte*) print_char_cursor#49 = (byte*) print_char_cursor#54 
Alias (signed word) main::sw#0 = (signed word) main::sw#3 (signed word) main::sw#2 
Alias (signed word*) main::st1#2 = (signed word*) main::st1#7 (signed word*) main::st1#6 
Alias (word) main::wavelength#4 = (word) main::wavelength#7 (word) main::wavelength#5 
Alias (word) rem16u#32 = (word) rem16u#36 (word) rem16u#33 
Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#19 (byte*) print_line_cursor#18 
Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#39 
Alias (word) rem16u#10 = (word) rem16u#19 
Alias (byte*) print_line_cursor#5 = (byte*) print_line_cursor#9 
Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#41 
Successful SSA optimization Pass2AliasElimination
Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#4 
Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 
Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#4 (word) divr16u::divisor#7 
Alias (byte) divr16u::i#2 = (byte) divr16u::i#3 (byte) divr16u::i#5 
Alias (word) divr16u::dividend#0 = (word) divr16u::dividend#6 
Alias (word) mul16u::a#2 = (word) mul16u::a#4 
Alias (dword) mul16u::mb#2 = (dword) mul16u::mb#3 
Alias (byte) sin16s::isUpper#2 = (byte) sin16s::isUpper#8 
Alias (signed word) main::sw#0 = (signed word) main::sw#1 
Alias (signed word*) main::st1#2 = (signed word*) main::st1#3 
Alias (word) main::wavelength#1 = (word) main::wavelength#4 
Alias (word) rem16u#18 = (word) rem16u#32 
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#17 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (word) divr16u::divisor#2
Self Phi Eliminated (dword) sin16s_gen::step#1
Self Phi Eliminated (word) sin16s_gen::wavelength#2
Self Phi Eliminated (word) rem16u#16
Self Phi Eliminated (byte*) print_line_cursor#1
Self Phi Eliminated (word) main::wavelength#1
Self Phi Eliminated (word) rem16u#18
Self Phi Eliminated (byte*) print_line_cursor#11
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (word) divr16u::divisor#2 (word) divr16u::divisor#6
Redundant Phi (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0
Redundant Phi (word) div32u16u::divisor#1 (word) div32u16u::divisor#0
Redundant Phi (word) rem16u#20 (word) rem16u#21
Redundant Phi (word) rem16u#12 (word) rem16u#1
Redundant Phi (word) rem16u#13 (word) rem16u#1
Redundant Phi (word) mul16u::b#1 (word) mul16u::b#0
Redundant Phi (word) mul16u::a#5 (word) mul16u::a#1
Redundant Phi (word) sin16s_gen::wavelength#1 (word) sin16s_gen::wavelength#0
Redundant Phi (word) rem16u#21 (word) rem16u#23
Redundant Phi (signed word*) sin16s_gen::sintab#4 (signed word*) sin16s_gen::sintab#1
Redundant Phi (word) rem16u#15 (word) rem16u#13
Redundant Phi (dword) sin16s_gen::step#1 (dword) sin16s_gen::step#0
Redundant Phi (word) sin16s_gen::wavelength#2 (word) sin16s_gen::wavelength#1
Redundant Phi (word) rem16u#16 (word) rem16u#15
Redundant Phi (dword) sin16s::x#3 (dword) sin16s::x#0
Redundant Phi (signed word) print_sword::w#2 (signed word) print_sword::w#1
Redundant Phi (byte*) print_char_cursor#44 (byte*) print_char_cursor#48
Redundant Phi (byte*) print_char_cursor#24 (byte*) print_char_cursor#28
Redundant Phi (byte*) print_char_cursor#25 (byte*) print_char_cursor#12
Redundant Phi (word) print_word::w#1 (word) print_word::w#0
Redundant Phi (byte*) print_char_cursor#45 (byte*) print_char_cursor#43
Redundant Phi (byte*) print_char_cursor#27 (byte*) print_char_cursor#10
Redundant Phi (byte*) print_char_cursor#28 (byte*) print_char_cursor#10
Redundant Phi (byte*) print_char_cursor#30 (byte*) print_char_cursor#12
Redundant Phi (byte*) print_char_cursor#10 (byte*) print_char_cursor#12
Redundant Phi (byte*) print_screen#1 (byte*) print_screen#4
Redundant Phi (byte*) print_line_cursor#1 (byte*) print_screen#1
Redundant Phi (word) rem16u#23 (word) rem16u#0
Redundant Phi (byte*) print_screen#4 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_char_cursor#47 (byte*) print_line_cursor#0
Redundant Phi (word) rem16u#17 (word) rem16u#16
Redundant Phi (byte*) print_line_cursor#3 (byte*) print_line_cursor#1
Redundant Phi (byte*) print_char_cursor#16 (byte*) print_line_cursor#1
Redundant Phi (word) main::wavelength#1 (word) main::wavelength#0
Redundant Phi (word) rem16u#18 (word) rem16u#17
Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#3
Redundant Phi (byte*) print_char_cursor#17 (byte*) print_char_cursor#24
Redundant Phi (byte*) print_char_cursor#18 (byte*) print_char_cursor#2
Redundant Phi (byte*) print_char_cursor#19 (byte*) print_char_cursor#2
Redundant Phi (word) rem16u#10 (word) rem16u#18
Redundant Phi (byte*) print_line_cursor#5 (byte*) print_line_cursor#11
Redundant Phi (byte*) print_char_cursor#21 (byte*) print_char_cursor#18
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) divr16u::$4 [12] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
Simple Condition (bool~) divr16u::$9 [20] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3
Simple Condition (bool~) divr16u::$11 [27] if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1
Simple Condition (bool~) mul16u::$0 [75] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
Simple Condition (bool~) mul16u::$3 [80] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
Simple Condition (bool~) sin16s_gen::$4 [125] if((word) sin16s_gen::i#1<(word) sin16s_gen::wavelength#0) goto sin16s_gen::@1
Simple Condition (bool~) sin16s::$1 [133] if((dword) sin16s::x#0<(dword) PI_u4f28#0) goto sin16s::@1
Simple Condition (bool~) sin16s::$4 [137] if((dword) sin16s::x#4<(dword) PI_HALF_u4f28#0) goto sin16s::@2
Simple Condition (bool~) sin16s::$19 [197] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@3
Simple Condition (bool~) print_str::$0 [230] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_sword::$1 [241] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1
Simple Condition (bool~) print_cls::$1 [301] if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1
Simple Condition (bool~) main::$3 [326] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2
Simple Condition (bool~) main::$10 [341] if((signed word*) main::st1#1<(signed word*~) main::$9) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) rem8u#0 = 0
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 signed byte) rem8s#0 = 0
Constant (const signed word) rem16s#0 = 0
Constant (const dword) mul16u::res#0 = 0
Constant (const dword) PI2_u4f28#0 = 1686629713
Constant (const dword) PI_u4f28#0 = 843314857
Constant (const dword) PI_HALF_u4f28#0 = 421657428
Constant (const word) PI2_u4f12#0 = 25736
Constant (const word) PI_u4f12#0 = 12868
Constant (const word) PI_HALF_u4f12#0 = 6434
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 = 65536/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 byte*) print_line_cursor#0 = ((byte*))1024
Constant (const byte) print_char::ch#0 = '-'
Constant (const byte[]) print_hextab#0 = $0
Constant (const word) main::wavelength#0 = 120
Constant (const signed word[120]) main::sintab1#0 = { fill( 120, 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 dword) div32u16u::dividend#0 = PI2_u4f28#0
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000
Constant (const signed word*) sin16s_gen::sintab#1 = main::sintab1#0
Constant (const word) sin16s_gen::wavelength#0 = main::wavelength#0
Constant (const word/signed dword/dword) main::$8 = main::wavelength#0*2
Successful SSA optimization Pass2ConstantIdentification
Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0
Constant (const word) divr16u::dividend#2 = <div32u16u::dividend#0
Constant (const word) div32u16u::divisor#0 = sin16s_gen::wavelength#0
Constant (const signed word*) main::$9 = main::sintab1#0+main::$8
Successful SSA optimization Pass2ConstantIdentification
Constant (const word) divr16u::divisor#0 = div32u16u::divisor#0
Constant (const word) divr16u::divisor#1 = div32u16u::divisor#0
Successful SSA optimization Pass2ConstantIdentification
Fixing inline constructor with div32u16u::$4 ← div32u16u::quotient_hi#0 dw= div32u16u::quotient_lo#0
Successful SSA optimization Pass2FixInlineConstructors
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (signed word) sin16s::sinx#0 ← ((signed word)) (word) sin16s::usinx#1
Eliminating Noop Cast (signed word~) sin16s::$20 ← ((signed word)) (word) sin16s::usinx#1
Eliminating Noop Cast (word) print_word::w#0 ← ((word)) (signed word) print_sword::w#3
Successful SSA optimization Pass2NopCastElimination
Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++
Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16
Culled Empty Block (label) @2
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) mul16u::@3
Culled Empty Block (label) @13
Culled Empty Block (label) @20
Culled Empty Block (label) print_sword::@3
Culled Empty Block (label) print_word::@2
Culled Empty Block (label) @32
Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@9
Culled Empty Block (label) @41
Successful SSA optimization Pass2CullEmptyBlocks
Alias (dword) div32u16u::return#0 = (dword~) div32u16u::$4 
Successful SSA optimization Pass2AliasElimination
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 word) divr16u::dividend#1
Inlining constant with var siblings (const word) divr16u::dividend#2
Inlining constant with var siblings (const word) divr16u::divisor#0
Inlining constant with var siblings (const word) divr16u::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*) 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#0
Inlining constant with var siblings (const byte*) print_cls::sc#0
Constant inlined divr16u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_cls::$0 = (const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000
Constant inlined divr16u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sin16s_gen::wavelength#0 = (const word) main::wavelength#0
Constant inlined div32u16u::dividend#0 = (const dword) PI2_u4f28#0
Constant inlined sin16s::isUpper#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined $0 = (const byte[]) print_hextab#0
Constant inlined mulu16_sel::select#4 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined divr16u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulu16_sel::select#2 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulu16_sel::select#3 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16u::res#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulu16_sel::select#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sin16s::isUpper#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulu16_sel::select#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined divr16u::divisor#1 = (const word) main::wavelength#0
Constant inlined divr16u::divisor#0 = (const word) main::wavelength#0
Constant inlined sin16s_gen::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_cls::sc#0 = (const byte*) print_line_cursor#0
Constant inlined divr16u::dividend#1 = >(const dword) PI2_u4f28#0
Constant inlined divr16u::dividend#2 = <(const dword) PI2_u4f28#0
Constant inlined sin16s_gen::sintab#1 = (const signed word[120]) main::sintab1#0
Constant inlined mulu16_sel::v2#2 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6
Constant inlined print_char::ch#0 = (byte) '-'
Constant inlined sin16s_gen::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#2 = (const string) main::str1
Constant inlined div32u16u::divisor#0 = (const word) main::wavelength#0
Constant inlined print_str::str#1 = (const string) main::str
Constant inlined main::$9 = (const signed word[120]) main::sintab1#0+(const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined main::$8 = (const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2
Successful SSA optimization Pass2ConstantInlining
Identical Phi Values (word) divr16u::divisor#6 (const word) main::wavelength#0
Successful SSA optimization Pass2IdenticalPhiElimination
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)
Added new block during phi lifting print_sword::@5(between print_sword and print_sword::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Added new block during phi lifting sin16s_gen::@5(between sin16s_gen::@4 and sin16s_gen::@1)
Added new block during phi lifting sin16s::@13(between sin16s and sin16s::@1)
Fixing phi predecessor for sin16s::isUpper#2 to new block ( sin16s -> sin16s::@13 ) during phi lifting.
Added new block during phi lifting sin16s::@14(between sin16s::@1 and sin16s::@2)
Added new block during phi lifting sin16s::@15(between sin16s::@12 and sin16s::@3)
Added new block during phi lifting mul16u::@10(between mul16u::@2 and mul16u::@4)
Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u::@1)
Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2)
Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @40
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of sin16s_gen
Adding NOP phi() at start of div32u16u
CALL GRAPH
Calls in [] to main:2 
Calls in [main] to sin16s_gen:5 print_cls:7 print_str:12 print_sword:16 print_str:18 
Calls in [print_sword] to print_char:38 print_word:43 
Calls in [print_word] to print_byte:50 print_byte:54 
Calls in [print_byte] to print_char:61 print_char:66 
Calls in [sin16s_gen] to div32u16u:80 sin16s:85 
Calls in [sin16s] to mulu16_sel:111 mulu16_sel:118 mulu16_sel:123 mulu16_sel:131 mulu16_sel:138 
Calls in [mulu16_sel] to mul16u:154 
Calls in [div32u16u] to divr16u:178 divr16u:183 

Created 37 initial phi equivalence classes
Coalesced [11] print_char_cursor#59 ← print_char_cursor#49
Coalesced [13] print_char_cursor#58 ← print_char_cursor#2
Coalesced [17] print_char_cursor#60 ← print_char_cursor#12
Coalesced [22] main::st1#8 ← main::st1#1
Coalesced [23] print_char_cursor#56 ← print_char_cursor#2
Coalesced (already) [24] print_char_cursor#57 ← print_char_cursor#49
Coalesced [26] print_str::str#6 ← print_str::str#5
Coalesced (already) [27] print_char_cursor#61 ← print_char_cursor#51
Coalesced [34] print_str::str#7 ← print_str::str#0
Coalesced [35] print_char_cursor#62 ← print_char_cursor#1
Coalesced [37] print_char_cursor#69 ← print_char_cursor#48
Coalesced [40] print_sword::w#7 ← print_sword::w#0
Coalesced [41] print_char_cursor#64 ← print_char_cursor#12
Coalesced [45] print_sword::w#6 ← print_sword::w#1
Coalesced (already) [46] print_char_cursor#63 ← print_char_cursor#48
Coalesced [48] print_byte::b#4 ← print_byte::b#0
Coalesced [49] print_char_cursor#65 ← print_char_cursor#43
Coalesced [52] print_byte::b#5 ← print_byte::b#1
Coalesced (already) [53] print_char_cursor#66 ← print_char_cursor#12
Coalesced [59] print_char::ch#4 ← print_char::ch#1
Coalesced (already) [60] print_char_cursor#67 ← print_char_cursor#46
Coalesced [64] print_char::ch#5 ← print_char::ch#2
Coalesced (already) [65] print_char_cursor#68 ← print_char_cursor#12
Coalesced [78] print_cls::sc#3 ← print_cls::sc#1
Coalesced [94] sin16s_gen::x#4 ← sin16s_gen::x#1
Coalesced [95] sin16s_gen::sintab#6 ← sin16s_gen::sintab#0
Coalesced [96] sin16s_gen::i#4 ← sin16s_gen::i#1
Coalesced [99] sin16s::x#9 ← sin16s::x#1
Coalesced [103] sin16s::x#11 ← sin16s::x#2
Coalesced [109] mulu16_sel::v1#8 ← mulu16_sel::v1#0
Coalesced [110] mulu16_sel::v2#8 ← mulu16_sel::v2#0
Coalesced [116] mulu16_sel::v1#9 ← mulu16_sel::v1#1
Coalesced [117] mulu16_sel::v2#9 ← mulu16_sel::v2#1
Coalesced [122] mulu16_sel::v1#10 ← mulu16_sel::v1#2
Coalesced [129] mulu16_sel::v1#6 ← mulu16_sel::v1#3
Coalesced [130] mulu16_sel::v2#6 ← mulu16_sel::v2#3
Coalesced [136] mulu16_sel::v1#7 ← mulu16_sel::v1#4
Coalesced [137] mulu16_sel::v2#7 ← mulu16_sel::v2#4
Coalesced [145] sin16s::return#6 ← sin16s::sinx#1
Coalesced [149] sin16s::x#10 ← sin16s::x#4
Coalesced [150] sin16s::x#8 ← sin16s::x#0
Coalesced [161] mul16u::a#7 ← mul16u::a#1
Coalesced [162] mul16u::mb#6 ← mul16u::mb#0
Coalesced [169] mul16u::res#9 ← mul16u::res#1
Coalesced [173] mul16u::a#8 ← mul16u::a#0
Coalesced [174] mul16u::res#7 ← mul16u::res#6
Coalesced [175] mul16u::mb#7 ← mul16u::mb#1
Coalesced (already) [176] mul16u::res#8 ← mul16u::res#2
Coalesced [182] divr16u::rem#12 ← divr16u::rem#4
Coalesced [189] divr16u::rem#13 ← divr16u::rem#10
Coalesced [190] divr16u::dividend#9 ← divr16u::dividend#5
Coalesced [197] divr16u::rem#16 ← divr16u::rem#1
Coalesced [204] divr16u::rem#18 ← divr16u::rem#2
Coalesced [205] divr16u::return#8 ← divr16u::quotient#2
Coalesced [211] divr16u::rem#14 ← divr16u::rem#11
Coalesced [212] divr16u::dividend#10 ← divr16u::dividend#0
Coalesced [213] divr16u::quotient#9 ← divr16u::return#0
Coalesced [214] divr16u::i#7 ← divr16u::i#1
Coalesced [215] divr16u::rem#17 ← divr16u::rem#6
Coalesced [216] divr16u::return#7 ← divr16u::quotient#1
Coalesced [217] divr16u::rem#15 ← divr16u::rem#0
Coalesced down to 23 phi equivalence classes
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@11
Culled Empty Block (label) print_sword::@5
Culled Empty Block (label) print_cls::@3
Culled Empty Block (label) sin16s_gen::@5
Culled Empty Block (label) sin16s::@14
Culled Empty Block (label) sin16s::@13
Culled Empty Block (label) mul16u::@10
Culled Empty Block (label) divr16u::@8
Culled Empty Block (label) divr16u::@10
Culled Empty Block (label) divr16u::@9
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @40
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of print_sword::@2
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of sin16s_gen
Adding NOP phi() at start of div32u16u

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


VARIABLE REGISTER WEIGHTS
(word) PI2_u4f12
(dword) PI2_u4f28
(word) PI_HALF_u4f12
(dword) PI_HALF_u4f28
(word) PI_u4f12
(dword) PI_u4f28
(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 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 1.3333333333333333
(dword) div32u16u::return#2 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 22.0
(byte~) divr16u::$2 22.0
(word) divr16u::dividend
(word) divr16u::dividend#0 2.75
(word) divr16u::dividend#3 5.0
(word) divr16u::dividend#5 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 16.5
(byte) divr16u::i#2 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 16.5
(word) divr16u::quotient#2 11.0
(word) divr16u::quotient#3 2.75
(word) divr16u::rem
(word) divr16u::rem#0 8.25
(word) divr16u::rem#1 22.0
(word) divr16u::rem#10 4.0
(word) divr16u::rem#11 11.666666666666666
(word) divr16u::rem#2 22.0
(word) divr16u::rem#4 4.0
(word) divr16u::rem#5 24.0
(word) divr16u::rem#6 11.0
(word) divr16u::return
(word) divr16u::return#0 5.285714285714286
(word) divr16u::return#2 4.0
(word) divr16u::return#3 4.0
(void()) main()
(signed word[120]) main::sintab1
(signed word*) main::st1
(signed word*) main::st1#1 16.5
(signed word*) main::st1#2 3.3000000000000003
(signed word) main::sw
(signed word) main::sw#0 6.6000000000000005
(word) main::wavelength
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte/word~) mul16u::$1 202.0
(word) mul16u::a
(word) mul16u::a#0 101.0
(word) mul16u::a#1 1.3333333333333333
(word) mul16u::a#2 67.66666666666666
(word) mul16u::b
(word) mul16u::b#0 4.0
(dword) mul16u::mb
(dword) mul16u::mb#0 4.0
(dword) mul16u::mb#1 202.0
(dword) mul16u::mb#2 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 202.0
(dword) mul16u::res#2 50.83333333333333
(dword) mul16u::res#6 101.0
(dword) mul16u::return
(dword) mul16u::return#2 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 4.0
(dword~) mulu16_sel::$1 4.0
(word) mulu16_sel::return
(word) mulu16_sel::return#0 4.0
(word) mulu16_sel::return#1 4.0
(word) mulu16_sel::return#10 4.0
(word) mulu16_sel::return#11 4.0
(word) mulu16_sel::return#12 1.714285714285714
(word) mulu16_sel::return#2 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 2.0
(word) mulu16_sel::v1#1 2.0
(word) mulu16_sel::v1#2 4.0
(word) mulu16_sel::v1#3 2.0
(word) mulu16_sel::v1#4 2.0
(word) mulu16_sel::v1#5 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 4.0
(word) mulu16_sel::v2#1 4.0
(word) mulu16_sel::v2#3 4.0
(word) mulu16_sel::v2#4 4.0
(word) mulu16_sel::v2#5 5.0
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 4.0
(byte~) print_byte::$2 4.0
(byte) print_byte::b
(byte) print_byte::b#0 4.0
(byte) print_byte::b#1 4.0
(byte) print_byte::b#2 2.0
(void()) print_char((byte) print_char::ch)
(byte) print_char::ch
(byte) print_char::ch#1 4.0
(byte) print_char::ch#2 4.0
(byte) print_char::ch#3 6.0
(byte*) print_char_cursor
(byte*) print_char_cursor#1 101.0
(byte*) print_char_cursor#12 1.1176470588235294
(byte*) print_char_cursor#2 40.875
(byte*) print_char_cursor#33 5.0
(byte*) print_char_cursor#43 3.0
(byte*) print_char_cursor#46 2.0
(byte*) print_char_cursor#48 6.5
(byte*) print_char_cursor#49 8.25
(byte*) print_char_cursor#51 24.0
(void()) print_cls()
(byte*) print_cls::sc
(byte*) print_cls::sc#1 16.5
(byte*) print_cls::sc#2 16.5
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_screen
(void()) print_str((byte*) print_str::str)
(byte*) print_str::str
(byte*) print_str::str#0 202.0
(byte*) print_str::str#3 101.5
(byte*) print_str::str#5 2.0
(void()) print_sword((signed word) print_sword::w)
(signed word) print_sword::w
(signed word) print_sword::w#0 4.0
(signed word) print_sword::w#1 4.25
(signed word) print_sword::w#3 1.3333333333333333
(void()) print_word((word) print_word::w)
(word) print_word::w
(signed word) rem16s
(word) rem16u
(word) rem16u#1 0.8
(signed byte) rem8s
(byte) rem8u
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$6 4.0
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 22.0
(signed word) sin16s::return#1 5.0
(signed word~) sin16s::return#5 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 0.3333333333333333
(word) sin16s::usinx#1 1.0
(dword) sin16s::x
(dword) sin16s::x#0 8.5
(dword) sin16s::x#1 4.0
(dword) sin16s::x#2 4.0
(dword) sin16s::x#4 5.0
(dword) sin16s::x#6 6.0
(word) sin16s::x1
(word) sin16s::x1#0 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 4.0
(word) sin16s::x3
(word) sin16s::x3#0 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 4.0
(word) sin16s::x4
(word) sin16s::x4#0 4.0
(word) sin16s::x5
(word) sin16s::x5#0 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 4.0
(void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength)
(signed word~) sin16s_gen::$1 22.0
(word) sin16s_gen::i
(word) sin16s_gen::i#1 16.5
(word) sin16s_gen::i#2 2.75
(signed word*) sin16s_gen::sintab
(signed word*) sin16s_gen::sintab#0 5.5
(signed word*) sin16s_gen::sintab#2 5.5
(dword) sin16s_gen::step
(dword) sin16s_gen::step#0 1.1818181818181819
(word) sin16s_gen::wavelength
(dword) sin16s_gen::x
(dword) sin16s_gen::x#1 7.333333333333333
(dword) sin16s_gen::x#2 4.714285714285714

Initial phi equivalence classes
[ main::st1#2 main::st1#1 ]
[ print_str::str#3 print_str::str#5 print_str::str#0 ]
[ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
[ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
[ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ]
[ print_cls::sc#2 print_cls::sc#1 ]
[ sin16s_gen::x#2 sin16s_gen::x#1 ]
[ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ]
[ sin16s_gen::i#2 sin16s_gen::i#1 ]
[ 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 ]
[ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ]
[ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
[ mulu16_sel::select#5 ]
[ 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 ]
Added variable main::sw#0 to zero page equivalence class [ main::sw#0 ]
Added variable print_byte::$0 to zero page equivalence class [ print_byte::$0 ]
Added variable print_byte::$2 to zero page equivalence class [ print_byte::$2 ]
Added variable div32u16u::return#2 to zero page equivalence class [ div32u16u::return#2 ]
Added variable sin16s_gen::step#0 to zero page equivalence class [ sin16s_gen::step#0 ]
Added variable sin16s::return#0 to zero page equivalence class [ sin16s::return#0 ]
Added variable sin16s_gen::$1 to zero page equivalence class [ sin16s_gen::$1 ]
Added variable sin16s::$6 to zero page equivalence class [ sin16s::$6 ]
Added variable sin16s::x1#0 to zero page equivalence class [ sin16s::x1#0 ]
Added variable mulu16_sel::return#0 to zero page equivalence class [ mulu16_sel::return#0 ]
Added variable sin16s::x2#0 to zero page equivalence class [ sin16s::x2#0 ]
Added variable mulu16_sel::return#1 to zero page equivalence class [ mulu16_sel::return#1 ]
Added variable sin16s::x3#0 to zero page equivalence class [ sin16s::x3#0 ]
Added variable mulu16_sel::return#2 to zero page equivalence class [ mulu16_sel::return#2 ]
Added variable sin16s::x3_6#0 to zero page equivalence class [ sin16s::x3_6#0 ]
Added variable sin16s::usinx#0 to zero page equivalence class [ sin16s::usinx#0 ]
Added variable mulu16_sel::return#10 to zero page equivalence class [ mulu16_sel::return#10 ]
Added variable sin16s::x4#0 to zero page equivalence class [ sin16s::x4#0 ]
Added variable mulu16_sel::return#11 to zero page equivalence class [ mulu16_sel::return#11 ]
Added variable sin16s::x5#0 to zero page equivalence class [ sin16s::x5#0 ]
Added variable sin16s::x5_128#0 to zero page equivalence class [ sin16s::x5_128#0 ]
Added variable sin16s::usinx#1 to zero page equivalence class [ sin16s::usinx#1 ]
Added variable mul16u::b#0 to zero page equivalence class [ mul16u::b#0 ]
Added variable mul16u::return#2 to zero page equivalence class [ mul16u::return#2 ]
Added variable mulu16_sel::$0 to zero page equivalence class [ mulu16_sel::$0 ]
Added variable mulu16_sel::$1 to zero page equivalence class [ mulu16_sel::$1 ]
Added variable mulu16_sel::return#12 to zero page equivalence class [ mulu16_sel::return#12 ]
Added variable mul16u::$1 to zero page equivalence class [ mul16u::$1 ]
Added variable divr16u::return#2 to zero page equivalence class [ divr16u::return#2 ]
Added variable div32u16u::quotient_hi#0 to zero page equivalence class [ div32u16u::quotient_hi#0 ]
Added variable divr16u::return#3 to zero page equivalence class [ divr16u::return#3 ]
Added variable div32u16u::quotient_lo#0 to zero page equivalence class [ div32u16u::quotient_lo#0 ]
Added variable div32u16u::return#0 to zero page equivalence class [ div32u16u::return#0 ]
Added variable divr16u::$1 to zero page equivalence class [ divr16u::$1 ]
Added variable divr16u::$2 to zero page equivalence class [ divr16u::$2 ]
Added variable rem16u#1 to zero page equivalence class [ rem16u#1 ]
Complete equivalence classes
[ main::st1#2 main::st1#1 ]
[ print_str::str#3 print_str::str#5 print_str::str#0 ]
[ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
[ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
[ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
[ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ]
[ print_cls::sc#2 print_cls::sc#1 ]
[ sin16s_gen::x#2 sin16s_gen::x#1 ]
[ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ]
[ sin16s_gen::i#2 sin16s_gen::i#1 ]
[ 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 ]
[ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ]
[ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
[ mulu16_sel::select#5 ]
[ 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 ]
[ main::sw#0 ]
[ print_byte::$0 ]
[ print_byte::$2 ]
[ div32u16u::return#2 ]
[ sin16s_gen::step#0 ]
[ sin16s::return#0 ]
[ sin16s_gen::$1 ]
[ sin16s::$6 ]
[ sin16s::x1#0 ]
[ mulu16_sel::return#0 ]
[ sin16s::x2#0 ]
[ mulu16_sel::return#1 ]
[ sin16s::x3#0 ]
[ mulu16_sel::return#2 ]
[ sin16s::x3_6#0 ]
[ sin16s::usinx#0 ]
[ mulu16_sel::return#10 ]
[ sin16s::x4#0 ]
[ mulu16_sel::return#11 ]
[ sin16s::x5#0 ]
[ sin16s::x5_128#0 ]
[ sin16s::usinx#1 ]
[ mul16u::b#0 ]
[ mul16u::return#2 ]
[ mulu16_sel::$0 ]
[ mulu16_sel::$1 ]
[ mulu16_sel::return#12 ]
[ 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 ]
Allocated zp ZP_WORD:2 [ main::st1#2 main::st1#1 ]
Allocated zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Allocated zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ]
Allocated zp ZP_BYTE:8 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Allocated zp ZP_BYTE:9 [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
Allocated zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ]
Allocated zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ]
Allocated zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ]
Allocated zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ]
Allocated zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ]
Allocated zp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Allocated zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ]
Allocated zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ]
Allocated zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ]
Allocated zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
Allocated zp ZP_BYTE:33 [ mulu16_sel::select#5 ]
Allocated zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
Allocated zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ]
Allocated zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
Allocated zp ZP_WORD:44 [ 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 ZP_WORD:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
Allocated zp ZP_WORD:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
Allocated zp ZP_BYTE:50 [ divr16u::i#2 divr16u::i#1 ]
Allocated zp ZP_WORD:51 [ main::sw#0 ]
Allocated zp ZP_BYTE:53 [ print_byte::$0 ]
Allocated zp ZP_BYTE:54 [ print_byte::$2 ]
Allocated zp ZP_DWORD:55 [ div32u16u::return#2 ]
Allocated zp ZP_DWORD:59 [ sin16s_gen::step#0 ]
Allocated zp ZP_WORD:63 [ sin16s::return#0 ]
Allocated zp ZP_WORD:65 [ sin16s_gen::$1 ]
Allocated zp ZP_DWORD:67 [ sin16s::$6 ]
Allocated zp ZP_WORD:71 [ sin16s::x1#0 ]
Allocated zp ZP_WORD:73 [ mulu16_sel::return#0 ]
Allocated zp ZP_WORD:75 [ sin16s::x2#0 ]
Allocated zp ZP_WORD:77 [ mulu16_sel::return#1 ]
Allocated zp ZP_WORD:79 [ sin16s::x3#0 ]
Allocated zp ZP_WORD:81 [ mulu16_sel::return#2 ]
Allocated zp ZP_WORD:83 [ sin16s::x3_6#0 ]
Allocated zp ZP_WORD:85 [ sin16s::usinx#0 ]
Allocated zp ZP_WORD:87 [ mulu16_sel::return#10 ]
Allocated zp ZP_WORD:89 [ sin16s::x4#0 ]
Allocated zp ZP_WORD:91 [ mulu16_sel::return#11 ]
Allocated zp ZP_WORD:93 [ sin16s::x5#0 ]
Allocated zp ZP_WORD:95 [ sin16s::x5_128#0 ]
Allocated zp ZP_WORD:97 [ sin16s::usinx#1 ]
Allocated zp ZP_WORD:99 [ mul16u::b#0 ]
Allocated zp ZP_DWORD:101 [ mul16u::return#2 ]
Allocated zp ZP_DWORD:105 [ mulu16_sel::$0 ]
Allocated zp ZP_DWORD:109 [ mulu16_sel::$1 ]
Allocated zp ZP_WORD:113 [ mulu16_sel::return#12 ]
Allocated zp ZP_BYTE:115 [ mul16u::$1 ]
Allocated zp ZP_WORD:116 [ divr16u::return#2 ]
Allocated zp ZP_WORD:118 [ div32u16u::quotient_hi#0 ]
Allocated zp ZP_WORD:120 [ divr16u::return#3 ]
Allocated zp ZP_WORD:122 [ div32u16u::quotient_lo#0 ]
Allocated zp ZP_DWORD:124 [ div32u16u::return#0 ]
Allocated zp ZP_BYTE:128 [ divr16u::$1 ]
Allocated zp ZP_BYTE:129 [ divr16u::$2 ]
Allocated zp ZP_WORD:130 [ rem16u#1 ]

INITIAL ASM
//SEG0 File Comments
// Generates a 16-bit signed sinus
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 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
  .label print_line_cursor = $400
  .label rem16u = $82
  .label print_char_cursor = $a
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @40 [phi:@begin->@40]
b40_from_bbegin:
  jmp b40
//SEG5 @40
b40:
//SEG6 [2] call main 
//SEG7 [4] phi from @40 to main [phi:@40->main]
main_from_b40:
  jsr main
//SEG8 [3] phi from @40 to @end [phi:@40->@end]
bend_from_b40:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
    .label wavelength = $78
    .label sw = $33
    .label st1 = 2
  //SEG11 [5] call sin16s_gen 
  //SEG12 [58] phi from main to sin16s_gen [phi:main->sin16s_gen]
  sin16s_gen_from_main:
    jsr sin16s_gen
  //SEG13 [6] phi from main to main::@5 [phi:main->main::@5]
  b5_from_main:
    jmp b5
  //SEG14 main::@5
  b5:
  //SEG15 [7] call print_cls 
  //SEG16 [52] phi from main::@5 to print_cls [phi:main::@5->print_cls]
  print_cls_from_b5:
    jsr print_cls
  //SEG17 [8] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
  b1_from_b5:
  //SEG18 [8] phi (byte*) print_char_cursor#49 = (const byte*) print_line_cursor#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta print_char_cursor
    lda #>print_line_cursor
    sta print_char_cursor+1
  //SEG19 [8] phi (signed word*) main::st1#2 = (const signed word[120]) main::sintab1#0 [phi:main::@5->main::@1#1] -- pwsz1=pwsc1 
    lda #<sintab1
    sta st1
    lda #>sintab1
    sta st1+1
    jmp b1
  //SEG20 [8] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
  b1_from_b8:
  //SEG21 [8] phi (byte*) print_char_cursor#49 = (byte*) print_char_cursor#2 [phi:main::@8->main::@1#0] -- register_copy 
  //SEG22 [8] phi (signed word*) main::st1#2 = (signed word*) main::st1#1 [phi:main::@8->main::@1#1] -- register_copy 
    jmp b1
  //SEG23 main::@1
  b1:
  //SEG24 [9] (signed word) main::sw#0 ← *((signed word*) main::st1#2) -- vwsz1=_deref_pwsz2 
    ldy #0
    lda (st1),y
    sta sw
    iny
    lda (st1),y
    sta sw+1
  //SEG25 [10] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 -- vwsz1_lt_0_then_la1 
    lda sw+1
    bmi b2_from_b1
  //SEG26 [11] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
  b3_from_b1:
    jmp b3
  //SEG27 main::@3
  b3:
  //SEG28 [12] call print_str 
  //SEG29 [21] phi from main::@3 to print_str [phi:main::@3->print_str]
  print_str_from_b3:
  //SEG30 [21] phi (byte*) print_char_cursor#51 = (byte*) print_char_cursor#49 [phi:main::@3->print_str#0] -- register_copy 
  //SEG31 [21] phi (byte*) print_str::str#5 = (const string) main::str1 [phi:main::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
  //SEG32 [13] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2]
  b2_from_b1:
  b2_from_b3:
  //SEG33 [13] phi (byte*) print_char_cursor#48 = (byte*) print_char_cursor#49 [phi:main::@1/main::@3->main::@2#0] -- register_copy 
    jmp b2
  //SEG34 main::@2
  b2:
  //SEG35 [14] (signed word) print_sword::w#1 ← (signed word) main::sw#0 -- vwsz1=vwsz2 
    lda sw
    sta print_sword.w
    lda sw+1
    sta print_sword.w+1
  //SEG36 [15] call print_sword 
    jsr print_sword
  //SEG37 [16] phi from main::@2 to main::@7 [phi:main::@2->main::@7]
  b7_from_b2:
    jmp b7
  //SEG38 main::@7
  b7:
  //SEG39 [17] call print_str 
  //SEG40 [21] phi from main::@7 to print_str [phi:main::@7->print_str]
  print_str_from_b7:
  //SEG41 [21] phi (byte*) print_char_cursor#51 = (byte*) print_char_cursor#12 [phi:main::@7->print_str#0] -- register_copy 
  //SEG42 [21] phi (byte*) print_str::str#5 = (const string) main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b8
  //SEG43 main::@8
  b8:
  //SEG44 [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 
    lda st1
    clc
    adc #2
    sta st1
    bcc !+
    inc st1+1
  !:
  //SEG45 [19] if((signed word*) main::st1#1<(const signed word[120]) main::sintab1#0+(const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 -- pwsz1_lt_pwsc1_then_la1 
    lda st1+1
    cmp #>sintab1+wavelength*2
    bcc b1_from_b8
    bne !+
    lda st1
    cmp #<sintab1+wavelength*2
    bcc b1_from_b8
  !:
    jmp breturn
  //SEG46 main::@return
  breturn:
  //SEG47 [20] return 
    rts
    str: .text "   @"
    str1: .text " @"
    sintab1: .fill 2*$78, 0
}
//SEG48 print_str
// Print a zero-terminated string
// print_str(byte* zeropage(4) str)
print_str: {
    .label str = 4
  //SEG49 [22] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1]
  b1_from_print_str:
  b1_from_b2:
  //SEG50 [22] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#51 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy 
  //SEG51 [22] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy 
    jmp b1
  //SEG52 print_str::@1
  b1:
  //SEG53 [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 
    ldy #0
    lda (str),y
    cmp #'@'
    bne b2
    jmp breturn
  //SEG54 print_str::@return
  breturn:
  //SEG55 [24] return 
    rts
  //SEG56 print_str::@2
  b2:
  //SEG57 [25] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (str),y
    ldy #0
    sta (print_char_cursor),y
  //SEG58 [26] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
  //SEG59 [27] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 -- pbuz1=_inc_pbuz1 
    inc str
    bne !+
    inc str+1
  !:
    jmp b1_from_b2
}
//SEG60 print_sword
// Print a signed word as HEX
// print_sword(signed word zeropage(6) w)
print_sword: {
    .label w = 6
  //SEG61 [28] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 -- vwsz1_ge_0_then_la1 
    lda w+1
    bpl b1_from_print_sword
  //SEG62 [29] phi from print_sword to print_sword::@2 [phi:print_sword->print_sword::@2]
  b2_from_print_sword:
    jmp b2
  //SEG63 print_sword::@2
  b2:
  //SEG64 [30] call print_char 
  //SEG65 [48] phi from print_sword::@2 to print_char [phi:print_sword::@2->print_char]
  print_char_from_b2:
  //SEG66 [48] phi (byte*) print_char_cursor#33 = (byte*) print_char_cursor#48 [phi:print_sword::@2->print_char#0] -- register_copy 
  //SEG67 [48] phi (byte) print_char::ch#3 = (byte) '-' [phi:print_sword::@2->print_char#1] -- vbuz1=vbuc1 
    lda #'-'
    sta print_char.ch
    jsr print_char
    jmp b4
  //SEG68 print_sword::@4
  b4:
  //SEG69 [31] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 -- vwsz1=_neg_vwsz1 
    sec
    lda w
    eor #$ff
    adc #0
    sta w
    lda w+1
    eor #$ff
    adc #0
    sta w+1
  //SEG70 [32] phi from print_sword print_sword::@4 to print_sword::@1 [phi:print_sword/print_sword::@4->print_sword::@1]
  b1_from_print_sword:
  b1_from_b4:
  //SEG71 [32] phi (byte*) print_char_cursor#43 = (byte*) print_char_cursor#48 [phi:print_sword/print_sword::@4->print_sword::@1#0] -- register_copy 
  //SEG72 [32] phi (signed word) print_sword::w#3 = (signed word) print_sword::w#1 [phi:print_sword/print_sword::@4->print_sword::@1#1] -- register_copy 
    jmp b1
  //SEG73 print_sword::@1
  b1:
  //SEG74 [33] call print_word 
    jsr print_word
    jmp breturn
  //SEG75 print_sword::@return
  breturn:
  //SEG76 [34] return 
    rts
}
//SEG77 print_word
// Print a word as HEX
print_word: {
  //SEG78 [35] (byte) print_byte::b#0 ← > (word)(signed word) print_sword::w#3 -- vbuz1=_hi_vwuz2 
    lda print_sword.w+1
    sta print_byte.b
  //SEG79 [36] call print_byte 
  //SEG80 [40] phi from print_word to print_byte [phi:print_word->print_byte]
  print_byte_from_print_word:
  //SEG81 [40] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#43 [phi:print_word->print_byte#0] -- register_copy 
  //SEG82 [40] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy 
    jsr print_byte
    jmp b1
  //SEG83 print_word::@1
  b1:
  //SEG84 [37] (byte) print_byte::b#1 ← < (word)(signed word) print_sword::w#3 -- vbuz1=_lo_vwuz2 
    lda print_sword.w
    sta print_byte.b
  //SEG85 [38] call print_byte 
  //SEG86 [40] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte]
  print_byte_from_b1:
  //SEG87 [40] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#12 [phi:print_word::@1->print_byte#0] -- register_copy 
  //SEG88 [40] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy 
    jsr print_byte
    jmp breturn
  //SEG89 print_word::@return
  breturn:
  //SEG90 [39] return 
    rts
}
//SEG91 print_byte
// Print a byte as HEX
// print_byte(byte zeropage(8) b)
print_byte: {
    .label _0 = $35
    .label _2 = $36
    .label b = 8
  //SEG92 [41] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz2_ror_4 
    lda b
    lsr
    lsr
    lsr
    lsr
    sta _0
  //SEG93 [42] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy _0
    lda print_hextab,y
    sta print_char.ch
  //SEG94 [43] call print_char 
  //SEG95 [48] phi from print_byte to print_char [phi:print_byte->print_char]
  print_char_from_print_byte:
  //SEG96 [48] phi (byte*) print_char_cursor#33 = (byte*) print_char_cursor#46 [phi:print_byte->print_char#0] -- register_copy 
  //SEG97 [48] phi (byte) print_char::ch#3 = (byte) print_char::ch#1 [phi:print_byte->print_char#1] -- register_copy 
    jsr print_char
    jmp b1
  //SEG98 print_byte::@1
  b1:
  //SEG99 [44] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word/dword/signed dword) 15 -- vbuz1=vbuz2_band_vbuc1 
    lda #$f
    and b
    sta _2
  //SEG100 [45] (byte) print_char::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy _2
    lda print_hextab,y
    sta print_char.ch
  //SEG101 [46] call print_char 
  //SEG102 [48] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
  print_char_from_b1:
  //SEG103 [48] phi (byte*) print_char_cursor#33 = (byte*) print_char_cursor#12 [phi:print_byte::@1->print_char#0] -- register_copy 
  //SEG104 [48] phi (byte) print_char::ch#3 = (byte) print_char::ch#2 [phi:print_byte::@1->print_char#1] -- register_copy 
    jsr print_char
    jmp breturn
  //SEG105 print_byte::@return
  breturn:
  //SEG106 [47] return 
    rts
}
//SEG107 print_char
// Print a single char
// print_char(byte zeropage(9) ch)
print_char: {
    .label ch = 9
  //SEG108 [49] *((byte*) print_char_cursor#33) ← (byte) print_char::ch#3 -- _deref_pbuz1=vbuz2 
    lda ch
    ldy #0
    sta (print_char_cursor),y
  //SEG109 [50] (byte*) print_char_cursor#12 ← ++ (byte*) print_char_cursor#33 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
    jmp breturn
  //SEG110 print_char::@return
  breturn:
  //SEG111 [51] return 
    rts
}
//SEG112 print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    .label sc = $c
  //SEG113 [53] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  b1_from_print_cls:
  //SEG114 [53] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta sc
    lda #>print_line_cursor
    sta sc+1
    jmp b1
  //SEG115 [53] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  b1_from_b1:
  //SEG116 [53] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
    jmp b1
  //SEG117 print_cls::@1
  b1:
  //SEG118 [54] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG119 [55] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG120 [56] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>print_line_cursor+$3e8
    bne b1_from_b1
    lda sc
    cmp #<print_line_cursor+$3e8
    bne b1_from_b1
    jmp breturn
  //SEG121 print_cls::@return
  breturn:
  //SEG122 [57] return 
    rts
}
//SEG123 sin16s_gen
// 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_gen(signed word* zeropage($12) sintab)
sin16s_gen: {
    .label _1 = $41
    .label step = $3b
    .label sintab = $12
    .label x = $e
    .label i = $14
  //SEG124 [59] call div32u16u 
  //SEG125 [132] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u]
  div32u16u_from_sin16s_gen:
    jsr div32u16u
  //SEG126 [60] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 
    lda div32u16u.return
    sta div32u16u.return_2
    lda div32u16u.return+1
    sta div32u16u.return_2+1
    lda div32u16u.return+2
    sta div32u16u.return_2+2
    lda div32u16u.return+3
    sta div32u16u.return_2+3
    jmp b3
  //SEG127 sin16s_gen::@3
  b3:
  //SEG128 [61] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2 -- vduz1=vduz2 
    lda div32u16u.return_2
    sta step
    lda div32u16u.return_2+1
    sta step+1
    lda div32u16u.return_2+2
    sta step+2
    lda div32u16u.return_2+3
    sta step+3
  //SEG129 [62] phi from sin16s_gen::@3 to sin16s_gen::@1 [phi:sin16s_gen::@3->sin16s_gen::@1]
  b1_from_b3:
  //SEG130 [62] phi (word) sin16s_gen::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta i
    lda #>0
    sta i+1
  //SEG131 [62] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[120]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- pwsz1=pwsc1 
    lda #<main.sintab1
    sta sintab
    lda #>main.sintab1
    sta sintab+1
  //SEG132 [62] phi (dword) sin16s_gen::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vduz1=vbuc1 
    lda #0
    sta x
    lda #0
    sta x+1
    sta x+2
    sta x+3
    jmp b1
  // u[4.28]
  //SEG133 [62] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->sin16s_gen::@1]
  b1_from_b4:
  //SEG134 [62] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy 
  //SEG135 [62] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy 
  //SEG136 [62] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy 
    jmp b1
  //SEG137 sin16s_gen::@1
  b1:
  //SEG138 [63] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 
    lda x
    sta sin16s.x
    lda x+1
    sta sin16s.x+1
    lda x+2
    sta sin16s.x+2
    lda x+3
    sta sin16s.x+3
  //SEG139 [64] call sin16s 
    jsr sin16s
  //SEG140 [65] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 
    lda sin16s.return_1
    sta sin16s.return
    lda sin16s.return_1+1
    sta sin16s.return+1
    jmp b4
  //SEG141 sin16s_gen::@4
  b4:
  //SEG142 [66] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 
    lda sin16s.return
    sta _1
    lda sin16s.return+1
    sta _1+1
  //SEG143 [67] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 -- _deref_pwsz1=vwsz2 
    ldy #0
    lda _1
    sta (sintab),y
    iny
    lda _1+1
    sta (sintab),y
  //SEG144 [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 
    lda sintab
    clc
    adc #2
    sta sintab
    bcc !+
    inc sintab+1
  !:
  //SEG145 [69] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 
    lda x
    clc
    adc step
    sta x
    lda x+1
    adc step+1
    sta x+1
    lda x+2
    adc step+2
    sta x+2
    lda x+3
    adc step+3
    sta x+3
  //SEG146 [70] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1 
    inc i
    bne !+
    inc i+1
  !:
  //SEG147 [71] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 -- vwuz1_lt_vwuc1_then_la1 
    lda i+1
    cmp #>main.wavelength
    bcc b1_from_b4
    bne !+
    lda i
    cmp #<main.wavelength
    bcc b1_from_b4
  !:
    jmp breturn
  //SEG148 sin16s_gen::@return
  breturn:
  //SEG149 [72] return 
    rts
}
//SEG150 sin16s
// 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
// sin16s(dword zeropage($17) x)
sin16s: {
    .label _6 = $43
    .label x = $17
    .label return = $3f
    .label x1 = $47
    .label x2 = $4b
    .label x3 = $4f
    .label x3_6 = $53
    .label usinx = $55
    .label x4 = $59
    .label x5 = $5d
    .label x5_128 = $5f
    .label usinx_1 = $61
    .label return_1 = $1b
    .label sinx = $1b
    .label isUpper = $16
    .label return_5 = $1b
  //SEG151 [73] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_u4f28>>$10
    bcc b1_from_sin16s
    bne !+
    lda x+2
    cmp #<PI_u4f28>>$10
    bcc b1_from_sin16s
    bne !+
    lda x+1
    cmp #>PI_u4f28
    bcc b1_from_sin16s
    bne !+
    lda x
    cmp #<PI_u4f28
    bcc b1_from_sin16s
  !:
    jmp b4
  //SEG152 sin16s::@4
  b4:
  //SEG153 [74] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 -- vduz1=vduz1_minus_vduc1 
    lda x
    sec
    sbc #<PI_u4f28
    sta x
    lda x+1
    sbc #>PI_u4f28
    sta x+1
    lda x+2
    sbc #<PI_u4f28>>$10
    sta x+2
    lda x+3
    sbc #>PI_u4f28>>$10
    sta x+3
  //SEG154 [75] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
  b1_from_b4:
  //SEG155 [75] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #1
    sta isUpper
  //SEG156 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG157 [75] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
  b1_from_sin16s:
  //SEG158 [75] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta isUpper
  //SEG159 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG160 sin16s::@1
  b1:
  //SEG161 [76] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_HALF_u4f28>>$10
    bcc b2_from_b1
    bne !+
    lda x+2
    cmp #<PI_HALF_u4f28>>$10
    bcc b2_from_b1
    bne !+
    lda x+1
    cmp #>PI_HALF_u4f28
    bcc b2_from_b1
    bne !+
    lda x
    cmp #<PI_HALF_u4f28
    bcc b2_from_b1
  !:
    jmp b5
  //SEG162 sin16s::@5
  b5:
  //SEG163 [77] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 
    lda #<PI_u4f28
    sec
    sbc x
    sta x
    lda #>PI_u4f28
    sbc x+1
    sta x+1
    lda #<PI_u4f28>>$10
    sbc x+2
    sta x+2
    lda #>PI_u4f28>>$10
    sbc x+3
    sta x+3
  //SEG164 [78] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2]
  b2_from_b1:
  b2_from_b5:
  //SEG165 [78] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy 
    jmp b2
  //SEG166 sin16s::@2
  b2:
  //SEG167 [79] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vduz1=vduz2_rol_3 
    lda x
    sta _6
    lda x+1
    sta _6+1
    lda x+2
    sta _6+2
    lda x+3
    sta _6+3
    ldy #3
  !:
    asl _6
    rol _6+1
    rol _6+2
    rol _6+3
    dey
    bne !-
  //SEG168 [80] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 -- vwuz1=_hi_vduz2 
    lda _6+2
    sta x1
    lda _6+3
    sta x1+1
  //SEG169 [81] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v1
    lda x1+1
    sta mulu16_sel.v1+1
  //SEG170 [82] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG171 [83] call mulu16_sel 
  //SEG172 [113] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel]
  mulu16_sel_from_b2:
  //SEG173 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #0
    sta mulu16_sel.select
  //SEG174 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy 
  //SEG175 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG176 [84] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return+1
    jmp b8
  //SEG177 sin16s::@8
  b8:
  //SEG178 [85] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta x2
    lda mulu16_sel.return+1
    sta x2+1
  //SEG179 [86] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 
    lda x2
    sta mulu16_sel.v1
    lda x2+1
    sta mulu16_sel.v1+1
  //SEG180 [87] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG181 [88] call mulu16_sel 
  //SEG182 [113] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel]
  mulu16_sel_from_b8:
  //SEG183 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #1
    sta mulu16_sel.select
  //SEG184 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@8->mulu16_sel#1] -- register_copy 
  //SEG185 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@8->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG186 [89] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return_1
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return_1+1
    jmp b9
  //SEG187 sin16s::@9
  b9:
  //SEG188 [90] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 
    lda mulu16_sel.return_1
    sta x3
    lda mulu16_sel.return_1+1
    sta x3+1
  //SEG189 [91] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 
    lda x3
    sta mulu16_sel.v1
    lda x3+1
    sta mulu16_sel.v1+1
  //SEG190 [92] call mulu16_sel 
  //SEG191 [113] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel]
  mulu16_sel_from_b9:
  //SEG192 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #1
    sta mulu16_sel.select
  //SEG193 [113] phi (word) mulu16_sel::v2#5 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 [phi:sin16s::@9->mulu16_sel#1] -- vwuz1=vwuc1 
    lda #<$10000/6
    sta mulu16_sel.v2
    lda #>$10000/6
    sta mulu16_sel.v2+1
  //SEG194 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@9->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG195 [93] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return_2
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return_2+1
    jmp b10
  //SEG196 sin16s::@10
  b10:
  //SEG197 [94] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 
    lda mulu16_sel.return_2
    sta x3_6
    lda mulu16_sel.return_2+1
    sta x3_6+1
  //SEG198 [95] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 
    lda x1
    sec
    sbc x3_6
    sta usinx
    lda x1+1
    sbc x3_6+1
    sta usinx+1
  //SEG199 [96] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 
    lda x3
    sta mulu16_sel.v1
    lda x3+1
    sta mulu16_sel.v1+1
  //SEG200 [97] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG201 [98] call mulu16_sel 
  //SEG202 [113] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel]
  mulu16_sel_from_b10:
  //SEG203 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #0
    sta mulu16_sel.select
  //SEG204 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@10->mulu16_sel#1] -- register_copy 
  //SEG205 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@10->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG206 [99] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return_10
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return_10+1
    jmp b11
  //SEG207 sin16s::@11
  b11:
  //SEG208 [100] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 
    lda mulu16_sel.return_10
    sta x4
    lda mulu16_sel.return_10+1
    sta x4+1
  //SEG209 [101] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 
    lda x4
    sta mulu16_sel.v1
    lda x4+1
    sta mulu16_sel.v1+1
  //SEG210 [102] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG211 [103] call mulu16_sel 
  //SEG212 [113] phi from sin16s::@11 to mulu16_sel [phi:sin16s::@11->mulu16_sel]
  mulu16_sel_from_b11:
  //SEG213 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #0
    sta mulu16_sel.select
  //SEG214 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@11->mulu16_sel#1] -- register_copy 
  //SEG215 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@11->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG216 [104] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return_11
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return_11+1
    jmp b12
  //SEG217 sin16s::@12
  b12:
  //SEG218 [105] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 
    lda mulu16_sel.return_11
    sta x5
    lda mulu16_sel.return_11+1
    sta x5+1
  //SEG219 [106] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vwuz1=vwuz2_ror_4 
    lda x5+1
    sta x5_128+1
    lda x5
    sta x5_128
    ldy #4
  !:
    lsr x5_128+1
    ror x5_128
    dey
    bne !-
  //SEG220 [107] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 
    lda usinx
    clc
    adc x5_128
    sta usinx_1
    lda usinx+1
    adc x5_128+1
    sta usinx_1+1
  //SEG221 [108] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15 -- vbuz1_eq_0_then_la1 
    lda isUpper
    cmp #0
    beq b15
    jmp b6
  //SEG222 sin16s::@6
  b6:
  //SEG223 [109] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 
    sec
    lda usinx_1
    eor #$ff
    adc #0
    sta sinx
    lda usinx_1+1
    eor #$ff
    adc #0
    sta sinx+1
  //SEG224 [110] phi from sin16s::@15 sin16s::@6 to sin16s::@3 [phi:sin16s::@15/sin16s::@6->sin16s::@3]
  b3_from_b15:
  b3_from_b6:
  //SEG225 [110] phi (signed word) sin16s::return#1 = (signed word~) sin16s::return#5 [phi:sin16s::@15/sin16s::@6->sin16s::@3#0] -- register_copy 
    jmp b3
  //SEG226 sin16s::@3
  b3:
    jmp breturn
  //SEG227 sin16s::@return
  breturn:
  //SEG228 [111] return 
    rts
  //SEG229 sin16s::@15
  b15:
  //SEG230 [112] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 
    lda usinx_1
    sta return_5
    lda usinx_1+1
    sta return_5+1
    jmp b3_from_b15
}
//SEG231 mulu16_sel
// Calculate val*val for two unsigned word 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 zeropage($1d) v1, word zeropage($1f) v2, byte zeropage($21) select)
mulu16_sel: {
    .label _0 = $69
    .label _1 = $6d
    .label v1 = $1d
    .label v2 = $1f
    .label return = $49
    .label return_1 = $4d
    .label return_2 = $51
    .label return_10 = $57
    .label return_11 = $5b
    .label select = $21
    .label return_12 = $71
  //SEG232 [114] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 
    lda v1
    sta mul16u.a
    lda v1+1
    sta mul16u.a+1
  //SEG233 [115] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 
    lda v2
    sta mul16u.b
    lda v2+1
    sta mul16u.b+1
  //SEG234 [116] call mul16u 
    jsr mul16u
  //SEG235 [117] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 
    lda mul16u.res
    sta mul16u.return
    lda mul16u.res+1
    sta mul16u.return+1
    lda mul16u.res+2
    sta mul16u.return+2
    lda mul16u.res+3
    sta mul16u.return+3
    jmp b2
  //SEG236 mulu16_sel::@2
  b2:
  //SEG237 [118] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 -- vduz1=vduz2 
    lda mul16u.return
    sta _0
    lda mul16u.return+1
    sta _0+1
    lda mul16u.return+2
    sta _0+2
    lda mul16u.return+3
    sta _0+3
  //SEG238 [119] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 
    lda _0
    sta _1
    lda _0+1
    sta _1+1
    lda _0+2
    sta _1+2
    lda _0+3
    sta _1+3
    ldx select
    beq !e+
  !:
    asl _1
    rol _1+1
    rol _1+2
    rol _1+3
    dex
    bne !-
  !e:
  //SEG239 [120] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 
    lda _1+2
    sta return_12
    lda _1+3
    sta return_12+1
    jmp breturn
  //SEG240 mulu16_sel::@return
  breturn:
  //SEG241 [121] return 
    rts
}
//SEG242 mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($22) a, word zeropage($63) b)
mul16u: {
    .label _1 = $73
    .label mb = $28
    .label a = $22
    .label res = $24
    .label b = $63
    .label return = $65
  //SEG243 [122] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 -- vduz1=_dword_vwuz2 
    lda b
    sta mb
    lda b+1
    sta mb+1
    lda #0
    sta mb+2
    sta mb+3
  //SEG244 [123] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
  b1_from_mul16u:
  //SEG245 [123] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy 
  //SEG246 [123] phi (dword) mul16u::res#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 
    lda #0
    sta res
    lda #0
    sta res+1
    sta res+2
    sta res+3
  //SEG247 [123] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy 
    jmp b1
  //SEG248 mul16u::@1
  b1:
  //SEG249 [124] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 
    lda a
    bne b2
    lda a+1
    bne b2
    jmp breturn
  //SEG250 mul16u::@return
  breturn:
  //SEG251 [125] return 
    rts
  //SEG252 mul16u::@2
  b2:
  //SEG253 [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vwuz2_band_vbuc1 
    lda a
    and #1
    sta _1
  //SEG254 [127] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 -- vbuz1_eq_0_then_la1 
    lda _1
    cmp #0
    beq b4_from_b2
    jmp b7
  //SEG255 mul16u::@7
  b7:
  //SEG256 [128] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 
    lda res
    clc
    adc mb
    sta res
    lda res+1
    adc mb+1
    sta res+1
    lda res+2
    adc mb+2
    sta res+2
    lda res+3
    adc mb+3
    sta res+3
  //SEG257 [129] phi from mul16u::@2 mul16u::@7 to mul16u::@4 [phi:mul16u::@2/mul16u::@7->mul16u::@4]
  b4_from_b2:
  b4_from_b7:
  //SEG258 [129] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@7->mul16u::@4#0] -- register_copy 
    jmp b4
  //SEG259 mul16u::@4
  b4:
  //SEG260 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_ror_1 
    clc
    ror a+1
    ror a
  //SEG261 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vduz1=vduz1_rol_1 
    asl mb
    rol mb+1
    rol mb+2
    rol mb+3
  //SEG262 [123] phi from mul16u::@4 to mul16u::@1 [phi:mul16u::@4->mul16u::@1]
  b1_from_b4:
  //SEG263 [123] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@4->mul16u::@1#0] -- register_copy 
  //SEG264 [123] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@4->mul16u::@1#1] -- register_copy 
  //SEG265 [123] phi (word) mul16u::a#2 = (word) mul16u::a#0 [phi:mul16u::@4->mul16u::@1#2] -- register_copy 
    jmp b1
}
//SEG266 div32u16u
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
    .label quotient_hi = $76
    .label quotient_lo = $7a
    .label return = $7c
    .label return_2 = $37
  //SEG267 [133] call divr16u 
  //SEG268 [142] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
  divr16u_from_div32u16u:
  //SEG269 [142] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28#0 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28>>$10
    sta divr16u.dividend
    lda #>PI2_u4f28>>$10
    sta divr16u.dividend+1
  //SEG270 [142] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 
    lda #<0
    sta divr16u.rem
    lda #>0
    sta divr16u.rem+1
    jsr divr16u
  //SEG271 [134] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 
    lda divr16u.return
    sta divr16u.return_2
    lda divr16u.return+1
    sta divr16u.return_2+1
    jmp b2
  //SEG272 div32u16u::@2
  b2:
  //SEG273 [135] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 
    lda divr16u.return_2
    sta quotient_hi
    lda divr16u.return_2+1
    sta quotient_hi+1
  //SEG274 [136] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 
    lda rem16u
    sta divr16u.rem
    lda rem16u+1
    sta divr16u.rem+1
  //SEG275 [137] call divr16u 
  //SEG276 [142] phi from div32u16u::@2 to divr16u [phi:div32u16u::@2->divr16u]
  divr16u_from_b2:
  //SEG277 [142] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28#0 [phi:div32u16u::@2->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28&$ffff
    sta divr16u.dividend
    lda #>PI2_u4f28&$ffff
    sta divr16u.dividend+1
  //SEG278 [142] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@2->divr16u#1] -- register_copy 
    jsr divr16u
  //SEG279 [138] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 
    lda divr16u.return
    sta divr16u.return_3
    lda divr16u.return+1
    sta divr16u.return_3+1
    jmp b3
  //SEG280 div32u16u::@3
  b3:
  //SEG281 [139] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 
    lda divr16u.return_3
    sta quotient_lo
    lda divr16u.return_3+1
    sta quotient_lo+1
  //SEG282 [140] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 
    lda quotient_hi
    sta return+2
    lda quotient_hi+1
    sta return+3
    lda quotient_lo
    sta return
    lda quotient_lo+1
    sta return+1
    jmp breturn
  //SEG283 div32u16u::@return
  breturn:
  //SEG284 [141] return 
    rts
}
//SEG285 divr16u
// Performs division on two 16 bit unsigned words 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 zeropage($2e) dividend, word zeropage($2c) rem)
divr16u: {
    .label _1 = $80
    .label _2 = $81
    .label rem = $2c
    .label dividend = $2e
    .label quotient = $30
    .label i = $32
    .label return = $30
    .label return_2 = $74
    .label return_3 = $78
  //SEG286 [143] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
  b1_from_divr16u:
  //SEG287 [143] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta i
  //SEG288 [143] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 
    lda #<0
    sta quotient
    lda #>0
    sta quotient+1
  //SEG289 [143] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy 
  //SEG290 [143] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy 
    jmp b1
  //SEG291 [143] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
  b1_from_b3:
  //SEG292 [143] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
  //SEG293 [143] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
  //SEG294 [143] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
  //SEG295 [143] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
    jmp b1
  //SEG296 divr16u::@1
  b1:
  //SEG297 [144] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl rem
    rol rem+1
  //SEG298 [145] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 
    lda dividend+1
    sta _1
  //SEG299 [146] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 -- vbuz1=vbuz2_band_vbuc1 
    lda #$80
    and _1
    sta _2
  //SEG300 [147] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 
    lda _2
    cmp #0
    beq b2_from_b1
    jmp b4
  //SEG301 divr16u::@4
  b4:
  //SEG302 [148] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora rem
    sta rem
  //SEG303 [149] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
  b2_from_b1:
  b2_from_b4:
  //SEG304 [149] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
    jmp b2
  //SEG305 divr16u::@2
  b2:
  //SEG306 [150] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl dividend
    rol dividend+1
  //SEG307 [151] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl quotient
    rol quotient+1
  //SEG308 [152] if((word) divr16u::rem#6<(const word) main::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 
    lda rem+1
    cmp #>main.wavelength
    bcc b3_from_b2
    bne !+
    lda rem
    cmp #<main.wavelength
    bcc b3_from_b2
  !:
    jmp b5
  //SEG309 divr16u::@5
  b5:
  //SEG310 [153] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc quotient
    bne !+
    inc quotient+1
  !:
  //SEG311 [154] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda rem
    sec
    sbc #<main.wavelength
    sta rem
    lda rem+1
    sbc #>main.wavelength
    sta rem+1
  //SEG312 [155] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
  b3_from_b2:
  b3_from_b5:
  //SEG313 [155] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
  //SEG314 [155] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
    jmp b3
  //SEG315 divr16u::@3
  b3:
  //SEG316 [156] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG317 [157] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #$10
    bne b1_from_b3
    jmp b6
  //SEG318 divr16u::@6
  b6:
  //SEG319 [158] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 
    lda rem
    sta rem16u
    lda rem+1
    sta rem16u+1
    jmp breturn
  //SEG320 divr16u::@return
  breturn:
  //SEG321 [159] return 
    rts
}
  print_hextab: .text "0123456789abcdef"

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [9] (signed word) main::sw#0 ← *((signed word*) main::st1#2) [ main::st1#2 print_char_cursor#49 main::sw#0 ] ( main:2 [ main::st1#2 print_char_cursor#49 main::sw#0 ] ) always clobbers reg byte a reg byte y 
Statement [10] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::st1#2 print_char_cursor#49 main::sw#0 ] ( main:2 [ main::st1#2 print_char_cursor#49 main::sw#0 ] ) always clobbers reg byte a 
Statement [14] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 print_char_cursor#48 print_sword::w#1 ] ( main:2 [ main::st1#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a 
Statement [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [19] if((signed word*) main::st1#1<(const signed word[120]) main::sintab1#0+(const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:12 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:17 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y 
Statement [25] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:12 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:17 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y 
Statement [28] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [ print_char_cursor#48 print_sword::w#1 ] ( main:2::print_sword:15 [ main::st1#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a 
Statement [31] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 [ print_char_cursor#12 print_sword::w#0 ] ( main:2::print_sword:15 [ main::st1#2 print_char_cursor#12 print_sword::w#0 ] ) always clobbers reg byte a 
Statement [35] (byte) print_byte::b#0 ← > (word)(signed word) print_sword::w#3 [ print_sword::w#3 print_char_cursor#43 print_byte::b#0 ] ( main:2::print_sword:15::print_word:33 [ main::st1#2 print_sword::w#3 print_char_cursor#43 print_byte::b#0 ] ) always clobbers reg byte a 
Statement [37] (byte) print_byte::b#1 ← < (word)(signed word) print_sword::w#3 [ print_char_cursor#12 print_byte::b#1 ] ( main:2::print_sword:15::print_word:33 [ main::st1#2 print_char_cursor#12 print_byte::b#1 ] ) always clobbers reg byte a 
Statement [41] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#2 print_char_cursor#46 print_byte::$0 ] ( main:2::print_sword:15::print_word:33::print_byte:36 [ main::st1#2 print_sword::w#3 print_byte::b#2 print_char_cursor#46 print_byte::$0 ] main:2::print_sword:15::print_word:33::print_byte:38 [ main::st1#2 print_byte::b#2 print_char_cursor#46 print_byte::$0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Statement [44] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#12 print_byte::$2 ] ( main:2::print_sword:15::print_word:33::print_byte:36 [ main::st1#2 print_sword::w#3 print_char_cursor#12 print_byte::$2 ] main:2::print_sword:15::print_word:33::print_byte:38 [ main::st1#2 print_char_cursor#12 print_byte::$2 ] ) always clobbers reg byte a 
Statement [49] *((byte*) print_char_cursor#33) ← (byte) print_char::ch#3 [ print_char_cursor#33 ] ( main:2::print_sword:15::print_char:30 [ main::st1#2 print_sword::w#1 print_char_cursor#33 ] main:2::print_sword:15::print_word:33::print_byte:36::print_char:43 [ main::st1#2 print_sword::w#3 print_byte::b#2 print_char_cursor#33 ] main:2::print_sword:15::print_word:33::print_byte:38::print_char:43 [ main::st1#2 print_byte::b#2 print_char_cursor#33 ] main:2::print_sword:15::print_word:33::print_byte:36::print_char:46 [ main::st1#2 print_sword::w#3 print_char_cursor#33 ] main:2::print_sword:15::print_word:33::print_byte:38::print_char:46 [ main::st1#2 print_char_cursor#33 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:8 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
Statement [54] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [56] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) always clobbers reg byte a 
Statement [60] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:5 [ div32u16u::return#2 ] ) always clobbers reg byte a 
Statement [61] (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 [63] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [65] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ) always clobbers reg byte a 
Statement [66] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ) always clobbers reg byte a 
Statement [67] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a 
Statement [69] (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 [71] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ) always clobbers reg byte a 
Statement [73] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [74] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#1 ] ) always clobbers reg byte a 
Statement [76] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Statement [77] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a 
Statement [79] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ sin16s::isUpper#2 sin16s::$6 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::$6 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Statement [80] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a 
Statement [81] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a 
Statement [82] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a 
Statement [84] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a 
Statement [85] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a 
Statement [86] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a 
Statement [87] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a 
Statement [89] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a 
Statement [90] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a 
Statement [91] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a 
Statement [93] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a 
Statement [94] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a 
Statement [95] (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:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a 
Statement [96] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a 
Statement [97] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a 
Statement [99] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a 
Statement [100] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a 
Statement [101] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a 
Statement [102] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a 
Statement [104] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a 
Statement [105] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a 
Statement [106] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a reg byte y 
Statement [107] (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:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a 
Statement [109] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::sinx#1 ] ) always clobbers reg byte a 
Statement [112] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#5 ] ) always clobbers reg byte a 
Statement [114] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ mulu16_sel::select#5 ]
Statement [115] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a 
Statement [117] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a 
Statement [118] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a 
Statement [119] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a 
Statement [120] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a 
Statement [122] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a 
Statement [124] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a 
Statement [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a 
Statement [128] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a 
Statement [134] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a 
Statement [135] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [136] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a 
Statement [138] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a 
Statement [139] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a 
Statement [140] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::return#0 ] ) always clobbers reg byte a 
Statement [145] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:50 [ divr16u::i#2 divr16u::i#1 ]
Statement [146] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a 
Statement [148] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a 
Statement [152] if((word) divr16u::rem#6<(const word) main::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a 
Statement [154] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a 
Statement [158] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [9] (signed word) main::sw#0 ← *((signed word*) main::st1#2) [ main::st1#2 print_char_cursor#49 main::sw#0 ] ( main:2 [ main::st1#2 print_char_cursor#49 main::sw#0 ] ) always clobbers reg byte a reg byte y 
Statement [10] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::st1#2 print_char_cursor#49 main::sw#0 ] ( main:2 [ main::st1#2 print_char_cursor#49 main::sw#0 ] ) always clobbers reg byte a 
Statement [14] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 print_char_cursor#48 print_sword::w#1 ] ( main:2 [ main::st1#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a 
Statement [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [19] if((signed word*) main::st1#1<(const signed word[120]) main::sintab1#0+(const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 [ main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:12 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:17 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y 
Statement [25] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:12 [ main::st1#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:17 [ main::st1#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y 
Statement [28] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [ print_char_cursor#48 print_sword::w#1 ] ( main:2::print_sword:15 [ main::st1#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a 
Statement [31] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 [ print_char_cursor#12 print_sword::w#0 ] ( main:2::print_sword:15 [ main::st1#2 print_char_cursor#12 print_sword::w#0 ] ) always clobbers reg byte a 
Statement [35] (byte) print_byte::b#0 ← > (word)(signed word) print_sword::w#3 [ print_sword::w#3 print_char_cursor#43 print_byte::b#0 ] ( main:2::print_sword:15::print_word:33 [ main::st1#2 print_sword::w#3 print_char_cursor#43 print_byte::b#0 ] ) always clobbers reg byte a 
Statement [37] (byte) print_byte::b#1 ← < (word)(signed word) print_sword::w#3 [ print_char_cursor#12 print_byte::b#1 ] ( main:2::print_sword:15::print_word:33 [ main::st1#2 print_char_cursor#12 print_byte::b#1 ] ) always clobbers reg byte a 
Statement [41] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#2 print_char_cursor#46 print_byte::$0 ] ( main:2::print_sword:15::print_word:33::print_byte:36 [ main::st1#2 print_sword::w#3 print_byte::b#2 print_char_cursor#46 print_byte::$0 ] main:2::print_sword:15::print_word:33::print_byte:38 [ main::st1#2 print_byte::b#2 print_char_cursor#46 print_byte::$0 ] ) always clobbers reg byte a 
Statement [44] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#12 print_byte::$2 ] ( main:2::print_sword:15::print_word:33::print_byte:36 [ main::st1#2 print_sword::w#3 print_char_cursor#12 print_byte::$2 ] main:2::print_sword:15::print_word:33::print_byte:38 [ main::st1#2 print_char_cursor#12 print_byte::$2 ] ) always clobbers reg byte a 
Statement [49] *((byte*) print_char_cursor#33) ← (byte) print_char::ch#3 [ print_char_cursor#33 ] ( main:2::print_sword:15::print_char:30 [ main::st1#2 print_sword::w#1 print_char_cursor#33 ] main:2::print_sword:15::print_word:33::print_byte:36::print_char:43 [ main::st1#2 print_sword::w#3 print_byte::b#2 print_char_cursor#33 ] main:2::print_sword:15::print_word:33::print_byte:38::print_char:43 [ main::st1#2 print_byte::b#2 print_char_cursor#33 ] main:2::print_sword:15::print_word:33::print_byte:36::print_char:46 [ main::st1#2 print_sword::w#3 print_char_cursor#33 ] main:2::print_sword:15::print_word:33::print_byte:38::print_char:46 [ main::st1#2 print_char_cursor#33 ] ) always clobbers reg byte y 
Statement [54] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:7 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [56] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:7 [ print_cls::sc#1 ] ) always clobbers reg byte a 
Statement [60] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:2::sin16s_gen:5 [ div32u16u::return#2 ] ) always clobbers reg byte a 
Statement [61] (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 [63] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [65] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ) always clobbers reg byte a 
Statement [66] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ) always clobbers reg byte a 
Statement [67] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a 
Statement [69] (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 [71] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ) always clobbers reg byte a 
Statement [73] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [74] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#1 ] ) always clobbers reg byte a 
Statement [76] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a 
Statement [77] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a 
Statement [79] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ sin16s::isUpper#2 sin16s::$6 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::$6 ] ) always clobbers reg byte a reg byte y 
Statement [80] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a 
Statement [81] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a 
Statement [82] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a 
Statement [84] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a 
Statement [85] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a 
Statement [86] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a 
Statement [87] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a 
Statement [89] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a 
Statement [90] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a 
Statement [91] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a 
Statement [93] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a 
Statement [94] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a 
Statement [95] (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:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a 
Statement [96] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a 
Statement [97] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a 
Statement [99] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a 
Statement [100] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a 
Statement [101] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a 
Statement [102] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a 
Statement [104] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a 
Statement [105] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a 
Statement [106] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a reg byte y 
Statement [107] (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:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a 
Statement [109] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::sinx#1 ] ) always clobbers reg byte a 
Statement [112] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:2::sin16s_gen:5::sin16s:64 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#5 ] ) always clobbers reg byte a 
Statement [114] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 [ mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v2#5 mulu16_sel::select#5 mul16u::a#1 ] ) always clobbers reg byte a 
Statement [115] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5 [ mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::b#0 ] ) always clobbers reg byte a 
Statement [117] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#2 ] ) always clobbers reg byte a 
Statement [118] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a 
Statement [119] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a 
Statement [120] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a 
Statement [122] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 [ mul16u::a#1 mul16u::mb#0 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#1 mul16u::mb#0 ] ) always clobbers reg byte a 
Statement [124] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 ] ) always clobbers reg byte a 
Statement [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#2 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a 
Statement [128] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ( main:2::sin16s_gen:5::sin16s:64::mulu16_sel:83::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:88::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:92::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:98::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] main:2::sin16s_gen:5::sin16s:64::mulu16_sel:103::mul16u:116 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#2 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a 
Statement [134] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a 
Statement [135] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [136] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a 
Statement [138] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a 
Statement [139] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a 
Statement [140] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:2::sin16s_gen:5::div32u16u:59 [ div32u16u::return#0 ] ) always clobbers reg byte a 
Statement [145] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a 
Statement [146] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a 
Statement [148] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a 
Statement [152] if((word) divr16u::rem#6<(const word) main::wavelength#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a 
Statement [154] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a 
Statement [158] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:2::sin16s_gen:5::div32u16u:59::divr16u:133 [ divr16u::return#0 rem16u#1 ] main:2::sin16s_gen:5::div32u16u:59::divr16u:137 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a 
Potential registers zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] : zp ZP_WORD:2 , 
Potential registers zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] : zp ZP_WORD:4 , 
Potential registers zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] : zp ZP_WORD:6 , 
Potential registers zp ZP_BYTE:8 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] : zp ZP_BYTE:8 , reg byte x , 
Potential registers zp ZP_BYTE:9 [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] : zp ZP_WORD:10 , 
Potential registers zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:12 , 
Potential registers zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] : zp ZP_DWORD:14 , 
Potential registers zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] : zp ZP_WORD:18 , 
Potential registers zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] : zp ZP_WORD:20 , 
Potential registers zp ZP_BYTE:22 [ sin16s::isUpper#2 ] : zp ZP_BYTE:22 , reg byte x , 
Potential registers zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp ZP_DWORD:23 , 
Potential registers zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp ZP_WORD:27 , 
Potential registers zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] : zp ZP_WORD:29 , 
Potential registers zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] : zp ZP_WORD:31 , 
Potential registers zp ZP_BYTE:33 [ mulu16_sel::select#5 ] : zp ZP_BYTE:33 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] : zp ZP_WORD:34 , 
Potential registers zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp ZP_DWORD:36 , 
Potential registers zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp ZP_DWORD:40 , 
Potential registers zp ZP_WORD:44 [ 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 ZP_WORD:44 , 
Potential registers zp ZP_WORD:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp ZP_WORD:46 , 
Potential registers zp ZP_WORD:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:48 , 
Potential registers zp ZP_BYTE:50 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:50 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:51 [ main::sw#0 ] : zp ZP_WORD:51 , 
Potential registers zp ZP_BYTE:53 [ print_byte::$0 ] : zp ZP_BYTE:53 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:54 [ print_byte::$2 ] : zp ZP_BYTE:54 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_DWORD:55 [ div32u16u::return#2 ] : zp ZP_DWORD:55 , 
Potential registers zp ZP_DWORD:59 [ sin16s_gen::step#0 ] : zp ZP_DWORD:59 , 
Potential registers zp ZP_WORD:63 [ sin16s::return#0 ] : zp ZP_WORD:63 , 
Potential registers zp ZP_WORD:65 [ sin16s_gen::$1 ] : zp ZP_WORD:65 , 
Potential registers zp ZP_DWORD:67 [ sin16s::$6 ] : zp ZP_DWORD:67 , 
Potential registers zp ZP_WORD:71 [ sin16s::x1#0 ] : zp ZP_WORD:71 , 
Potential registers zp ZP_WORD:73 [ mulu16_sel::return#0 ] : zp ZP_WORD:73 , 
Potential registers zp ZP_WORD:75 [ sin16s::x2#0 ] : zp ZP_WORD:75 , 
Potential registers zp ZP_WORD:77 [ mulu16_sel::return#1 ] : zp ZP_WORD:77 , 
Potential registers zp ZP_WORD:79 [ sin16s::x3#0 ] : zp ZP_WORD:79 , 
Potential registers zp ZP_WORD:81 [ mulu16_sel::return#2 ] : zp ZP_WORD:81 , 
Potential registers zp ZP_WORD:83 [ sin16s::x3_6#0 ] : zp ZP_WORD:83 , 
Potential registers zp ZP_WORD:85 [ sin16s::usinx#0 ] : zp ZP_WORD:85 , 
Potential registers zp ZP_WORD:87 [ mulu16_sel::return#10 ] : zp ZP_WORD:87 , 
Potential registers zp ZP_WORD:89 [ sin16s::x4#0 ] : zp ZP_WORD:89 , 
Potential registers zp ZP_WORD:91 [ mulu16_sel::return#11 ] : zp ZP_WORD:91 , 
Potential registers zp ZP_WORD:93 [ sin16s::x5#0 ] : zp ZP_WORD:93 , 
Potential registers zp ZP_WORD:95 [ sin16s::x5_128#0 ] : zp ZP_WORD:95 , 
Potential registers zp ZP_WORD:97 [ sin16s::usinx#1 ] : zp ZP_WORD:97 , 
Potential registers zp ZP_WORD:99 [ mul16u::b#0 ] : zp ZP_WORD:99 , 
Potential registers zp ZP_DWORD:101 [ mul16u::return#2 ] : zp ZP_DWORD:101 , 
Potential registers zp ZP_DWORD:105 [ mulu16_sel::$0 ] : zp ZP_DWORD:105 , 
Potential registers zp ZP_DWORD:109 [ mulu16_sel::$1 ] : zp ZP_DWORD:109 , 
Potential registers zp ZP_WORD:113 [ mulu16_sel::return#12 ] : zp ZP_WORD:113 , 
Potential registers zp ZP_BYTE:115 [ mul16u::$1 ] : zp ZP_BYTE:115 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:116 [ divr16u::return#2 ] : zp ZP_WORD:116 , 
Potential registers zp ZP_WORD:118 [ div32u16u::quotient_hi#0 ] : zp ZP_WORD:118 , 
Potential registers zp ZP_WORD:120 [ divr16u::return#3 ] : zp ZP_WORD:120 , 
Potential registers zp ZP_WORD:122 [ div32u16u::quotient_lo#0 ] : zp ZP_WORD:122 , 
Potential registers zp ZP_DWORD:124 [ div32u16u::return#0 ] : zp ZP_DWORD:124 , 
Potential registers zp ZP_BYTE:128 [ divr16u::$1 ] : zp ZP_BYTE:128 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:129 [ divr16u::$2 ] : zp ZP_BYTE:129 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:130 [ rem16u#1 ] : zp ZP_WORD:130 , 

REGISTER UPLIFT SCOPES
Uplift Scope [mul16u] 353.83: zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp ZP_BYTE:115 [ mul16u::$1 ] 170: zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] 4: zp ZP_WORD:99 [ mul16u::b#0 ] 4: zp ZP_DWORD:101 [ mul16u::return#2 ] 
Uplift Scope [print_str] 305.5: zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] 
Uplift Scope [divr16u] 106.92: zp ZP_WORD:44 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp ZP_WORD:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:128 [ divr16u::$1 ] 22: zp ZP_BYTE:129 [ divr16u::$2 ] 18.19: zp ZP_BYTE:50 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp ZP_WORD:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp ZP_WORD:116 [ divr16u::return#2 ] 4: zp ZP_WORD:120 [ divr16u::return#3 ] 
Uplift Scope [] 191.74: zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] 0.8: zp ZP_WORD:130 [ rem16u#1 ] 
Uplift Scope [sin16s] 27.5: zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:63 [ sin16s::return#0 ] 13: zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:67 [ sin16s::$6 ] 4: zp ZP_WORD:75 [ sin16s::x2#0 ] 4: zp ZP_WORD:83 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:89 [ sin16s::x4#0 ] 4: zp ZP_WORD:93 [ sin16s::x5#0 ] 4: zp ZP_WORD:95 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:79 [ sin16s::x3#0 ] 1: zp ZP_WORD:97 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:71 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:85 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:22 [ sin16s::isUpper#2 ] 
Uplift Scope [mulu16_sel] 24: zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] 21: zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp ZP_WORD:73 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:77 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:81 [ mulu16_sel::return#2 ] 4: zp ZP_WORD:87 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:91 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:105 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:109 [ mulu16_sel::$1 ] 1.71: zp ZP_WORD:113 [ mulu16_sel::return#12 ] 0.33: zp ZP_BYTE:33 [ mulu16_sel::select#5 ] 
Uplift Scope [sin16s_gen] 22: zp ZP_WORD:65 [ sin16s_gen::$1 ] 19.25: zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] 12.05: zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] 11: zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] 1.18: zp ZP_DWORD:59 [ sin16s_gen::step#0 ] 
Uplift Scope [print_cls] 33: zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ] 
Uplift Scope [main] 19.8: zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] 6.6: zp ZP_WORD:51 [ main::sw#0 ] 
Uplift Scope [print_byte] 10: zp ZP_BYTE:8 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] 4: zp ZP_BYTE:53 [ print_byte::$0 ] 4: zp ZP_BYTE:54 [ print_byte::$2 ] 
Uplift Scope [print_char] 14: zp ZP_BYTE:9 [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] 
Uplift Scope [div32u16u] 4: zp ZP_DWORD:55 [ div32u16u::return#2 ] 4: zp ZP_WORD:122 [ div32u16u::quotient_lo#0 ] 1.33: zp ZP_DWORD:124 [ div32u16u::return#0 ] 0.8: zp ZP_WORD:118 [ div32u16u::quotient_hi#0 ] 
Uplift Scope [print_sword] 9.58: zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] 
Uplift Scope [print_word] 

Uplifting [mul16u] best 25069 combination zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:40 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp ZP_WORD:99 [ mul16u::b#0 ] zp ZP_DWORD:101 [ mul16u::return#2 ] 
Uplifting [print_str] best 25069 combination zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] 
Uplifting [divr16u] best 24859 combination zp ZP_WORD:44 [ 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 ZP_WORD:48 [ 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 ZP_WORD:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:116 [ divr16u::return#2 ] zp ZP_WORD:120 [ divr16u::return#3 ] 
Uplifting [] best 24859 combination zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] zp ZP_WORD:130 [ rem16u#1 ] 
Uplifting [sin16s] best 24859 combination zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:63 [ sin16s::return#0 ] zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:67 [ sin16s::$6 ] zp ZP_WORD:75 [ sin16s::x2#0 ] zp ZP_WORD:83 [ sin16s::x3_6#0 ] zp ZP_WORD:89 [ sin16s::x4#0 ] zp ZP_WORD:93 [ sin16s::x5#0 ] zp ZP_WORD:95 [ sin16s::x5_128#0 ] zp ZP_WORD:79 [ sin16s::x3#0 ] zp ZP_WORD:97 [ sin16s::usinx#1 ] zp ZP_WORD:71 [ sin16s::x1#0 ] zp ZP_WORD:85 [ sin16s::usinx#0 ] zp ZP_BYTE:22 [ sin16s::isUpper#2 ] 
Uplifting [mulu16_sel] best 24843 combination zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:73 [ mulu16_sel::return#0 ] zp ZP_WORD:77 [ mulu16_sel::return#1 ] zp ZP_WORD:81 [ mulu16_sel::return#2 ] zp ZP_WORD:87 [ mulu16_sel::return#10 ] zp ZP_WORD:91 [ mulu16_sel::return#11 ] zp ZP_DWORD:105 [ mulu16_sel::$0 ] zp ZP_DWORD:109 [ mulu16_sel::$1 ] zp ZP_WORD:113 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] 
Uplifting [sin16s_gen] best 24843 combination zp ZP_WORD:65 [ sin16s_gen::$1 ] zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp ZP_DWORD:14 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp ZP_DWORD:59 [ sin16s_gen::step#0 ] 
Uplifting [print_cls] best 24843 combination zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ] 
Uplifting [main] best 24843 combination zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] zp ZP_WORD:51 [ main::sw#0 ] 
Uplifting [print_byte] best 24831 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$2 ] 
Uplifting [print_char] best 24819 combination reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] 
Uplifting [div32u16u] best 24819 combination zp ZP_DWORD:55 [ div32u16u::return#2 ] zp ZP_WORD:122 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:124 [ div32u16u::return#0 ] zp ZP_WORD:118 [ div32u16u::quotient_hi#0 ] 
Uplifting [print_sword] best 24819 combination zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] 
Uplifting [print_word] best 24819 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 24819 combination zp ZP_BYTE:22 [ sin16s::isUpper#2 ] 
Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:97 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp ZP_WORD:79 [ sin16s::x3#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:44 [ 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 ZP_WORD:130 [ rem16u#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 ] ] with [ zp ZP_WORD:51 [ main::sw#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp ZP_DWORD:67 [ sin16s::$6 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp ZP_WORD:63 [ sin16s::return#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp ZP_WORD:75 [ sin16s::x2#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp ZP_WORD:89 [ sin16s::x4#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] with [ zp ZP_WORD:99 [ mul16u::b#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp ZP_DWORD:101 [ mul16u::return#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:116 [ divr16u::return#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:120 [ divr16u::return#3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:55 [ div32u16u::return#2 ] ] with [ zp ZP_DWORD:59 [ sin16s_gen::step#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:55 [ div32u16u::return#2 sin16s_gen::step#0 ] ] with [ zp ZP_DWORD:124 [ div32u16u::return#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:73 [ mulu16_sel::return#0 ] ] with [ zp ZP_WORD:113 [ mulu16_sel::return#12 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:81 [ mulu16_sel::return#2 ] ] with [ zp ZP_WORD:83 [ sin16s::x3_6#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:91 [ mulu16_sel::return#11 ] ] with [ zp ZP_WORD:93 [ sin16s::x5#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:105 [ mulu16_sel::$0 ] ] with [ zp ZP_DWORD:109 [ mulu16_sel::$1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp ZP_WORD:65 [ sin16s_gen::$1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$1 ] ] with [ zp ZP_WORD:85 [ sin16s::usinx#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 ] ] with [ zp ZP_WORD:77 [ mulu16_sel::return#1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 ] ] with [ zp ZP_WORD:87 [ mulu16_sel::return#10 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 ] ] with [ zp ZP_DWORD:105 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp ZP_WORD:122 [ div32u16u::quotient_lo#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:73 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp ZP_WORD:81 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:73 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp ZP_WORD:91 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:73 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 ] ] with [ zp ZP_WORD:95 [ sin16s::x5_128#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:2 [ main::st1#2 main::st1#1 ] ] with [ zp ZP_WORD:12 [ print_cls::sc#2 print_cls::sc#1 ] ]
Coalescing zero page register [ zp ZP_WORD:2 [ main::st1#2 main::st1#1 print_cls::sc#2 print_cls::sc#1 ] ] with [ zp ZP_WORD:18 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ]
Coalescing zero page register [ zp ZP_WORD:2 [ main::st1#2 main::st1#1 print_cls::sc#2 print_cls::sc#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp ZP_WORD:44 [ 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 ] ]
Coalescing zero page register [ zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] with [ zp ZP_WORD:20 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ]
Coalescing zero page register [ zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 sin16s_gen::i#2 sin16s_gen::i#1 ] ] with [ zp ZP_WORD:46 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ]
Coalescing zero page register [ zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 main::sw#0 ] ] with [ zp ZP_WORD:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$1 sin16s::usinx#0 ] ]
Coalescing zero page register [ zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 main::sw#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$1 sin16s::usinx#0 ] ] with [ zp ZP_WORD:48 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ]
Coalescing zero page register [ zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 ] ] with [ zp ZP_WORD:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ]
Coalescing zero page register [ zp ZP_WORD:10 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp ZP_WORD:118 [ div32u16u::quotient_hi#0 ] ]
Coalescing zero page register [ zp ZP_DWORD:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 ] ] with [ zp ZP_DWORD:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ]
Coalescing zero page register [ zp ZP_WORD:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] ] with [ zp ZP_WORD:73 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ]
Allocated (was zp ZP_WORD:10) zp ZP_WORD:8 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 div32u16u::quotient_hi#0 ]
Allocated (was zp ZP_DWORD:14) zp ZP_DWORD:10 [ sin16s_gen::x#2 sin16s_gen::x#1 ]
Allocated (was zp ZP_BYTE:22) zp ZP_BYTE:14 [ sin16s::isUpper#2 ]
Allocated (was zp ZP_DWORD:23) zp ZP_DWORD:15 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ]
Allocated (was zp ZP_WORD:31) zp ZP_WORD:19 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]
Allocated (was zp ZP_WORD:34) zp ZP_WORD:21 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
Allocated (was zp ZP_DWORD:40) zp ZP_DWORD:23 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
Allocated (was zp ZP_DWORD:55) zp ZP_DWORD:27 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
Allocated (was zp ZP_WORD:71) zp ZP_WORD:31 [ sin16s::x1#0 ]

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
// Generates a 16-bit signed sinus
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 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
  .label print_line_cursor = $400
  .label rem16u = 2
  .label print_char_cursor = 8
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @40 [phi:@begin->@40]
b40_from_bbegin:
  jmp b40
//SEG5 @40
b40:
//SEG6 [2] call main 
//SEG7 [4] phi from @40 to main [phi:@40->main]
main_from_b40:
  jsr main
//SEG8 [3] phi from @40 to @end [phi:@40->@end]
bend_from_b40:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
    .label wavelength = $78
    .label sw = 6
    .label st1 = 2
  //SEG11 [5] call sin16s_gen 
  //SEG12 [58] phi from main to sin16s_gen [phi:main->sin16s_gen]
  sin16s_gen_from_main:
    jsr sin16s_gen
  //SEG13 [6] phi from main to main::@5 [phi:main->main::@5]
  b5_from_main:
    jmp b5
  //SEG14 main::@5
  b5:
  //SEG15 [7] call print_cls 
  //SEG16 [52] phi from main::@5 to print_cls [phi:main::@5->print_cls]
  print_cls_from_b5:
    jsr print_cls
  //SEG17 [8] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
  b1_from_b5:
  //SEG18 [8] phi (byte*) print_char_cursor#49 = (const byte*) print_line_cursor#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta print_char_cursor
    lda #>print_line_cursor
    sta print_char_cursor+1
  //SEG19 [8] phi (signed word*) main::st1#2 = (const signed word[120]) main::sintab1#0 [phi:main::@5->main::@1#1] -- pwsz1=pwsc1 
    lda #<sintab1
    sta st1
    lda #>sintab1
    sta st1+1
    jmp b1
  //SEG20 [8] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
  b1_from_b8:
  //SEG21 [8] phi (byte*) print_char_cursor#49 = (byte*) print_char_cursor#2 [phi:main::@8->main::@1#0] -- register_copy 
  //SEG22 [8] phi (signed word*) main::st1#2 = (signed word*) main::st1#1 [phi:main::@8->main::@1#1] -- register_copy 
    jmp b1
  //SEG23 main::@1
  b1:
  //SEG24 [9] (signed word) main::sw#0 ← *((signed word*) main::st1#2) -- vwsz1=_deref_pwsz2 
    ldy #0
    lda (st1),y
    sta sw
    iny
    lda (st1),y
    sta sw+1
  //SEG25 [10] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 -- vwsz1_lt_0_then_la1 
    lda sw+1
    bmi b2_from_b1
  //SEG26 [11] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
  b3_from_b1:
    jmp b3
  //SEG27 main::@3
  b3:
  //SEG28 [12] call print_str 
  //SEG29 [21] phi from main::@3 to print_str [phi:main::@3->print_str]
  print_str_from_b3:
  //SEG30 [21] phi (byte*) print_char_cursor#51 = (byte*) print_char_cursor#49 [phi:main::@3->print_str#0] -- register_copy 
  //SEG31 [21] phi (byte*) print_str::str#5 = (const string) main::str1 [phi:main::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
  //SEG32 [13] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2]
  b2_from_b1:
  b2_from_b3:
  //SEG33 [13] phi (byte*) print_char_cursor#48 = (byte*) print_char_cursor#49 [phi:main::@1/main::@3->main::@2#0] -- register_copy 
    jmp b2
  //SEG34 main::@2
  b2:
  //SEG35 [14] (signed word) print_sword::w#1 ← (signed word) main::sw#0
  //SEG36 [15] call print_sword 
    jsr print_sword
  //SEG37 [16] phi from main::@2 to main::@7 [phi:main::@2->main::@7]
  b7_from_b2:
    jmp b7
  //SEG38 main::@7
  b7:
  //SEG39 [17] call print_str 
  //SEG40 [21] phi from main::@7 to print_str [phi:main::@7->print_str]
  print_str_from_b7:
  //SEG41 [21] phi (byte*) print_char_cursor#51 = (byte*) print_char_cursor#12 [phi:main::@7->print_str#0] -- register_copy 
  //SEG42 [21] phi (byte*) print_str::str#5 = (const string) main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b8
  //SEG43 main::@8
  b8:
  //SEG44 [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 
    lda st1
    clc
    adc #2
    sta st1
    bcc !+
    inc st1+1
  !:
  //SEG45 [19] if((signed word*) main::st1#1<(const signed word[120]) main::sintab1#0+(const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 -- pwsz1_lt_pwsc1_then_la1 
    lda st1+1
    cmp #>sintab1+wavelength*2
    bcc b1_from_b8
    bne !+
    lda st1
    cmp #<sintab1+wavelength*2
    bcc b1_from_b8
  !:
    jmp breturn
  //SEG46 main::@return
  breturn:
  //SEG47 [20] return 
    rts
    str: .text "   @"
    str1: .text " @"
    sintab1: .fill 2*$78, 0
}
//SEG48 print_str
// Print a zero-terminated string
// print_str(byte* zeropage(4) str)
print_str: {
    .label str = 4
  //SEG49 [22] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1]
  b1_from_print_str:
  b1_from_b2:
  //SEG50 [22] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#51 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy 
  //SEG51 [22] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy 
    jmp b1
  //SEG52 print_str::@1
  b1:
  //SEG53 [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 
    ldy #0
    lda (str),y
    cmp #'@'
    bne b2
    jmp breturn
  //SEG54 print_str::@return
  breturn:
  //SEG55 [24] return 
    rts
  //SEG56 print_str::@2
  b2:
  //SEG57 [25] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (str),y
    ldy #0
    sta (print_char_cursor),y
  //SEG58 [26] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
  //SEG59 [27] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 -- pbuz1=_inc_pbuz1 
    inc str
    bne !+
    inc str+1
  !:
    jmp b1_from_b2
}
//SEG60 print_sword
// Print a signed word as HEX
// print_sword(signed word zeropage(6) w)
print_sword: {
    .label w = 6
  //SEG61 [28] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 -- vwsz1_ge_0_then_la1 
    lda w+1
    bpl b1_from_print_sword
  //SEG62 [29] phi from print_sword to print_sword::@2 [phi:print_sword->print_sword::@2]
  b2_from_print_sword:
    jmp b2
  //SEG63 print_sword::@2
  b2:
  //SEG64 [30] call print_char 
  //SEG65 [48] phi from print_sword::@2 to print_char [phi:print_sword::@2->print_char]
  print_char_from_b2:
  //SEG66 [48] phi (byte*) print_char_cursor#33 = (byte*) print_char_cursor#48 [phi:print_sword::@2->print_char#0] -- register_copy 
  //SEG67 [48] phi (byte) print_char::ch#3 = (byte) '-' [phi:print_sword::@2->print_char#1] -- vbuaa=vbuc1 
    lda #'-'
    jsr print_char
    jmp b4
  //SEG68 print_sword::@4
  b4:
  //SEG69 [31] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 -- vwsz1=_neg_vwsz1 
    sec
    lda w
    eor #$ff
    adc #0
    sta w
    lda w+1
    eor #$ff
    adc #0
    sta w+1
  //SEG70 [32] phi from print_sword print_sword::@4 to print_sword::@1 [phi:print_sword/print_sword::@4->print_sword::@1]
  b1_from_print_sword:
  b1_from_b4:
  //SEG71 [32] phi (byte*) print_char_cursor#43 = (byte*) print_char_cursor#48 [phi:print_sword/print_sword::@4->print_sword::@1#0] -- register_copy 
  //SEG72 [32] phi (signed word) print_sword::w#3 = (signed word) print_sword::w#1 [phi:print_sword/print_sword::@4->print_sword::@1#1] -- register_copy 
    jmp b1
  //SEG73 print_sword::@1
  b1:
  //SEG74 [33] call print_word 
    jsr print_word
    jmp breturn
  //SEG75 print_sword::@return
  breturn:
  //SEG76 [34] return 
    rts
}
//SEG77 print_word
// Print a word as HEX
print_word: {
  //SEG78 [35] (byte) print_byte::b#0 ← > (word)(signed word) print_sword::w#3 -- vbuxx=_hi_vwuz1 
    lda print_sword.w+1
    tax
  //SEG79 [36] call print_byte 
  //SEG80 [40] phi from print_word to print_byte [phi:print_word->print_byte]
  print_byte_from_print_word:
  //SEG81 [40] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#43 [phi:print_word->print_byte#0] -- register_copy 
  //SEG82 [40] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy 
    jsr print_byte
    jmp b1
  //SEG83 print_word::@1
  b1:
  //SEG84 [37] (byte) print_byte::b#1 ← < (word)(signed word) print_sword::w#3 -- vbuxx=_lo_vwuz1 
    lda print_sword.w
    tax
  //SEG85 [38] call print_byte 
  //SEG86 [40] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte]
  print_byte_from_b1:
  //SEG87 [40] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#12 [phi:print_word::@1->print_byte#0] -- register_copy 
  //SEG88 [40] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy 
    jsr print_byte
    jmp breturn
  //SEG89 print_word::@return
  breturn:
  //SEG90 [39] return 
    rts
}
//SEG91 print_byte
// Print a byte as HEX
// print_byte(byte register(X) b)
print_byte: {
  //SEG92 [41] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuxx_ror_4 
    txa
    lsr
    lsr
    lsr
    lsr
  //SEG93 [42] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa 
    tay
    lda print_hextab,y
  //SEG94 [43] call print_char 
  //SEG95 [48] phi from print_byte to print_char [phi:print_byte->print_char]
  print_char_from_print_byte:
  //SEG96 [48] phi (byte*) print_char_cursor#33 = (byte*) print_char_cursor#46 [phi:print_byte->print_char#0] -- register_copy 
  //SEG97 [48] phi (byte) print_char::ch#3 = (byte) print_char::ch#1 [phi:print_byte->print_char#1] -- register_copy 
    jsr print_char
    jmp b1
  //SEG98 print_byte::@1
  b1:
  //SEG99 [44] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word/dword/signed dword) 15 -- vbuaa=vbuxx_band_vbuc1 
    txa
    and #$f
  //SEG100 [45] (byte) print_char::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuaa 
    tay
    lda print_hextab,y
  //SEG101 [46] call print_char 
  //SEG102 [48] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
  print_char_from_b1:
  //SEG103 [48] phi (byte*) print_char_cursor#33 = (byte*) print_char_cursor#12 [phi:print_byte::@1->print_char#0] -- register_copy 
  //SEG104 [48] phi (byte) print_char::ch#3 = (byte) print_char::ch#2 [phi:print_byte::@1->print_char#1] -- register_copy 
    jsr print_char
    jmp breturn
  //SEG105 print_byte::@return
  breturn:
  //SEG106 [47] return 
    rts
}
//SEG107 print_char
// Print a single char
// print_char(byte register(A) ch)
print_char: {
  //SEG108 [49] *((byte*) print_char_cursor#33) ← (byte) print_char::ch#3 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (print_char_cursor),y
  //SEG109 [50] (byte*) print_char_cursor#12 ← ++ (byte*) print_char_cursor#33 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
    jmp breturn
  //SEG110 print_char::@return
  breturn:
  //SEG111 [51] return 
    rts
}
//SEG112 print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    .label sc = 2
  //SEG113 [53] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  b1_from_print_cls:
  //SEG114 [53] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta sc
    lda #>print_line_cursor
    sta sc+1
    jmp b1
  //SEG115 [53] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  b1_from_b1:
  //SEG116 [53] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
    jmp b1
  //SEG117 print_cls::@1
  b1:
  //SEG118 [54] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG119 [55] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG120 [56] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>print_line_cursor+$3e8
    bne b1_from_b1
    lda sc
    cmp #<print_line_cursor+$3e8
    bne b1_from_b1
    jmp breturn
  //SEG121 print_cls::@return
  breturn:
  //SEG122 [57] return 
    rts
}
//SEG123 sin16s_gen
// 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_gen(signed word* zeropage(2) sintab)
sin16s_gen: {
    .label _1 = 6
    .label step = $1b
    .label sintab = 2
    .label x = $a
    .label i = 4
  //SEG124 [59] call div32u16u 
  //SEG125 [132] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u]
  div32u16u_from_sin16s_gen:
    jsr div32u16u
  //SEG126 [60] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
    jmp b3
  //SEG127 sin16s_gen::@3
  b3:
  //SEG128 [61] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2
  //SEG129 [62] phi from sin16s_gen::@3 to sin16s_gen::@1 [phi:sin16s_gen::@3->sin16s_gen::@1]
  b1_from_b3:
  //SEG130 [62] phi (word) sin16s_gen::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta i
    lda #>0
    sta i+1
  //SEG131 [62] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[120]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- pwsz1=pwsc1 
    lda #<main.sintab1
    sta sintab
    lda #>main.sintab1
    sta sintab+1
  //SEG132 [62] phi (dword) sin16s_gen::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vduz1=vbuc1 
    lda #0
    sta x
    lda #0
    sta x+1
    sta x+2
    sta x+3
    jmp b1
  // u[4.28]
  //SEG133 [62] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->sin16s_gen::@1]
  b1_from_b4:
  //SEG134 [62] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy 
  //SEG135 [62] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy 
  //SEG136 [62] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy 
    jmp b1
  //SEG137 sin16s_gen::@1
  b1:
  //SEG138 [63] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 
    lda x
    sta sin16s.x
    lda x+1
    sta sin16s.x+1
    lda x+2
    sta sin16s.x+2
    lda x+3
    sta sin16s.x+3
  //SEG139 [64] call sin16s 
    jsr sin16s
  //SEG140 [65] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
    jmp b4
  //SEG141 sin16s_gen::@4
  b4:
  //SEG142 [66] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0
  //SEG143 [67] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 -- _deref_pwsz1=vwsz2 
    ldy #0
    lda _1
    sta (sintab),y
    iny
    lda _1+1
    sta (sintab),y
  //SEG144 [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 
    lda sintab
    clc
    adc #2
    sta sintab
    bcc !+
    inc sintab+1
  !:
  //SEG145 [69] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 
    lda x
    clc
    adc step
    sta x
    lda x+1
    adc step+1
    sta x+1
    lda x+2
    adc step+2
    sta x+2
    lda x+3
    adc step+3
    sta x+3
  //SEG146 [70] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1 
    inc i
    bne !+
    inc i+1
  !:
  //SEG147 [71] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 -- vwuz1_lt_vwuc1_then_la1 
    lda i+1
    cmp #>main.wavelength
    bcc b1_from_b4
    bne !+
    lda i
    cmp #<main.wavelength
    bcc b1_from_b4
  !:
    jmp breturn
  //SEG148 sin16s_gen::@return
  breturn:
  //SEG149 [72] return 
    rts
}
//SEG150 sin16s
// 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
// sin16s(dword zeropage($f) x)
sin16s: {
    .label _6 = $f
    .label x = $f
    .label return = 6
    .label x1 = $1f
    .label x2 = 8
    .label x3 = 8
    .label x3_6 = $13
    .label usinx = 6
    .label x4 = 8
    .label x5 = $13
    .label x5_128 = $13
    .label sinx = 6
    .label isUpper = $e
  //SEG151 [73] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_u4f28>>$10
    bcc b1_from_sin16s
    bne !+
    lda x+2
    cmp #<PI_u4f28>>$10
    bcc b1_from_sin16s
    bne !+
    lda x+1
    cmp #>PI_u4f28
    bcc b1_from_sin16s
    bne !+
    lda x
    cmp #<PI_u4f28
    bcc b1_from_sin16s
  !:
    jmp b4
  //SEG152 sin16s::@4
  b4:
  //SEG153 [74] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 -- vduz1=vduz1_minus_vduc1 
    lda x
    sec
    sbc #<PI_u4f28
    sta x
    lda x+1
    sbc #>PI_u4f28
    sta x+1
    lda x+2
    sbc #<PI_u4f28>>$10
    sta x+2
    lda x+3
    sbc #>PI_u4f28>>$10
    sta x+3
  //SEG154 [75] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
  b1_from_b4:
  //SEG155 [75] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #1
    sta isUpper
  //SEG156 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG157 [75] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
  b1_from_sin16s:
  //SEG158 [75] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta isUpper
  //SEG159 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG160 sin16s::@1
  b1:
  //SEG161 [76] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_HALF_u4f28>>$10
    bcc b2_from_b1
    bne !+
    lda x+2
    cmp #<PI_HALF_u4f28>>$10
    bcc b2_from_b1
    bne !+
    lda x+1
    cmp #>PI_HALF_u4f28
    bcc b2_from_b1
    bne !+
    lda x
    cmp #<PI_HALF_u4f28
    bcc b2_from_b1
  !:
    jmp b5
  //SEG162 sin16s::@5
  b5:
  //SEG163 [77] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 
    lda #<PI_u4f28
    sec
    sbc x
    sta x
    lda #>PI_u4f28
    sbc x+1
    sta x+1
    lda #<PI_u4f28>>$10
    sbc x+2
    sta x+2
    lda #>PI_u4f28>>$10
    sbc x+3
    sta x+3
  //SEG164 [78] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2]
  b2_from_b1:
  b2_from_b5:
  //SEG165 [78] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy 
    jmp b2
  //SEG166 sin16s::@2
  b2:
  //SEG167 [79] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vduz1=vduz1_rol_3 
    ldy #3
  !:
    asl _6
    rol _6+1
    rol _6+2
    rol _6+3
    dey
    bne !-
  //SEG168 [80] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 -- vwuz1=_hi_vduz2 
    lda _6+2
    sta x1
    lda _6+3
    sta x1+1
  //SEG169 [81] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v1
    lda x1+1
    sta mulu16_sel.v1+1
  //SEG170 [82] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG171 [83] call mulu16_sel 
  //SEG172 [113] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel]
  mulu16_sel_from_b2:
  //SEG173 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG174 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy 
  //SEG175 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG176 [84] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
    jmp b8
  //SEG177 sin16s::@8
  b8:
  //SEG178 [85] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta x2
    lda mulu16_sel.return+1
    sta x2+1
  //SEG179 [86] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
  //SEG180 [87] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG181 [88] call mulu16_sel 
  //SEG182 [113] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel]
  mulu16_sel_from_b8:
  //SEG183 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
  //SEG184 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@8->mulu16_sel#1] -- register_copy 
  //SEG185 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@8->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG186 [89] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta mulu16_sel.return_1
    lda mulu16_sel.return+1
    sta mulu16_sel.return_1+1
    jmp b9
  //SEG187 sin16s::@9
  b9:
  //SEG188 [90] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
  //SEG189 [91] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
  //SEG190 [92] call mulu16_sel 
  //SEG191 [113] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel]
  mulu16_sel_from_b9:
  //SEG192 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
  //SEG193 [113] phi (word) mulu16_sel::v2#5 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 [phi:sin16s::@9->mulu16_sel#1] -- vwuz1=vwuc1 
    lda #<$10000/6
    sta mulu16_sel.v2
    lda #>$10000/6
    sta mulu16_sel.v2+1
  //SEG194 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@9->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG195 [93] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
    jmp b10
  //SEG196 sin16s::@10
  b10:
  //SEG197 [94] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
  //SEG198 [95] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 
    lda x1
    sec
    sbc x3_6
    sta usinx
    lda x1+1
    sbc x3_6+1
    sta usinx+1
  //SEG199 [96] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
  //SEG200 [97] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG201 [98] call mulu16_sel 
  //SEG202 [113] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel]
  mulu16_sel_from_b10:
  //SEG203 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG204 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@10->mulu16_sel#1] -- register_copy 
  //SEG205 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@10->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG206 [99] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta mulu16_sel.return_10
    lda mulu16_sel.return+1
    sta mulu16_sel.return_10+1
    jmp b11
  //SEG207 sin16s::@11
  b11:
  //SEG208 [100] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
  //SEG209 [101] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
  //SEG210 [102] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG211 [103] call mulu16_sel 
  //SEG212 [113] phi from sin16s::@11 to mulu16_sel [phi:sin16s::@11->mulu16_sel]
  mulu16_sel_from_b11:
  //SEG213 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG214 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@11->mulu16_sel#1] -- register_copy 
  //SEG215 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@11->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG216 [104] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
    jmp b12
  //SEG217 sin16s::@12
  b12:
  //SEG218 [105] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
  //SEG219 [106] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vwuz1=vwuz1_ror_4 
    ldy #4
  !:
    lsr x5_128+1
    ror x5_128
    dey
    bne !-
  //SEG220 [107] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda usinx
    clc
    adc x5_128
    sta usinx
    lda usinx+1
    adc x5_128+1
    sta usinx+1
  //SEG221 [108] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15 -- vbuz1_eq_0_then_la1 
    lda isUpper
    cmp #0
    beq b15
    jmp b6
  //SEG222 sin16s::@6
  b6:
  //SEG223 [109] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 
    sec
    lda sinx
    eor #$ff
    adc #0
    sta sinx
    lda sinx+1
    eor #$ff
    adc #0
    sta sinx+1
  //SEG224 [110] phi from sin16s::@15 sin16s::@6 to sin16s::@3 [phi:sin16s::@15/sin16s::@6->sin16s::@3]
  b3_from_b15:
  b3_from_b6:
  //SEG225 [110] phi (signed word) sin16s::return#1 = (signed word~) sin16s::return#5 [phi:sin16s::@15/sin16s::@6->sin16s::@3#0] -- register_copy 
    jmp b3
  //SEG226 sin16s::@3
  b3:
    jmp breturn
  //SEG227 sin16s::@return
  breturn:
  //SEG228 [111] return 
    rts
  //SEG229 sin16s::@15
  b15:
  //SEG230 [112] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
    jmp b3_from_b15
}
//SEG231 mulu16_sel
// Calculate val*val for two unsigned word 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 zeropage(8) v1, word zeropage($13) v2, byte register(X) select)
mulu16_sel: {
    .label _0 = $f
    .label _1 = $f
    .label v1 = 8
    .label v2 = $13
    .label return = $13
    .label return_1 = 8
    .label return_10 = 8
  //SEG232 [114] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 
    lda v1
    sta mul16u.a
    lda v1+1
    sta mul16u.a+1
  //SEG233 [115] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5
  //SEG234 [116] call mul16u 
    jsr mul16u
  //SEG235 [117] (dword) mul16u::return#2 ← (dword) mul16u::res#2
    jmp b2
  //SEG236 mulu16_sel::@2
  b2:
  //SEG237 [118] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2
  //SEG238 [119] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx 
    cpx #0
    beq !e+
  !:
    asl _1
    rol _1+1
    rol _1+2
    rol _1+3
    dex
    bne !-
  !e:
  //SEG239 [120] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 
    lda _1+2
    sta return
    lda _1+3
    sta return+1
    jmp breturn
  //SEG240 mulu16_sel::@return
  breturn:
  //SEG241 [121] return 
    rts
}
//SEG242 mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($15) a, word zeropage($13) b)
mul16u: {
    .label mb = $17
    .label a = $15
    .label res = $f
    .label b = $13
    .label return = $f
  //SEG243 [122] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 -- vduz1=_dword_vwuz2 
    lda b
    sta mb
    lda b+1
    sta mb+1
    lda #0
    sta mb+2
    sta mb+3
  //SEG244 [123] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
  b1_from_mul16u:
  //SEG245 [123] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy 
  //SEG246 [123] phi (dword) mul16u::res#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 
    lda #0
    sta res
    lda #0
    sta res+1
    sta res+2
    sta res+3
  //SEG247 [123] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy 
    jmp b1
  //SEG248 mul16u::@1
  b1:
  //SEG249 [124] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 
    lda a
    bne b2
    lda a+1
    bne b2
    jmp breturn
  //SEG250 mul16u::@return
  breturn:
  //SEG251 [125] return 
    rts
  //SEG252 mul16u::@2
  b2:
  //SEG253 [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vwuz1_band_vbuc1 
    lda a
    and #1
  //SEG254 [127] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b4_from_b2
    jmp b7
  //SEG255 mul16u::@7
  b7:
  //SEG256 [128] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 
    lda res
    clc
    adc mb
    sta res
    lda res+1
    adc mb+1
    sta res+1
    lda res+2
    adc mb+2
    sta res+2
    lda res+3
    adc mb+3
    sta res+3
  //SEG257 [129] phi from mul16u::@2 mul16u::@7 to mul16u::@4 [phi:mul16u::@2/mul16u::@7->mul16u::@4]
  b4_from_b2:
  b4_from_b7:
  //SEG258 [129] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@7->mul16u::@4#0] -- register_copy 
    jmp b4
  //SEG259 mul16u::@4
  b4:
  //SEG260 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_ror_1 
    clc
    ror a+1
    ror a
  //SEG261 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vduz1=vduz1_rol_1 
    asl mb
    rol mb+1
    rol mb+2
    rol mb+3
  //SEG262 [123] phi from mul16u::@4 to mul16u::@1 [phi:mul16u::@4->mul16u::@1]
  b1_from_b4:
  //SEG263 [123] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@4->mul16u::@1#0] -- register_copy 
  //SEG264 [123] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@4->mul16u::@1#1] -- register_copy 
  //SEG265 [123] phi (word) mul16u::a#2 = (word) mul16u::a#0 [phi:mul16u::@4->mul16u::@1#2] -- register_copy 
    jmp b1
}
//SEG266 div32u16u
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
    .label quotient_hi = 8
    .label quotient_lo = 6
    .label return = $1b
  //SEG267 [133] call divr16u 
  //SEG268 [142] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
  divr16u_from_div32u16u:
  //SEG269 [142] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28#0 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28>>$10
    sta divr16u.dividend
    lda #>PI2_u4f28>>$10
    sta divr16u.dividend+1
  //SEG270 [142] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 
    lda #<0
    sta divr16u.rem
    lda #>0
    sta divr16u.rem+1
    jsr divr16u
  //SEG271 [134] (word) divr16u::return#2 ← (word) divr16u::return#0
    jmp b2
  //SEG272 div32u16u::@2
  b2:
  //SEG273 [135] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 
    lda divr16u.return
    sta quotient_hi
    lda divr16u.return+1
    sta quotient_hi+1
  //SEG274 [136] (word) divr16u::rem#4 ← (word) rem16u#1
  //SEG275 [137] call divr16u 
  //SEG276 [142] phi from div32u16u::@2 to divr16u [phi:div32u16u::@2->divr16u]
  divr16u_from_b2:
  //SEG277 [142] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28#0 [phi:div32u16u::@2->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28&$ffff
    sta divr16u.dividend
    lda #>PI2_u4f28&$ffff
    sta divr16u.dividend+1
  //SEG278 [142] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@2->divr16u#1] -- register_copy 
    jsr divr16u
  //SEG279 [138] (word) divr16u::return#3 ← (word) divr16u::return#0
    jmp b3
  //SEG280 div32u16u::@3
  b3:
  //SEG281 [139] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
  //SEG282 [140] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 
    lda quotient_hi
    sta return+2
    lda quotient_hi+1
    sta return+3
    lda quotient_lo
    sta return
    lda quotient_lo+1
    sta return+1
    jmp breturn
  //SEG283 div32u16u::@return
  breturn:
  //SEG284 [141] return 
    rts
}
//SEG285 divr16u
// Performs division on two 16 bit unsigned words 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 zeropage(4) dividend, word zeropage(2) rem)
divr16u: {
    .label rem = 2
    .label dividend = 4
    .label quotient = 6
    .label return = 6
  //SEG286 [143] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
  b1_from_divr16u:
  //SEG287 [143] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG288 [143] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 
    lda #<0
    sta quotient
    lda #>0
    sta quotient+1
  //SEG289 [143] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy 
  //SEG290 [143] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy 
    jmp b1
  //SEG291 [143] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
  b1_from_b3:
  //SEG292 [143] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
  //SEG293 [143] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
  //SEG294 [143] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
  //SEG295 [143] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
    jmp b1
  //SEG296 divr16u::@1
  b1:
  //SEG297 [144] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl rem
    rol rem+1
  //SEG298 [145] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 
    lda dividend+1
  //SEG299 [146] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 -- vbuaa=vbuaa_band_vbuc1 
    and #$80
  //SEG300 [147] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b2_from_b1
    jmp b4
  //SEG301 divr16u::@4
  b4:
  //SEG302 [148] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora rem
    sta rem
  //SEG303 [149] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
  b2_from_b1:
  b2_from_b4:
  //SEG304 [149] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
    jmp b2
  //SEG305 divr16u::@2
  b2:
  //SEG306 [150] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl dividend
    rol dividend+1
  //SEG307 [151] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl quotient
    rol quotient+1
  //SEG308 [152] if((word) divr16u::rem#6<(const word) main::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 
    lda rem+1
    cmp #>main.wavelength
    bcc b3_from_b2
    bne !+
    lda rem
    cmp #<main.wavelength
    bcc b3_from_b2
  !:
    jmp b5
  //SEG309 divr16u::@5
  b5:
  //SEG310 [153] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc quotient
    bne !+
    inc quotient+1
  !:
  //SEG311 [154] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda rem
    sec
    sbc #<main.wavelength
    sta rem
    lda rem+1
    sbc #>main.wavelength
    sta rem+1
  //SEG312 [155] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
  b3_from_b2:
  b3_from_b5:
  //SEG313 [155] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
  //SEG314 [155] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
    jmp b3
  //SEG315 divr16u::@3
  b3:
  //SEG316 [156] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG317 [157] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne b1_from_b3
    jmp b6
  //SEG318 divr16u::@6
  b6:
  //SEG319 [158] (word) rem16u#1 ← (word) divr16u::rem#11
    jmp breturn
  //SEG320 divr16u::@return
  breturn:
  //SEG321 [159] return 
    rts
}
  print_hextab: .text "0123456789abcdef"

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b40
Removing instruction jmp bend
Removing instruction jmp b5
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp b7
Removing instruction jmp b8
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp b1
Removing instruction jmp breturn
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 b4
Removing instruction jmp breturn
Removing instruction jmp b4
Removing instruction jmp b1
Removing instruction jmp b5
Removing instruction jmp b2
Removing instruction jmp b8
Removing instruction jmp b9
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp b12
Removing instruction jmp b6
Removing instruction jmp b3
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b7
Removing instruction jmp b4
Removing instruction jmp b2
Removing instruction jmp b3
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
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda sw+1
Removing instruction ldy #0
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
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b2_from_b1 with b2
Replacing label b1_from_b8 with b1
Replacing label b1_from_b8 with b1
Replacing label b1_from_b2 with b1
Replacing label b1_from_print_sword with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b4 with b1
Replacing label b1_from_b4 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_b15 with b3
Replacing label b4_from_b2 with b4
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
Removing instruction b40_from_bbegin:
Removing instruction b40:
Removing instruction main_from_b40:
Removing instruction bend_from_b40:
Removing instruction b5_from_main:
Removing instruction print_cls_from_b5:
Removing instruction b1_from_b8:
Removing instruction b3_from_b1:
Removing instruction print_str_from_b3:
Removing instruction b2_from_b1:
Removing instruction b2_from_b3:
Removing instruction b7_from_b2:
Removing instruction print_str_from_b7:
Removing instruction b1_from_print_str:
Removing instruction b1_from_b2:
Removing instruction b2_from_print_sword:
Removing instruction print_char_from_b2:
Removing instruction b1_from_print_sword:
Removing instruction b1_from_b4:
Removing instruction b1_from_b1:
Removing instruction b1_from_b3:
Removing instruction b1_from_b4:
Removing instruction b2_from_b1:
Removing instruction b2_from_b5:
Removing instruction mulu16_sel_from_b9:
Removing instruction b3_from_b15:
Removing instruction b3_from_b6:
Removing instruction breturn:
Removing instruction b4_from_b2:
Removing instruction b4_from_b7:
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:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction sin16s_gen_from_main:
Removing instruction b5:
Removing instruction b1_from_b5:
Removing instruction b3:
Removing instruction b7:
Removing instruction b8:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction b2:
Removing instruction b4:
Removing instruction breturn:
Removing instruction print_byte_from_print_word:
Removing instruction b1:
Removing instruction print_byte_from_b1:
Removing instruction breturn:
Removing instruction print_char_from_print_byte:
Removing instruction b1:
Removing instruction print_char_from_b1:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction b1_from_print_cls:
Removing instruction breturn:
Removing instruction div32u16u_from_sin16s_gen:
Removing instruction b3:
Removing instruction b4:
Removing instruction breturn:
Removing instruction b4:
Removing instruction b1_from_b4:
Removing instruction b5:
Removing instruction mulu16_sel_from_b2:
Removing instruction b8:
Removing instruction mulu16_sel_from_b8:
Removing instruction b9:
Removing instruction b10:
Removing instruction mulu16_sel_from_b10:
Removing instruction b11:
Removing instruction mulu16_sel_from_b11:
Removing instruction b12:
Removing instruction b6:
Removing instruction b2:
Removing instruction breturn:
Removing instruction b1_from_mul16u:
Removing instruction breturn:
Removing instruction b7:
Removing instruction b1_from_b4:
Removing instruction divr16u_from_div32u16u:
Removing instruction b2:
Removing instruction divr16u_from_b2:
Removing instruction b3:
Removing instruction breturn:
Removing instruction b1_from_divr16u:
Removing instruction b4:
Removing instruction b5:
Removing instruction b6:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Skipping double jump to b3 in beq b15
Succesful ASM optimization Pass5DoubleJumpElimination
Relabelling long label b1_from_sin16s to b4
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction bbegin:
Removing instruction b15:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction jmp b3
Succesful ASM optimization Pass5UnreachableCodeElimination

FINAL SYMBOL TABLE
(label) @40
(label) @begin
(label) @end
(word) PI2_u4f12
(dword) PI2_u4f28
(const dword) PI2_u4f28#0 PI2_u4f28 = (dword/signed dword) 1686629713
(word) PI_HALF_u4f12
(dword) PI_HALF_u4f28
(const dword) PI_HALF_u4f28#0 PI_HALF_u4f28 = (dword/signed dword) 421657428
(word) PI_u4f12
(dword) PI_u4f28
(const dword) PI_u4f28#0 PI_u4f28 = (dword/signed dword) 843314857
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(label) div32u16u::@2
(label) div32u16u::@3
(label) div32u16u::@return
(dword) div32u16u::dividend
(word) div32u16u::divisor
(dword) div32u16u::quotient
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:8 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:6 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp ZP_DWORD:27 1.3333333333333333
(dword) div32u16u::return#2 return zp ZP_DWORD:27 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.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 ZP_WORD:4 2.75
(word) divr16u::dividend#3 dividend zp ZP_WORD:4 5.0
(word) divr16u::dividend#5 dividend zp ZP_WORD:4 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp ZP_WORD:6 16.5
(word) divr16u::quotient#2 quotient zp ZP_WORD:6 11.0
(word) divr16u::quotient#3 quotient zp ZP_WORD:6 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp ZP_WORD:2 8.25
(word) divr16u::rem#1 rem zp ZP_WORD:2 22.0
(word) divr16u::rem#10 rem zp ZP_WORD:2 4.0
(word) divr16u::rem#11 rem zp ZP_WORD:2 11.666666666666666
(word) divr16u::rem#2 rem zp ZP_WORD:2 22.0
(word) divr16u::rem#4 rem zp ZP_WORD:2 4.0
(word) divr16u::rem#5 rem zp ZP_WORD:2 24.0
(word) divr16u::rem#6 rem zp ZP_WORD:2 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp ZP_WORD:6 5.285714285714286
(word) divr16u::return#2 return zp ZP_WORD:6 4.0
(word) divr16u::return#3 return zp ZP_WORD:6 4.0
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@5
(label) main::@7
(label) main::@8
(label) main::@return
(signed word[120]) main::sintab1
(const signed word[120]) main::sintab1#0 sintab1 = { fill( 120, 0) }
(signed word*) main::st1
(signed word*) main::st1#1 st1 zp ZP_WORD:2 16.5
(signed word*) main::st1#2 st1 zp ZP_WORD:2 3.3000000000000003
(const string) main::str str = (string) "   @"
(const string) main::str1 str1 = (string) " @"
(signed word) main::sw
(signed word) main::sw#0 sw zp ZP_WORD:6 6.6000000000000005
(word) main::wavelength
(const word) main::wavelength#0 wavelength = (byte/signed byte/word/signed word/dword/signed dword) 120
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte/word~) mul16u::$1 reg byte a 202.0
(label) mul16u::@1
(label) mul16u::@2
(label) mul16u::@4
(label) mul16u::@7
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp ZP_WORD:21 101.0
(word) mul16u::a#1 a zp ZP_WORD:21 1.3333333333333333
(word) mul16u::a#2 a zp ZP_WORD:21 67.66666666666666
(word) mul16u::b
(word) mul16u::b#0 b zp ZP_WORD:19 4.0
(dword) mul16u::mb
(dword) mul16u::mb#0 mb zp ZP_DWORD:23 4.0
(dword) mul16u::mb#1 mb zp ZP_DWORD:23 202.0
(dword) mul16u::mb#2 mb zp ZP_DWORD:23 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp ZP_DWORD:15 202.0
(dword) mul16u::res#2 res zp ZP_DWORD:15 50.83333333333333
(dword) mul16u::res#6 res zp ZP_DWORD:15 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp ZP_DWORD:15 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 $0 zp ZP_DWORD:15 4.0
(dword~) mulu16_sel::$1 $1 zp ZP_DWORD:15 4.0
(label) mulu16_sel::@2
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp ZP_WORD:19 4.0
(word) mulu16_sel::return#1 return#1 zp ZP_WORD:8 4.0
(word) mulu16_sel::return#10 return#10 zp ZP_WORD:8 4.0
(word) mulu16_sel::return#11 return zp ZP_WORD:19 4.0
(word) mulu16_sel::return#12 return zp ZP_WORD:19 1.714285714285714
(word) mulu16_sel::return#2 return zp ZP_WORD:19 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp ZP_WORD:8 2.0
(word) mulu16_sel::v1#1 v1 zp ZP_WORD:8 2.0
(word) mulu16_sel::v1#2 v1 zp ZP_WORD:8 4.0
(word) mulu16_sel::v1#3 v1 zp ZP_WORD:8 2.0
(word) mulu16_sel::v1#4 v1 zp ZP_WORD:8 2.0
(word) mulu16_sel::v1#5 v1 zp ZP_WORD:8 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp ZP_WORD:19 4.0
(word) mulu16_sel::v2#1 v2 zp ZP_WORD:19 4.0
(word) mulu16_sel::v2#3 v2 zp ZP_WORD:19 4.0
(word) mulu16_sel::v2#4 v2 zp ZP_WORD:19 4.0
(word) mulu16_sel::v2#5 v2 zp ZP_WORD:19 5.0
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0 reg byte x 4.0
(byte) print_byte::b#1 reg byte x 4.0
(byte) print_byte::b#2 reg byte x 2.0
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#1 reg byte a 4.0
(byte) print_char::ch#2 reg byte a 4.0
(byte) print_char::ch#3 reg byte a 6.0
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:8 101.0
(byte*) print_char_cursor#12 print_char_cursor zp ZP_WORD:8 1.1176470588235294
(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:8 40.875
(byte*) print_char_cursor#33 print_char_cursor zp ZP_WORD:8 5.0
(byte*) print_char_cursor#43 print_char_cursor zp ZP_WORD:8 3.0
(byte*) print_char_cursor#46 print_char_cursor zp ZP_WORD:8 2.0
(byte*) print_char_cursor#48 print_char_cursor zp ZP_WORD:8 6.5
(byte*) print_char_cursor#49 print_char_cursor zp ZP_WORD:8 8.25
(byte*) print_char_cursor#51 print_char_cursor zp ZP_WORD:8 24.0
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
(byte[]) print_hextab
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor
(const byte*) print_line_cursor#0 print_line_cursor = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) print_screen
(void()) print_str((byte*) print_str::str)
(label) print_str::@1
(label) print_str::@2
(label) print_str::@return
(byte*) print_str::str
(byte*) print_str::str#0 str zp ZP_WORD:4 202.0
(byte*) print_str::str#3 str zp ZP_WORD:4 101.5
(byte*) print_str::str#5 str zp ZP_WORD:4 2.0
(void()) print_sword((signed word) print_sword::w)
(label) print_sword::@1
(label) print_sword::@2
(label) print_sword::@4
(label) print_sword::@return
(signed word) print_sword::w
(signed word) print_sword::w#0 w zp ZP_WORD:6 4.0
(signed word) print_sword::w#1 w zp ZP_WORD:6 4.25
(signed word) print_sword::w#3 w zp ZP_WORD:6 1.3333333333333333
(void()) print_word((word) print_word::w)
(label) print_word::@1
(label) print_word::@return
(word) print_word::w
(signed word) rem16s
(word) rem16u
(word) rem16u#1 rem16u zp ZP_WORD:2 0.8
(signed byte) rem8s
(byte) rem8u
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$6 $6 zp ZP_DWORD:15 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
(label) sin16s::@12
(label) sin16s::@15
(label) sin16s::@2
(label) sin16s::@3
(label) sin16s::@4
(label) sin16s::@5
(label) sin16s::@6
(label) sin16s::@8
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp ZP_BYTE:14 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp ZP_WORD:6 22.0
(signed word) sin16s::return#1 return zp ZP_WORD:6 5.0
(signed word~) sin16s::return#5 return zp ZP_WORD:6 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp ZP_WORD:6 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp ZP_WORD:6 0.3333333333333333
(word) sin16s::usinx#1 usinx zp ZP_WORD:6 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp ZP_DWORD:15 8.5
(dword) sin16s::x#1 x zp ZP_DWORD:15 4.0
(dword) sin16s::x#2 x zp ZP_DWORD:15 4.0
(dword) sin16s::x#4 x zp ZP_DWORD:15 5.0
(dword) sin16s::x#6 x zp ZP_DWORD:15 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp ZP_WORD:31 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp ZP_WORD:8 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp ZP_WORD:8 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp ZP_WORD:19 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp ZP_WORD:8 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp ZP_WORD:19 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:19 4.0
(void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength)
(signed word~) sin16s_gen::$1 $1 zp ZP_WORD:6 22.0
(label) sin16s_gen::@1
(label) sin16s_gen::@3
(label) sin16s_gen::@4
(label) sin16s_gen::@return
(word) sin16s_gen::i
(word) sin16s_gen::i#1 i zp ZP_WORD:4 16.5
(word) sin16s_gen::i#2 i zp ZP_WORD:4 2.75
(signed word*) sin16s_gen::sintab
(signed word*) sin16s_gen::sintab#0 sintab zp ZP_WORD:2 5.5
(signed word*) sin16s_gen::sintab#2 sintab zp ZP_WORD:2 5.5
(dword) sin16s_gen::step
(dword) sin16s_gen::step#0 step zp ZP_DWORD:27 1.1818181818181819
(word) sin16s_gen::wavelength
(dword) sin16s_gen::x
(dword) sin16s_gen::x#1 x zp ZP_DWORD:10 7.333333333333333
(dword) sin16s_gen::x#2 x zp ZP_DWORD:10 4.714285714285714

zp ZP_WORD:2 [ main::st1#2 main::st1#1 print_cls::sc#2 print_cls::sc#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 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 ]
zp ZP_WORD:4 [ print_str::str#3 print_str::str#5 print_str::str#0 sin16s_gen::i#2 sin16s_gen::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
zp ZP_WORD:6 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 main::sw#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$1 sin16s::usinx#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ]
reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ]
zp ZP_WORD:8 [ print_char_cursor#33 print_char_cursor#46 print_char_cursor#43 print_char_cursor#51 print_char_cursor#48 print_char_cursor#49 print_char_cursor#2 print_char_cursor#12 print_char_cursor#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 div32u16u::quotient_hi#0 ]
zp ZP_DWORD:10 [ sin16s_gen::x#2 sin16s_gen::x#1 ]
zp ZP_BYTE:14 [ sin16s::isUpper#2 ]
zp ZP_DWORD:15 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ]
zp ZP_WORD:19 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]
reg byte x [ mulu16_sel::select#5 ]
zp ZP_WORD:21 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
zp ZP_DWORD:23 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
zp ZP_DWORD:27 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
zp ZP_WORD:31 [ sin16s::x1#0 ]
reg byte a [ mul16u::$1 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]


FINAL ASSEMBLER
Score: 20863

//SEG0 File Comments
// Generates a 16-bit signed sinus
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 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
  .label print_line_cursor = $400
  .label rem16u = 2
  .label print_char_cursor = 8
//SEG3 @begin
//SEG4 [1] phi from @begin to @40 [phi:@begin->@40]
//SEG5 @40
//SEG6 [2] call main 
//SEG7 [4] phi from @40 to main [phi:@40->main]
//SEG8 [3] phi from @40 to @end [phi:@40->@end]
//SEG9 @end
//SEG10 main
main: {
    .label wavelength = $78
    .label sw = 6
    .label st1 = 2
  //SEG11 [5] call sin16s_gen 
  //SEG12 [58] phi from main to sin16s_gen [phi:main->sin16s_gen]
    jsr sin16s_gen
  //SEG13 [6] phi from main to main::@5 [phi:main->main::@5]
  //SEG14 main::@5
  //SEG15 [7] call print_cls 
  //SEG16 [52] phi from main::@5 to print_cls [phi:main::@5->print_cls]
    jsr print_cls
  //SEG17 [8] phi from main::@5 to main::@1 [phi:main::@5->main::@1]
  //SEG18 [8] phi (byte*) print_char_cursor#49 = (const byte*) print_line_cursor#0 [phi:main::@5->main::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta print_char_cursor
    lda #>print_line_cursor
    sta print_char_cursor+1
  //SEG19 [8] phi (signed word*) main::st1#2 = (const signed word[120]) main::sintab1#0 [phi:main::@5->main::@1#1] -- pwsz1=pwsc1 
    lda #<sintab1
    sta st1
    lda #>sintab1
    sta st1+1
  //SEG20 [8] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
  //SEG21 [8] phi (byte*) print_char_cursor#49 = (byte*) print_char_cursor#2 [phi:main::@8->main::@1#0] -- register_copy 
  //SEG22 [8] phi (signed word*) main::st1#2 = (signed word*) main::st1#1 [phi:main::@8->main::@1#1] -- register_copy 
  //SEG23 main::@1
  b1:
  //SEG24 [9] (signed word) main::sw#0 ← *((signed word*) main::st1#2) -- vwsz1=_deref_pwsz2 
    ldy #0
    lda (st1),y
    sta sw
    iny
    lda (st1),y
    sta sw+1
  //SEG25 [10] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 -- vwsz1_lt_0_then_la1 
    bmi b2
  //SEG26 [11] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
  //SEG27 main::@3
  //SEG28 [12] call print_str 
  //SEG29 [21] phi from main::@3 to print_str [phi:main::@3->print_str]
  //SEG30 [21] phi (byte*) print_char_cursor#51 = (byte*) print_char_cursor#49 [phi:main::@3->print_str#0] -- register_copy 
  //SEG31 [21] phi (byte*) print_str::str#5 = (const string) main::str1 [phi:main::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
  //SEG32 [13] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2]
  //SEG33 [13] phi (byte*) print_char_cursor#48 = (byte*) print_char_cursor#49 [phi:main::@1/main::@3->main::@2#0] -- register_copy 
  //SEG34 main::@2
  b2:
  //SEG35 [14] (signed word) print_sword::w#1 ← (signed word) main::sw#0
  //SEG36 [15] call print_sword 
    jsr print_sword
  //SEG37 [16] phi from main::@2 to main::@7 [phi:main::@2->main::@7]
  //SEG38 main::@7
  //SEG39 [17] call print_str 
  //SEG40 [21] phi from main::@7 to print_str [phi:main::@7->print_str]
  //SEG41 [21] phi (byte*) print_char_cursor#51 = (byte*) print_char_cursor#12 [phi:main::@7->print_str#0] -- register_copy 
  //SEG42 [21] phi (byte*) print_str::str#5 = (const string) main::str [phi:main::@7->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
  //SEG43 main::@8
  //SEG44 [18] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 
    lda st1
    clc
    adc #2
    sta st1
    bcc !+
    inc st1+1
  !:
  //SEG45 [19] if((signed word*) main::st1#1<(const signed word[120]) main::sintab1#0+(const word) main::wavelength#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@1 -- pwsz1_lt_pwsc1_then_la1 
    lda st1+1
    cmp #>sintab1+wavelength*2
    bcc b1
    bne !+
    lda st1
    cmp #<sintab1+wavelength*2
    bcc b1
  !:
  //SEG46 main::@return
  //SEG47 [20] return 
    rts
    str: .text "   @"
    str1: .text " @"
    sintab1: .fill 2*$78, 0
}
//SEG48 print_str
// Print a zero-terminated string
// print_str(byte* zeropage(4) str)
print_str: {
    .label str = 4
  //SEG49 [22] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1]
  //SEG50 [22] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#51 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy 
  //SEG51 [22] phi (byte*) print_str::str#3 = (byte*) print_str::str#5 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy 
  //SEG52 print_str::@1
  b1:
  //SEG53 [23] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 
    ldy #0
    lda (str),y
    cmp #'@'
    bne b2
  //SEG54 print_str::@return
  //SEG55 [24] return 
    rts
  //SEG56 print_str::@2
  b2:
  //SEG57 [25] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (str),y
    sta (print_char_cursor),y
  //SEG58 [26] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
  //SEG59 [27] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#3 -- pbuz1=_inc_pbuz1 
    inc str
    bne !+
    inc str+1
  !:
    jmp b1
}
//SEG60 print_sword
// Print a signed word as HEX
// print_sword(signed word zeropage(6) w)
print_sword: {
    .label w = 6
  //SEG61 [28] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 -- vwsz1_ge_0_then_la1 
    lda w+1
    bpl b1
  //SEG62 [29] phi from print_sword to print_sword::@2 [phi:print_sword->print_sword::@2]
  //SEG63 print_sword::@2
  //SEG64 [30] call print_char 
  //SEG65 [48] phi from print_sword::@2 to print_char [phi:print_sword::@2->print_char]
  //SEG66 [48] phi (byte*) print_char_cursor#33 = (byte*) print_char_cursor#48 [phi:print_sword::@2->print_char#0] -- register_copy 
  //SEG67 [48] phi (byte) print_char::ch#3 = (byte) '-' [phi:print_sword::@2->print_char#1] -- vbuaa=vbuc1 
    lda #'-'
    jsr print_char
  //SEG68 print_sword::@4
  //SEG69 [31] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#1 -- vwsz1=_neg_vwsz1 
    sec
    lda w
    eor #$ff
    adc #0
    sta w
    lda w+1
    eor #$ff
    adc #0
    sta w+1
  //SEG70 [32] phi from print_sword print_sword::@4 to print_sword::@1 [phi:print_sword/print_sword::@4->print_sword::@1]
  //SEG71 [32] phi (byte*) print_char_cursor#43 = (byte*) print_char_cursor#48 [phi:print_sword/print_sword::@4->print_sword::@1#0] -- register_copy 
  //SEG72 [32] phi (signed word) print_sword::w#3 = (signed word) print_sword::w#1 [phi:print_sword/print_sword::@4->print_sword::@1#1] -- register_copy 
  //SEG73 print_sword::@1
  b1:
  //SEG74 [33] call print_word 
    jsr print_word
  //SEG75 print_sword::@return
  //SEG76 [34] return 
    rts
}
//SEG77 print_word
// Print a word as HEX
print_word: {
  //SEG78 [35] (byte) print_byte::b#0 ← > (word)(signed word) print_sword::w#3 -- vbuxx=_hi_vwuz1 
    lda print_sword.w+1
    tax
  //SEG79 [36] call print_byte 
  //SEG80 [40] phi from print_word to print_byte [phi:print_word->print_byte]
  //SEG81 [40] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#43 [phi:print_word->print_byte#0] -- register_copy 
  //SEG82 [40] phi (byte) print_byte::b#2 = (byte) print_byte::b#0 [phi:print_word->print_byte#1] -- register_copy 
    jsr print_byte
  //SEG83 print_word::@1
  //SEG84 [37] (byte) print_byte::b#1 ← < (word)(signed word) print_sword::w#3 -- vbuxx=_lo_vwuz1 
    lda print_sword.w
    tax
  //SEG85 [38] call print_byte 
  //SEG86 [40] phi from print_word::@1 to print_byte [phi:print_word::@1->print_byte]
  //SEG87 [40] phi (byte*) print_char_cursor#46 = (byte*) print_char_cursor#12 [phi:print_word::@1->print_byte#0] -- register_copy 
  //SEG88 [40] phi (byte) print_byte::b#2 = (byte) print_byte::b#1 [phi:print_word::@1->print_byte#1] -- register_copy 
    jsr print_byte
  //SEG89 print_word::@return
  //SEG90 [39] return 
    rts
}
//SEG91 print_byte
// Print a byte as HEX
// print_byte(byte register(X) b)
print_byte: {
  //SEG92 [41] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuxx_ror_4 
    txa
    lsr
    lsr
    lsr
    lsr
  //SEG93 [42] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) -- vbuaa=pbuc1_derefidx_vbuaa 
    tay
    lda print_hextab,y
  //SEG94 [43] call print_char 
  //SEG95 [48] phi from print_byte to print_char [phi:print_byte->print_char]
  //SEG96 [48] phi (byte*) print_char_cursor#33 = (byte*) print_char_cursor#46 [phi:print_byte->print_char#0] -- register_copy 
  //SEG97 [48] phi (byte) print_char::ch#3 = (byte) print_char::ch#1 [phi:print_byte->print_char#1] -- register_copy 
    jsr print_char
  //SEG98 print_byte::@1
  //SEG99 [44] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte/signed byte/word/signed word/dword/signed dword) 15 -- vbuaa=vbuxx_band_vbuc1 
    txa
    and #$f
  //SEG100 [45] (byte) print_char::ch#2 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) -- vbuaa=pbuc1_derefidx_vbuaa 
    tay
    lda print_hextab,y
  //SEG101 [46] call print_char 
  //SEG102 [48] phi from print_byte::@1 to print_char [phi:print_byte::@1->print_char]
  //SEG103 [48] phi (byte*) print_char_cursor#33 = (byte*) print_char_cursor#12 [phi:print_byte::@1->print_char#0] -- register_copy 
  //SEG104 [48] phi (byte) print_char::ch#3 = (byte) print_char::ch#2 [phi:print_byte::@1->print_char#1] -- register_copy 
    jsr print_char
  //SEG105 print_byte::@return
  //SEG106 [47] return 
    rts
}
//SEG107 print_char
// Print a single char
// print_char(byte register(A) ch)
print_char: {
  //SEG108 [49] *((byte*) print_char_cursor#33) ← (byte) print_char::ch#3 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (print_char_cursor),y
  //SEG109 [50] (byte*) print_char_cursor#12 ← ++ (byte*) print_char_cursor#33 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
  //SEG110 print_char::@return
  //SEG111 [51] return 
    rts
}
//SEG112 print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    .label sc = 2
  //SEG113 [53] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  //SEG114 [53] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<print_line_cursor
    sta sc
    lda #>print_line_cursor
    sta sc+1
  //SEG115 [53] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  //SEG116 [53] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
  //SEG117 print_cls::@1
  b1:
  //SEG118 [54] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG119 [55] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG120 [56] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>print_line_cursor+$3e8
    bne b1
    lda sc
    cmp #<print_line_cursor+$3e8
    bne b1
  //SEG121 print_cls::@return
  //SEG122 [57] return 
    rts
}
//SEG123 sin16s_gen
// 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_gen(signed word* zeropage(2) sintab)
sin16s_gen: {
    .label _1 = 6
    .label step = $1b
    .label sintab = 2
    .label x = $a
    .label i = 4
  //SEG124 [59] call div32u16u 
  //SEG125 [132] phi from sin16s_gen to div32u16u [phi:sin16s_gen->div32u16u]
    jsr div32u16u
  //SEG126 [60] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
  //SEG127 sin16s_gen::@3
  //SEG128 [61] (dword) sin16s_gen::step#0 ← (dword) div32u16u::return#2
  //SEG129 [62] phi from sin16s_gen::@3 to sin16s_gen::@1 [phi:sin16s_gen::@3->sin16s_gen::@1]
  //SEG130 [62] phi (word) sin16s_gen::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta i
    sta i+1
  //SEG131 [62] phi (signed word*) sin16s_gen::sintab#2 = (const signed word[120]) main::sintab1#0 [phi:sin16s_gen::@3->sin16s_gen::@1#1] -- pwsz1=pwsc1 
    lda #<main.sintab1
    sta sintab
    lda #>main.sintab1
    sta sintab+1
  //SEG132 [62] phi (dword) sin16s_gen::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen::@3->sin16s_gen::@1#2] -- vduz1=vbuc1 
    lda #0
    sta x
    sta x+1
    sta x+2
    sta x+3
  // u[4.28]
  //SEG133 [62] phi from sin16s_gen::@4 to sin16s_gen::@1 [phi:sin16s_gen::@4->sin16s_gen::@1]
  //SEG134 [62] phi (word) sin16s_gen::i#2 = (word) sin16s_gen::i#1 [phi:sin16s_gen::@4->sin16s_gen::@1#0] -- register_copy 
  //SEG135 [62] phi (signed word*) sin16s_gen::sintab#2 = (signed word*) sin16s_gen::sintab#0 [phi:sin16s_gen::@4->sin16s_gen::@1#1] -- register_copy 
  //SEG136 [62] phi (dword) sin16s_gen::x#2 = (dword) sin16s_gen::x#1 [phi:sin16s_gen::@4->sin16s_gen::@1#2] -- register_copy 
  //SEG137 sin16s_gen::@1
  b1:
  //SEG138 [63] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 -- vduz1=vduz2 
    lda x
    sta sin16s.x
    lda x+1
    sta sin16s.x+1
    lda x+2
    sta sin16s.x+2
    lda x+3
    sta sin16s.x+3
  //SEG139 [64] call sin16s 
    jsr sin16s
  //SEG140 [65] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
  //SEG141 sin16s_gen::@4
  //SEG142 [66] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0
  //SEG143 [67] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 -- _deref_pwsz1=vwsz2 
    ldy #0
    lda _1
    sta (sintab),y
    iny
    lda _1+1
    sta (sintab),y
  //SEG144 [68] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 
    lda sintab
    clc
    adc #2
    sta sintab
    bcc !+
    inc sintab+1
  !:
  //SEG145 [69] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 -- vduz1=vduz1_plus_vduz2 
    lda x
    clc
    adc step
    sta x
    lda x+1
    adc step+1
    sta x+1
    lda x+2
    adc step+2
    sta x+2
    lda x+3
    adc step+3
    sta x+3
  //SEG146 [70] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 -- vwuz1=_inc_vwuz1 
    inc i
    bne !+
    inc i+1
  !:
  //SEG147 [71] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 -- vwuz1_lt_vwuc1_then_la1 
    lda i+1
    cmp #>main.wavelength
    bcc b1
    bne !+
    lda i
    cmp #<main.wavelength
    bcc b1
  !:
  //SEG148 sin16s_gen::@return
  //SEG149 [72] return 
    rts
}
//SEG150 sin16s
// 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
// sin16s(dword zeropage($f) x)
sin16s: {
    .label _6 = $f
    .label x = $f
    .label return = 6
    .label x1 = $1f
    .label x2 = 8
    .label x3 = 8
    .label x3_6 = $13
    .label usinx = 6
    .label x4 = 8
    .label x5 = $13
    .label x5_128 = $13
    .label sinx = 6
    .label isUpper = $e
  //SEG151 [73] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_u4f28>>$10
    bcc b4
    bne !+
    lda x+2
    cmp #<PI_u4f28>>$10
    bcc b4
    bne !+
    lda x+1
    cmp #>PI_u4f28
    bcc b4
    bne !+
    lda x
    cmp #<PI_u4f28
    bcc b4
  !:
  //SEG152 sin16s::@4
  //SEG153 [74] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 -- vduz1=vduz1_minus_vduc1 
    lda x
    sec
    sbc #<PI_u4f28
    sta x
    lda x+1
    sbc #>PI_u4f28
    sta x+1
    lda x+2
    sbc #<PI_u4f28>>$10
    sta x+2
    lda x+3
    sbc #>PI_u4f28>>$10
    sta x+3
  //SEG154 [75] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
  //SEG155 [75] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #1
    sta isUpper
  //SEG156 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG157 [75] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
  b4:
  //SEG158 [75] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta isUpper
  //SEG159 [75] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy 
  //SEG160 sin16s::@1
  b1:
  //SEG161 [76] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_HALF_u4f28>>$10
    bcc b2
    bne !+
    lda x+2
    cmp #<PI_HALF_u4f28>>$10
    bcc b2
    bne !+
    lda x+1
    cmp #>PI_HALF_u4f28
    bcc b2
    bne !+
    lda x
    cmp #<PI_HALF_u4f28
    bcc b2
  !:
  //SEG162 sin16s::@5
  //SEG163 [77] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 
    lda #<PI_u4f28
    sec
    sbc x
    sta x
    lda #>PI_u4f28
    sbc x+1
    sta x+1
    lda #<PI_u4f28>>$10
    sbc x+2
    sta x+2
    lda #>PI_u4f28>>$10
    sbc x+3
    sta x+3
  //SEG164 [78] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2]
  //SEG165 [78] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy 
  //SEG166 sin16s::@2
  b2:
  //SEG167 [79] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vduz1=vduz1_rol_3 
    ldy #3
  !:
    asl _6
    rol _6+1
    rol _6+2
    rol _6+3
    dey
    bne !-
  //SEG168 [80] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 -- vwuz1=_hi_vduz2 
    lda _6+2
    sta x1
    lda _6+3
    sta x1+1
  //SEG169 [81] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v1
    lda x1+1
    sta mulu16_sel.v1+1
  //SEG170 [82] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG171 [83] call mulu16_sel 
  //SEG172 [113] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel]
  //SEG173 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG174 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy 
  //SEG175 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG176 [84] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
  //SEG177 sin16s::@8
  //SEG178 [85] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta x2
    lda mulu16_sel.return+1
    sta x2+1
  //SEG179 [86] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
  //SEG180 [87] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG181 [88] call mulu16_sel 
  //SEG182 [113] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel]
  //SEG183 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
  //SEG184 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@8->mulu16_sel#1] -- register_copy 
  //SEG185 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@8->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG186 [89] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta mulu16_sel.return_1
    lda mulu16_sel.return+1
    sta mulu16_sel.return_1+1
  //SEG187 sin16s::@9
  //SEG188 [90] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
  //SEG189 [91] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
  //SEG190 [92] call mulu16_sel 
  //SEG191 [113] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel]
  //SEG192 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
  //SEG193 [113] phi (word) mulu16_sel::v2#5 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 [phi:sin16s::@9->mulu16_sel#1] -- vwuz1=vwuc1 
    lda #<$10000/6
    sta mulu16_sel.v2
    lda #>$10000/6
    sta mulu16_sel.v2+1
  //SEG194 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@9->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG195 [93] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
  //SEG196 sin16s::@10
  //SEG197 [94] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
  //SEG198 [95] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 
    lda x1
    sec
    sbc x3_6
    sta usinx
    lda x1+1
    sbc x3_6+1
    sta usinx+1
  //SEG199 [96] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
  //SEG200 [97] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG201 [98] call mulu16_sel 
  //SEG202 [113] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel]
  //SEG203 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG204 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@10->mulu16_sel#1] -- register_copy 
  //SEG205 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@10->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG206 [99] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta mulu16_sel.return_10
    lda mulu16_sel.return+1
    sta mulu16_sel.return_10+1
  //SEG207 sin16s::@11
  //SEG208 [100] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
  //SEG209 [101] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
  //SEG210 [102] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG211 [103] call mulu16_sel 
  //SEG212 [113] phi from sin16s::@11 to mulu16_sel [phi:sin16s::@11->mulu16_sel]
  //SEG213 [113] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG214 [113] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@11->mulu16_sel#1] -- register_copy 
  //SEG215 [113] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@11->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG216 [104] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
  //SEG217 sin16s::@12
  //SEG218 [105] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
  //SEG219 [106] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vwuz1=vwuz1_ror_4 
    ldy #4
  !:
    lsr x5_128+1
    ror x5_128
    dey
    bne !-
  //SEG220 [107] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda usinx
    clc
    adc x5_128
    sta usinx
    lda usinx+1
    adc x5_128+1
    sta usinx+1
  //SEG221 [108] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15 -- vbuz1_eq_0_then_la1 
    lda isUpper
    cmp #0
    beq b3
  //SEG222 sin16s::@6
  //SEG223 [109] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 
    sec
    lda sinx
    eor #$ff
    adc #0
    sta sinx
    lda sinx+1
    eor #$ff
    adc #0
    sta sinx+1
  //SEG224 [110] phi from sin16s::@15 sin16s::@6 to sin16s::@3 [phi:sin16s::@15/sin16s::@6->sin16s::@3]
  //SEG225 [110] phi (signed word) sin16s::return#1 = (signed word~) sin16s::return#5 [phi:sin16s::@15/sin16s::@6->sin16s::@3#0] -- register_copy 
  //SEG226 sin16s::@3
  b3:
  //SEG227 sin16s::@return
  //SEG228 [111] return 
    rts
  //SEG229 sin16s::@15
  //SEG230 [112] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
}
//SEG231 mulu16_sel
// Calculate val*val for two unsigned word 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 zeropage(8) v1, word zeropage($13) v2, byte register(X) select)
mulu16_sel: {
    .label _0 = $f
    .label _1 = $f
    .label v1 = 8
    .label v2 = $13
    .label return = $13
    .label return_1 = 8
    .label return_10 = 8
  //SEG232 [114] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 
    lda v1
    sta mul16u.a
    lda v1+1
    sta mul16u.a+1
  //SEG233 [115] (word) mul16u::b#0 ← (word) mulu16_sel::v2#5
  //SEG234 [116] call mul16u 
    jsr mul16u
  //SEG235 [117] (dword) mul16u::return#2 ← (dword) mul16u::res#2
  //SEG236 mulu16_sel::@2
  //SEG237 [118] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#2
  //SEG238 [119] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx 
    cpx #0
    beq !e+
  !:
    asl _1
    rol _1+1
    rol _1+2
    rol _1+3
    dex
    bne !-
  !e:
  //SEG239 [120] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 
    lda _1+2
    sta return
    lda _1+3
    sta return+1
  //SEG240 mulu16_sel::@return
  //SEG241 [121] return 
    rts
}
//SEG242 mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($15) a, word zeropage($13) b)
mul16u: {
    .label mb = $17
    .label a = $15
    .label res = $f
    .label b = $13
    .label return = $f
  //SEG243 [122] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#0 -- vduz1=_dword_vwuz2 
    lda b
    sta mb
    lda b+1
    sta mb+1
    lda #0
    sta mb+2
    sta mb+3
  //SEG244 [123] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
  //SEG245 [123] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy 
  //SEG246 [123] phi (dword) mul16u::res#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 
    sta res
    sta res+1
    sta res+2
    sta res+3
  //SEG247 [123] phi (word) mul16u::a#2 = (word) mul16u::a#1 [phi:mul16u->mul16u::@1#2] -- register_copy 
  //SEG248 mul16u::@1
  b1:
  //SEG249 [124] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 
    lda a
    bne b2
    lda a+1
    bne b2
  //SEG250 mul16u::@return
  //SEG251 [125] return 
    rts
  //SEG252 mul16u::@2
  b2:
  //SEG253 [126] (byte/word~) mul16u::$1 ← (word) mul16u::a#2 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vwuz1_band_vbuc1 
    lda a
    and #1
  //SEG254 [127] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b4
  //SEG255 mul16u::@7
  //SEG256 [128] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 
    lda res
    clc
    adc mb
    sta res
    lda res+1
    adc mb+1
    sta res+1
    lda res+2
    adc mb+2
    sta res+2
    lda res+3
    adc mb+3
    sta res+3
  //SEG257 [129] phi from mul16u::@2 mul16u::@7 to mul16u::@4 [phi:mul16u::@2/mul16u::@7->mul16u::@4]
  //SEG258 [129] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@7->mul16u::@4#0] -- register_copy 
  //SEG259 mul16u::@4
  b4:
  //SEG260 [130] (word) mul16u::a#0 ← (word) mul16u::a#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_ror_1 
    clc
    ror a+1
    ror a
  //SEG261 [131] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vduz1=vduz1_rol_1 
    asl mb
    rol mb+1
    rol mb+2
    rol mb+3
  //SEG262 [123] phi from mul16u::@4 to mul16u::@1 [phi:mul16u::@4->mul16u::@1]
  //SEG263 [123] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@4->mul16u::@1#0] -- register_copy 
  //SEG264 [123] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@4->mul16u::@1#1] -- register_copy 
  //SEG265 [123] phi (word) mul16u::a#2 = (word) mul16u::a#0 [phi:mul16u::@4->mul16u::@1#2] -- register_copy 
    jmp b1
}
//SEG266 div32u16u
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
    .label quotient_hi = 8
    .label quotient_lo = 6
    .label return = $1b
  //SEG267 [133] call divr16u 
  //SEG268 [142] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
  //SEG269 [142] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28#0 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28>>$10
    sta divr16u.dividend
    lda #>PI2_u4f28>>$10
    sta divr16u.dividend+1
  //SEG270 [142] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 
    lda #<0
    sta divr16u.rem
    sta divr16u.rem+1
    jsr divr16u
  //SEG271 [134] (word) divr16u::return#2 ← (word) divr16u::return#0
  //SEG272 div32u16u::@2
  //SEG273 [135] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 
    lda divr16u.return
    sta quotient_hi
    lda divr16u.return+1
    sta quotient_hi+1
  //SEG274 [136] (word) divr16u::rem#4 ← (word) rem16u#1
  //SEG275 [137] call divr16u 
  //SEG276 [142] phi from div32u16u::@2 to divr16u [phi:div32u16u::@2->divr16u]
  //SEG277 [142] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28#0 [phi:div32u16u::@2->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28&$ffff
    sta divr16u.dividend
    lda #>PI2_u4f28&$ffff
    sta divr16u.dividend+1
  //SEG278 [142] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@2->divr16u#1] -- register_copy 
    jsr divr16u
  //SEG279 [138] (word) divr16u::return#3 ← (word) divr16u::return#0
  //SEG280 div32u16u::@3
  //SEG281 [139] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
  //SEG282 [140] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 
    lda quotient_hi
    sta return+2
    lda quotient_hi+1
    sta return+3
    lda quotient_lo
    sta return
    lda quotient_lo+1
    sta return+1
  //SEG283 div32u16u::@return
  //SEG284 [141] return 
    rts
}
//SEG285 divr16u
// Performs division on two 16 bit unsigned words 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 zeropage(4) dividend, word zeropage(2) rem)
divr16u: {
    .label rem = 2
    .label dividend = 4
    .label quotient = 6
    .label return = 6
  //SEG286 [143] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
  //SEG287 [143] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG288 [143] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 
    txa
    sta quotient
    sta quotient+1
  //SEG289 [143] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy 
  //SEG290 [143] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy 
  //SEG291 [143] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
  //SEG292 [143] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
  //SEG293 [143] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
  //SEG294 [143] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
  //SEG295 [143] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
  //SEG296 divr16u::@1
  b1:
  //SEG297 [144] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl rem
    rol rem+1
  //SEG298 [145] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 
    lda dividend+1
  //SEG299 [146] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 -- vbuaa=vbuaa_band_vbuc1 
    and #$80
  //SEG300 [147] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b2
  //SEG301 divr16u::@4
  //SEG302 [148] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora rem
    sta rem
  //SEG303 [149] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
  //SEG304 [149] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
  //SEG305 divr16u::@2
  b2:
  //SEG306 [150] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl dividend
    rol dividend+1
  //SEG307 [151] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl quotient
    rol quotient+1
  //SEG308 [152] if((word) divr16u::rem#6<(const word) main::wavelength#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 
    lda rem+1
    cmp #>main.wavelength
    bcc b3
    bne !+
    lda rem
    cmp #<main.wavelength
    bcc b3
  !:
  //SEG309 divr16u::@5
  //SEG310 [153] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc quotient
    bne !+
    inc quotient+1
  !:
  //SEG311 [154] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) main::wavelength#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda rem
    sec
    sbc #<main.wavelength
    sta rem
    lda rem+1
    sbc #>main.wavelength
    sta rem+1
  //SEG312 [155] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
  //SEG313 [155] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
  //SEG314 [155] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
  //SEG315 divr16u::@3
  b3:
  //SEG316 [156] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG317 [157] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne b1
  //SEG318 divr16u::@6
  //SEG319 [158] (word) rem16u#1 ← (word) divr16u::rem#11
  //SEG320 divr16u::@return
  //SEG321 [159] return 
    rts
}
  print_hextab: .text "0123456789abcdef"

