Fixing pointer increment (signed word*) sin16s_gen::sintab ← ++ (signed word*) sin16s_gen::sintab
Fixing pointer increment (signed word*) sin16s_gen2::sintab ← ++ (signed word*) sin16s_gen2::sintab
Fixing pointer addition (signed word*~) loop::$2 ← (const signed word*) xsin + (word) xsin_idx
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
Identified constant variable (byte*) SCREEN
Identified constant variable (byte*) LOGO
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Inlined call (byte~) main::$0 ← call toD018 (const byte*) SCREEN (const byte*) LOGO 
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) divr16u::@7
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) div32u16u::@1
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) mul16u::@5
Culled Empty Block (label) mul16u::@6
Culled Empty Block (label) mul16u::@8
Culled Empty Block (label) mul16u::@9
Culled Empty Block (label) @16
Culled Empty Block (label) mul16s::@5
Culled Empty Block (label) @17
Culled Empty Block (label) @18
Culled Empty Block (label) sin16s_gen2::@4
Culled Empty Block (label) sin16s_gen2::@3
Culled Empty Block (label) sin16s_gen2::@5
Culled Empty Block (label) sin16s_gen2::@6
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Culled Empty Block (label) sin16s::@7
Culled Empty Block (label) @21
Culled Empty Block (label) @22
Culled Empty Block (label) mulu16_sel::@1
Culled Empty Block (label) @23
Culled Empty Block (label) @24
Culled Empty Block (label) @25
Culled Empty Block (label) @26
Culled Empty Block (label) memset::@7
Culled Empty Block (label) memset::@6
Culled Empty Block (label) memset::@8
Culled Empty Block (label) memset::@9
Culled Empty Block (label) memset::@3
Culled Empty Block (label) @27
Culled Empty Block (label) @28
Culled Empty Block (label) main::toD0181_@1
Culled Empty Block (label) loop::@2
Culled Empty Block (label) loop::@12
Culled Empty Block (label) loop::@3
Culled Empty Block (label) loop::@13
Culled Empty Block (label) loop::@5
Culled Empty Block (label) loop::@7
Culled Empty Block (label) loop::@8
Culled Empty Block (label) loop::@9
Culled Empty Block (label) loop::@14
Culled Empty Block (label) @31
Culled Empty Block (label) render_logo::@10
Culled Empty Block (label) render_logo::@11
Culled Empty Block (label) render_logo::@9
Culled Empty Block (label) render_logo::@18
Culled Empty Block (label) render_logo::@14
Culled Empty Block (label) render_logo::@19
Culled Empty Block (label) render_logo::@17
Culled Empty Block (label) render_logo::@2
Culled Empty Block (label) render_logo::@20
Culled Empty Block (label) render_logo::@27
Culled Empty Block (label) render_logo::@23
Culled Empty Block (label) render_logo::@28
Culled Empty Block (label) render_logo::@26
Culled Empty Block (label) render_logo::@35
Culled Empty Block (label) render_logo::@31
Culled Empty Block (label) render_logo::@36
Culled Empty Block (label) render_logo::@34

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@6
@6: scope:[]  from @begin
  (word) rem16u#0 ← (word) 0
  to:@29

(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
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 ← (word) 0
  (byte) divr16u::i#0 ← (byte) 0
  to:divr16u::@1
divr16u::@1: scope:[divr16u]  from divr16u divr16u::@3
  (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 )
  (word) divr16u::divisor#4 ← phi( divr16u/(word) divr16u::divisor#6 divr16u::@3/(word) divr16u::divisor#7 )
  (word) divr16u::quotient#6 ← phi( divr16u/(word) divr16u::quotient#0 divr16u::@3/(word) divr16u::quotient#8 )
  (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#6 )
  (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
  (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1
  (word) divr16u::rem#0 ← (word~) divr16u::$0
  (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
  (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80
  (bool~) divr16u::$3 ← (number~) divr16u::$2 != (number) 0
  (bool~) divr16u::$4 ← ! (bool~) divr16u::$3
  if((bool~) divr16u::$4) goto divr16u::@2
  to:divr16u::@4
divr16u::@2: scope:[divr16u]  from divr16u::@1 divr16u::@4
  (byte) divr16u::i#3 ← phi( divr16u::@1/(byte) divr16u::i#5 divr16u::@4/(byte) divr16u::i#6 )
  (word) divr16u::divisor#2 ← phi( divr16u::@1/(word) divr16u::divisor#4 divr16u::@4/(word) divr16u::divisor#5 )
  (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
  (word) divr16u::quotient#3 ← phi( divr16u::@1/(word) divr16u::quotient#6 divr16u::@4/(word) divr16u::quotient#7 )
  (word) divr16u::dividend#4 ← phi( divr16u::@1/(word) divr16u::dividend#3 divr16u::@4/(word) divr16u::dividend#7 )
  (word~) divr16u::$6 ← (word) divr16u::dividend#4 << (number) 1
  (word) divr16u::dividend#0 ← (word~) divr16u::$6
  (word~) divr16u::$7 ← (word) divr16u::quotient#3 << (number) 1
  (word) divr16u::quotient#1 ← (word~) divr16u::$7
  (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2
  (bool~) divr16u::$9 ← ! (bool~) divr16u::$8
  if((bool~) divr16u::$9) goto divr16u::@3
  to:divr16u::@5
divr16u::@4: scope:[divr16u]  from divr16u::@1
  (byte) divr16u::i#6 ← phi( divr16u::@1/(byte) divr16u::i#5 )
  (word) divr16u::divisor#5 ← phi( divr16u::@1/(word) divr16u::divisor#4 )
  (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 )
  (word) divr16u::dividend#7 ← phi( divr16u::@1/(word) divr16u::dividend#3 )
  (word) divr16u::rem#7 ← phi( divr16u::@1/(word) divr16u::rem#0 )
  (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1
  (word) divr16u::rem#1 ← (number~) divr16u::$5
  to:divr16u::@2
divr16u::@3: scope:[divr16u]  from divr16u::@2 divr16u::@5
  (word) divr16u::divisor#7 ← phi( divr16u::@2/(word) divr16u::divisor#2 divr16u::@5/(word) divr16u::divisor#3 )
  (word) divr16u::quotient#8 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
  (word) divr16u::dividend#6 ← phi( divr16u::@2/(word) divr16u::dividend#0 divr16u::@5/(word) divr16u::dividend#8 )
  (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
  (byte) divr16u::i#2 ← phi( divr16u::@2/(byte) divr16u::i#3 divr16u::@5/(byte) divr16u::i#4 )
  (byte) divr16u::i#1 ← (byte) divr16u::i#2 + rangenext(0,$f)
  (bool~) divr16u::$11 ← (byte) divr16u::i#1 != rangelast(0,$f)
  if((bool~) divr16u::$11) goto divr16u::@1
  to:divr16u::@6
divr16u::@5: scope:[divr16u]  from divr16u::@2
  (word) divr16u::dividend#8 ← phi( divr16u::@2/(word) divr16u::dividend#0 )
  (byte) divr16u::i#4 ← phi( divr16u::@2/(byte) divr16u::i#3 )
  (word) divr16u::divisor#3 ← phi( divr16u::@2/(word) divr16u::divisor#2 )
  (word) divr16u::rem#8 ← phi( divr16u::@2/(word) divr16u::rem#6 )
  (word) divr16u::quotient#4 ← phi( divr16u::@2/(word) divr16u::quotient#1 )
  (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#4
  (word~) divr16u::$10 ← (word) divr16u::rem#8 - (word) divr16u::divisor#3
  (word) divr16u::rem#2 ← (word~) divr16u::$10
  to:divr16u::@3
divr16u::@6: scope:[divr16u]  from divr16u::@3
  (word) divr16u::quotient#5 ← phi( divr16u::@3/(word) divr16u::quotient#8 )
  (word) divr16u::rem#9 ← phi( divr16u::@3/(word) divr16u::rem#11 )
  (word) rem16u#1 ← (word) divr16u::rem#9
  (word) divr16u::return#0 ← (word) divr16u::quotient#5
  to:divr16u::@return
divr16u::@return: scope:[divr16u]  from divr16u::@6
  (word) rem16u#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

(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
div32u16u: scope:[div32u16u]  from sin16s_gen2
  (word) rem16u#20 ← phi( sin16s_gen2/(word) rem16u#21 )
  (word) div32u16u::divisor#1 ← phi( sin16s_gen2/(word) div32u16u::divisor#0 )
  (dword) div32u16u::dividend#1 ← phi( sin16s_gen2/(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 ← (number) 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 ← (dword){ (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 }
  (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0
  to:div32u16u::@return
div32u16u::@return: scope:[div32u16u]  from div32u16u::@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

(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
mul16u: scope:[mul16u]  from mul16s mulu16_sel
  (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 )
  (word) mul16u::b#2 ← phi( mul16s/(word) mul16u::b#0 mulu16_sel/(word) mul16u::b#1 )
  (dword) mul16u::res#0 ← (dword) 0
  (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2
  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#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
  (bool~) mul16u::$0 ← (word) mul16u::a#3 != (number) 0
  if((bool~) mul16u::$0) goto mul16u::@2
  to:mul16u::@3
mul16u::@2: scope:[mul16u]  from mul16u::@1
  (dword) mul16u::res#5 ← phi( mul16u::@1/(dword) mul16u::res#4 )
  (dword) mul16u::mb#4 ← phi( mul16u::@1/(dword) mul16u::mb#5 )
  (word) mul16u::a#4 ← phi( mul16u::@1/(word) mul16u::a#3 )
  (number~) mul16u::$1 ← (word) mul16u::a#4 & (number) 1
  (bool~) mul16u::$2 ← (number~) mul16u::$1 != (number) 0
  (bool~) mul16u::$3 ← ! (bool~) mul16u::$2
  if((bool~) mul16u::$3) goto mul16u::@4
  to:mul16u::@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#5 ← phi( mul16u::@2/(word) mul16u::a#4 mul16u::@7/(word) mul16u::a#7 )
  (word~) mul16u::$5 ← (word) mul16u::a#5 >> (number) 1
  (word) mul16u::a#0 ← (word~) mul16u::$5
  (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (number) 1
  (dword) mul16u::mb#1 ← (dword~) mul16u::$6
  to:mul16u::@1
mul16u::@7: scope:[mul16u]  from mul16u::@2
  (word) mul16u::a#7 ← phi( mul16u::@2/(word) mul16u::a#4 )
  (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#4 ← phi( mul16u::@3/(dword) mul16u::return#0 )
  (dword) mul16u::return#1 ← (dword) mul16u::return#4
  return 
  to:@return

(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
mul16s: scope:[mul16s]  from sin16s_gen2::@8
  (signed word) mul16s::b#1 ← phi( sin16s_gen2::@8/(signed word) mul16s::b#0 )
  (signed word) mul16s::a#1 ← phi( sin16s_gen2::@8/(signed word) mul16s::a#0 )
  (word~) mul16s::$0 ← ((word)) (signed word) mul16s::a#1
  (word~) mul16s::$1 ← ((word)) (signed word) mul16s::b#1
  (word) mul16u::a#1 ← (word~) mul16s::$0
  (word) mul16u::b#0 ← (word~) mul16s::$1
  call mul16u 
  (dword) mul16u::return#2 ← (dword) mul16u::return#1
  to:mul16s::@6
mul16s::@6: scope:[mul16s]  from mul16s
  (signed word) mul16s::b#4 ← phi( mul16s/(signed word) mul16s::b#1 )
  (signed word) mul16s::a#2 ← phi( mul16s/(signed word) mul16s::a#1 )
  (dword) mul16u::return#5 ← phi( mul16s/(dword) mul16u::return#2 )
  (dword~) mul16s::$2 ← (dword) mul16u::return#5
  (dword) mul16s::m#0 ← (dword~) mul16s::$2
  (bool~) mul16s::$3 ← (signed word) mul16s::a#2 < (number) 0
  (bool~) mul16s::$4 ← ! (bool~) mul16s::$3
  if((bool~) mul16s::$4) goto mul16s::@1
  to:mul16s::@3
mul16s::@1: scope:[mul16s]  from mul16s::@3 mul16s::@6
  (signed word) mul16s::a#4 ← phi( mul16s::@3/(signed word) mul16s::a#5 mul16s::@6/(signed word) mul16s::a#2 )
  (dword) mul16s::m#6 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
  (signed word) mul16s::b#2 ← phi( mul16s::@3/(signed word) mul16s::b#3 mul16s::@6/(signed word) mul16s::b#4 )
  (bool~) mul16s::$5 ← (signed word) mul16s::b#2 < (number) 0
  (bool~) mul16s::$6 ← ! (bool~) mul16s::$5
  if((bool~) mul16s::$6) goto mul16s::@2
  to:mul16s::@4
mul16s::@3: scope:[mul16s]  from mul16s::@6
  (signed word) mul16s::a#5 ← phi( mul16s::@6/(signed word) mul16s::a#2 )
  (signed word) mul16s::b#3 ← phi( mul16s::@6/(signed word) mul16s::b#4 )
  (dword) mul16s::m#3 ← phi( mul16s::@6/(dword) mul16s::m#0 )
  (word~) mul16s::$9 ← > (dword) mul16s::m#3
  (word~) mul16s::$10 ← ((word)) (signed word) mul16s::b#3
  (word~) mul16s::$11 ← (word~) mul16s::$9 - (word~) mul16s::$10
  (word~) mul16s::$16 ← (word~) mul16s::$11
  (dword) mul16s::m#1 ← (dword) mul16s::m#3 hi= (word~) mul16s::$16
  to:mul16s::@1
mul16s::@2: scope:[mul16s]  from mul16s::@1 mul16s::@4
  (dword) mul16s::m#4 ← phi( mul16s::@1/(dword) mul16s::m#6 mul16s::@4/(dword) mul16s::m#2 )
  (signed dword~) mul16s::$7 ← ((signed dword)) (dword) mul16s::m#4
  (signed dword) mul16s::return#0 ← (signed dword~) mul16s::$7
  to:mul16s::@return
mul16s::@4: scope:[mul16s]  from mul16s::@1
  (signed word) mul16s::a#3 ← phi( mul16s::@1/(signed word) mul16s::a#4 )
  (dword) mul16s::m#5 ← phi( mul16s::@1/(dword) mul16s::m#6 )
  (word~) mul16s::$13 ← > (dword) mul16s::m#5
  (word~) mul16s::$14 ← ((word)) (signed word) mul16s::a#3
  (word~) mul16s::$15 ← (word~) mul16s::$13 - (word~) mul16s::$14
  (word~) mul16s::$17 ← (word~) mul16s::$15
  (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17
  to:mul16s::@2
mul16s::@return: scope:[mul16s]  from mul16s::@2
  (signed dword) mul16s::return#3 ← phi( mul16s::@2/(signed dword) mul16s::return#0 )
  (signed dword) mul16s::return#1 ← (signed dword) mul16s::return#3
  return 
  to:@return

(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
sin16s_gen2: scope:[sin16s_gen2]  from main::@2
  (signed word*) sin16s_gen2::sintab#7 ← phi( main::@2/(signed word*) sin16s_gen2::sintab#1 )
  (word) rem16u#21 ← phi( main::@2/(word) rem16u#23 )
  (word) sin16s_gen2::wavelength#1 ← phi( main::@2/(word) sin16s_gen2::wavelength#0 )
  (signed word) sin16s_gen2::min#1 ← phi( main::@2/(signed word) sin16s_gen2::min#0 )
  (signed word) sin16s_gen2::max#1 ← phi( main::@2/(signed word) sin16s_gen2::max#0 )
  (signed word~) sin16s_gen2::$0 ← (signed word) sin16s_gen2::max#1 - (signed word) sin16s_gen2::min#1
  (signed word) sin16s_gen2::ampl#0 ← (signed word~) sin16s_gen2::$0
  (signed word~) sin16s_gen2::$1 ← (signed word) sin16s_gen2::ampl#0 >> (number) 1
  (signed word~) sin16s_gen2::$2 ← (signed word) sin16s_gen2::min#1 + (signed word~) sin16s_gen2::$1
  (signed word) sin16s_gen2::offs#0 ← (signed word~) sin16s_gen2::$2
  (dword) div32u16u::dividend#0 ← (const dword) PI2_u4f28
  (word) div32u16u::divisor#0 ← (word) sin16s_gen2::wavelength#1
  call div32u16u 
  (dword) div32u16u::return#2 ← (dword) div32u16u::return#1
  to:sin16s_gen2::@7
sin16s_gen2::@7: scope:[sin16s_gen2]  from sin16s_gen2
  (signed word*) sin16s_gen2::sintab#6 ← phi( sin16s_gen2/(signed word*) sin16s_gen2::sintab#7 )
  (signed word) sin16s_gen2::offs#5 ← phi( sin16s_gen2/(signed word) sin16s_gen2::offs#0 )
  (signed word) sin16s_gen2::ampl#4 ← phi( sin16s_gen2/(signed word) sin16s_gen2::ampl#0 )
  (word) sin16s_gen2::wavelength#3 ← phi( sin16s_gen2/(word) sin16s_gen2::wavelength#1 )
  (word) rem16u#15 ← phi( sin16s_gen2/(word) rem16u#5 )
  (dword) div32u16u::return#4 ← phi( sin16s_gen2/(dword) div32u16u::return#2 )
  (dword~) sin16s_gen2::$3 ← (dword) div32u16u::return#4
  (word) rem16u#6 ← (word) rem16u#15
  (dword) sin16s_gen2::step#0 ← (dword~) sin16s_gen2::$3
  (dword) sin16s_gen2::x#0 ← (dword) 0
  (word) sin16s_gen2::i#0 ← (word) 0
  to:sin16s_gen2::@1
sin16s_gen2::@1: scope:[sin16s_gen2]  from sin16s_gen2::@7 sin16s_gen2::@9
  (dword) sin16s_gen2::step#4 ← phi( sin16s_gen2::@7/(dword) sin16s_gen2::step#0 sin16s_gen2::@9/(dword) sin16s_gen2::step#1 )
  (signed word*) sin16s_gen2::sintab#5 ← phi( sin16s_gen2::@7/(signed word*) sin16s_gen2::sintab#6 sin16s_gen2::@9/(signed word*) sin16s_gen2::sintab#0 )
  (signed word) sin16s_gen2::offs#4 ← phi( sin16s_gen2::@7/(signed word) sin16s_gen2::offs#5 sin16s_gen2::@9/(signed word) sin16s_gen2::offs#1 )
  (signed word) sin16s_gen2::ampl#3 ← phi( sin16s_gen2::@7/(signed word) sin16s_gen2::ampl#4 sin16s_gen2::@9/(signed word) sin16s_gen2::ampl#5 )
  (word) rem16u#22 ← phi( sin16s_gen2::@7/(word) rem16u#6 sin16s_gen2::@9/(word) rem16u#26 )
  (dword) sin16s_gen2::x#4 ← phi( sin16s_gen2::@7/(dword) sin16s_gen2::x#0 sin16s_gen2::@9/(dword) sin16s_gen2::x#1 )
  (word) sin16s_gen2::wavelength#2 ← phi( sin16s_gen2::@7/(word) sin16s_gen2::wavelength#3 sin16s_gen2::@9/(word) sin16s_gen2::wavelength#4 )
  (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@7/(word) sin16s_gen2::i#0 sin16s_gen2::@9/(word) sin16s_gen2::i#1 )
  (bool~) sin16s_gen2::$4 ← (word) sin16s_gen2::i#2 < (word) sin16s_gen2::wavelength#2
  if((bool~) sin16s_gen2::$4) goto sin16s_gen2::@2
  to:sin16s_gen2::@return
sin16s_gen2::@2: scope:[sin16s_gen2]  from sin16s_gen2::@1
  (word) rem16u#32 ← phi( sin16s_gen2::@1/(word) rem16u#22 )
  (word) sin16s_gen2::wavelength#6 ← phi( sin16s_gen2::@1/(word) sin16s_gen2::wavelength#2 )
  (word) sin16s_gen2::i#5 ← phi( sin16s_gen2::@1/(word) sin16s_gen2::i#2 )
  (dword) sin16s_gen2::step#3 ← phi( sin16s_gen2::@1/(dword) sin16s_gen2::step#4 )
  (signed word*) sin16s_gen2::sintab#4 ← phi( sin16s_gen2::@1/(signed word*) sin16s_gen2::sintab#5 )
  (signed word) sin16s_gen2::offs#3 ← phi( sin16s_gen2::@1/(signed word) sin16s_gen2::offs#4 )
  (signed word) sin16s_gen2::ampl#2 ← phi( sin16s_gen2::@1/(signed word) sin16s_gen2::ampl#3 )
  (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@1/(dword) sin16s_gen2::x#4 )
  (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2
  call sin16s 
  (signed word) sin16s::return#0 ← (signed word) sin16s::return#2
  to:sin16s_gen2::@8
sin16s_gen2::@8: scope:[sin16s_gen2]  from sin16s_gen2::@2
  (word) rem16u#29 ← phi( sin16s_gen2::@2/(word) rem16u#32 )
  (word) sin16s_gen2::wavelength#5 ← phi( sin16s_gen2::@2/(word) sin16s_gen2::wavelength#6 )
  (word) sin16s_gen2::i#4 ← phi( sin16s_gen2::@2/(word) sin16s_gen2::i#5 )
  (dword) sin16s_gen2::step#2 ← phi( sin16s_gen2::@2/(dword) sin16s_gen2::step#3 )
  (dword) sin16s_gen2::x#5 ← phi( sin16s_gen2::@2/(dword) sin16s_gen2::x#2 )
  (signed word*) sin16s_gen2::sintab#3 ← phi( sin16s_gen2::@2/(signed word*) sin16s_gen2::sintab#4 )
  (signed word) sin16s_gen2::offs#2 ← phi( sin16s_gen2::@2/(signed word) sin16s_gen2::offs#3 )
  (signed word) sin16s_gen2::ampl#1 ← phi( sin16s_gen2::@2/(signed word) sin16s_gen2::ampl#2 )
  (signed word) sin16s::return#3 ← phi( sin16s_gen2::@2/(signed word) sin16s::return#0 )
  (signed word~) sin16s_gen2::$5 ← (signed word) sin16s::return#3
  (signed word) mul16s::a#0 ← (signed word~) sin16s_gen2::$5
  (signed word) mul16s::b#0 ← (signed word) sin16s_gen2::ampl#1
  call mul16s 
  (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#1
  to:sin16s_gen2::@9
sin16s_gen2::@9: scope:[sin16s_gen2]  from sin16s_gen2::@8
  (signed word) sin16s_gen2::ampl#5 ← phi( sin16s_gen2::@8/(signed word) sin16s_gen2::ampl#1 )
  (word) rem16u#26 ← phi( sin16s_gen2::@8/(word) rem16u#29 )
  (word) sin16s_gen2::wavelength#4 ← phi( sin16s_gen2::@8/(word) sin16s_gen2::wavelength#5 )
  (word) sin16s_gen2::i#3 ← phi( sin16s_gen2::@8/(word) sin16s_gen2::i#4 )
  (dword) sin16s_gen2::step#1 ← phi( sin16s_gen2::@8/(dword) sin16s_gen2::step#2 )
  (dword) sin16s_gen2::x#3 ← phi( sin16s_gen2::@8/(dword) sin16s_gen2::x#5 )
  (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@8/(signed word*) sin16s_gen2::sintab#3 )
  (signed word) sin16s_gen2::offs#1 ← phi( sin16s_gen2::@8/(signed word) sin16s_gen2::offs#2 )
  (signed dword) mul16s::return#4 ← phi( sin16s_gen2::@8/(signed dword) mul16s::return#2 )
  (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#4
  (word~) sin16s_gen2::$7 ← > (signed dword~) sin16s_gen2::$6
  (signed word~) sin16s_gen2::$8 ← ((signed word)) (word~) sin16s_gen2::$7
  (signed word~) sin16s_gen2::$9 ← (signed word) sin16s_gen2::offs#1 + (signed word~) sin16s_gen2::$8
  *((signed word*) sin16s_gen2::sintab#2) ← (signed word~) sin16s_gen2::$9
  (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
  (dword~) sin16s_gen2::$10 ← (dword) sin16s_gen2::x#3 + (dword) sin16s_gen2::step#1
  (dword) sin16s_gen2::x#1 ← (dword~) sin16s_gen2::$10
  (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#3
  to:sin16s_gen2::@1
sin16s_gen2::@return: scope:[sin16s_gen2]  from sin16s_gen2::@1
  (word) rem16u#16 ← phi( sin16s_gen2::@1/(word) rem16u#22 )
  (word) rem16u#7 ← (word) rem16u#16
  return 
  to:@return

(signed word()) sin16s((dword) sin16s::x)
sin16s: scope:[sin16s]  from sin16s_gen2::@2
  (dword) sin16s::x#3 ← phi( sin16s_gen2::@2/(dword) sin16s::x#0 )
  (byte) sin16s::isUpper#0 ← (byte) 0
  (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const dword) PI_u4f28
  (bool~) sin16s::$1 ← ! (bool~) sin16s::$0
  if((bool~) sin16s::$1) goto sin16s::@1
  to:sin16s::@4
sin16s::@1: scope:[sin16s]  from sin16s sin16s::@4
  (byte) sin16s::isUpper#8 ← phi( sin16s/(byte) sin16s::isUpper#0 sin16s::@4/(byte) sin16s::isUpper#1 )
  (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#3 sin16s::@4/(dword) sin16s::x#1 )
  (bool~) sin16s::$2 ← (dword) sin16s::x#4 >= (const dword) PI_HALF_u4f28
  (bool~) sin16s::$3 ← ! (bool~) sin16s::$2
  if((bool~) sin16s::$3) goto sin16s::@2
  to:sin16s::@5
sin16s::@4: scope:[sin16s]  from sin16s
  (dword) sin16s::x#5 ← phi( sin16s/(dword) sin16s::x#3 )
  (dword~) sin16s::$17 ← (dword) sin16s::x#5 - (const dword) PI_u4f28
  (dword) sin16s::x#1 ← (dword~) sin16s::$17
  (byte) sin16s::isUpper#1 ← (number) 1
  to:sin16s::@1
sin16s::@2: scope:[sin16s]  from sin16s::@1 sin16s::@5
  (byte) sin16s::isUpper#7 ← phi( sin16s::@1/(byte) sin16s::isUpper#8 sin16s::@5/(byte) sin16s::isUpper#9 )
  (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
  (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3
  (word~) sin16s::$5 ← > (dword~) sin16s::$4
  (word) sin16s::x1#0 ← (word~) sin16s::$5
  (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
  (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
  (byte) mulu16_sel::select#0 ← (number) 0
  call mulu16_sel 
  (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#6
  to:sin16s::@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::$6 ← (word) mulu16_sel::return#7
  (word) sin16s::x2#0 ← (word~) sin16s::$6
  (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
  (word) mulu16_sel::v2#1 ← (word) sin16s::x1#1
  (byte) mulu16_sel::select#1 ← (number) 1
  call mulu16_sel 
  (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#6
  to:sin16s::@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::$7 ← (word) mulu16_sel::return#8
  (word) sin16s::x3#0 ← (word~) sin16s::$7
  (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
  (word) mulu16_sel::v2#2 ← (number) $10000/(number) 6
  (byte) mulu16_sel::select#2 ← (number) 1
  call mulu16_sel 
  (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#6
  to:sin16s::@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::$8 ← (word) mulu16_sel::return#9
  (word) sin16s::x3_6#0 ← (word~) sin16s::$8
  (word~) sin16s::$9 ← (word) sin16s::x1#2 - (word) sin16s::x3_6#0
  (word) sin16s::usinx#0 ← (word~) sin16s::$9
  (word) mulu16_sel::v1#3 ← (word) sin16s::x3#1
  (word) mulu16_sel::v2#3 ← (word) sin16s::x1#2
  (byte) mulu16_sel::select#3 ← (number) 0
  call mulu16_sel 
  (word) mulu16_sel::return#3 ← (word) mulu16_sel::return#6
  to:sin16s::@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::$10 ← (word) mulu16_sel::return#10
  (word) sin16s::x4#0 ← (word~) sin16s::$10
  (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
  (word) mulu16_sel::v2#4 ← (word) sin16s::x1#3
  (byte) mulu16_sel::select#4 ← (number) 0
  call mulu16_sel 
  (word) mulu16_sel::return#4 ← (word) mulu16_sel::return#6
  to:sin16s::@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::$11 ← (word) mulu16_sel::return#11
  (word) sin16s::x5#0 ← (word~) sin16s::$11
  (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4
  (word) sin16s::x5_128#0 ← (word~) sin16s::$12
  (word~) sin16s::$13 ← (word) sin16s::usinx#2 + (word) sin16s::x5_128#0
  (word) sin16s::usinx#1 ← (word~) sin16s::$13
  (signed word~) sin16s::$14 ← ((signed word)) (word) sin16s::usinx#1
  (signed word) sin16s::sinx#0 ← (signed word~) sin16s::$14
  (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (number) 0
  (bool~) sin16s::$16 ← ! (bool~) sin16s::$15
  if((bool~) sin16s::$16) 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::$18 ← (const dword) PI_u4f28 - (dword) sin16s::x#7
  (dword) sin16s::x#2 ← (dword~) sin16s::$18
  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::$19 ← ((signed word)) (word) sin16s::usinx#3
  (signed word~) sin16s::$20 ← - (signed word~) sin16s::$19
  (signed word) sin16s::sinx#1 ← (signed word~) sin16s::$20
  to:sin16s::@3
sin16s::@return: scope:[sin16s]  from sin16s::@3
  (signed word) sin16s::return#4 ← phi( sin16s::@3/(signed word) sin16s::return#1 )
  (signed word) sin16s::return#2 ← (signed word) sin16s::return#4
  return 
  to:@return

(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
mulu16_sel: scope:[mulu16_sel]  from sin16s::@10 sin16s::@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#2 ← (word) mulu16_sel::v1#5
  (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
  call mul16u 
  (dword) mul16u::return#3 ← (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#6 ← phi( mulu16_sel/(dword) mul16u::return#3 )
  (dword~) mulu16_sel::$0 ← (dword) mul16u::return#6
  (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

(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset]  from main::@3 main::@4
  (byte) memset::c#5 ← phi( main::@3/(byte) memset::c#0 main::@4/(byte) memset::c#1 )
  (void*) memset::str#4 ← phi( main::@3/(void*) memset::str#0 main::@4/(void*) memset::str#1 )
  (word) memset::num#2 ← phi( main::@3/(word) memset::num#0 main::@4/(word) memset::num#1 )
  (bool~) memset::$0 ← (word) memset::num#2 > (number) 0
  (bool~) memset::$1 ← ! (bool~) memset::$0
  if((bool~) memset::$1) goto memset::@1
  to:memset::@2
memset::@1: scope:[memset]  from memset memset::@4
  (void*) memset::str#2 ← phi( memset/(void*) memset::str#4 memset::@4/(void*) memset::str#5 )
  (void*) memset::return#0 ← (void*) memset::str#2
  to:memset::@return
memset::@2: scope:[memset]  from memset
  (byte) memset::c#4 ← phi( memset/(byte) memset::c#5 )
  (word) memset::num#3 ← phi( memset/(word) memset::num#2 )
  (void*) memset::str#3 ← phi( memset/(void*) memset::str#4 )
  (byte*~) memset::$2 ← ((byte*)) (void*) memset::str#3
  (byte*~) memset::$3 ← (byte*~) memset::$2 + (word) memset::num#3
  (byte*) memset::end#0 ← (byte*~) memset::$3
  (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#3
  to:memset::@4
memset::@4: scope:[memset]  from memset::@2 memset::@5
  (byte) memset::c#3 ← phi( memset::@2/(byte) memset::c#4 memset::@5/(byte) memset::c#2 )
  (void*) memset::str#5 ← phi( memset::@2/(void*) memset::str#3 memset::@5/(void*) memset::str#6 )
  (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@5/(byte*) memset::end#2 )
  (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@5/(byte*) memset::dst#1 )
  (bool~) memset::$4 ← (byte*) memset::dst#2 != (byte*) memset::end#1
  if((bool~) memset::$4) goto memset::@5
  to:memset::@1
memset::@5: scope:[memset]  from memset::@4
  (void*) memset::str#6 ← phi( memset::@4/(void*) memset::str#5 )
  (byte*) memset::end#2 ← phi( memset::@4/(byte*) memset::end#1 )
  (byte*) memset::dst#3 ← phi( memset::@4/(byte*) memset::dst#2 )
  (byte) memset::c#2 ← phi( memset::@4/(byte) memset::c#3 )
  *((byte*) memset::dst#3) ← (byte) memset::c#2
  (byte*) memset::dst#1 ← ++ (byte*) memset::dst#3
  to:memset::@4
memset::@return: scope:[memset]  from memset::@1
  (void*) memset::return#4 ← phi( memset::@1/(void*) memset::return#0 )
  (void*) memset::return#1 ← (void*) memset::return#4
  return 
  to:@return
@29: scope:[]  from @6
  (word) rem16u#31 ← phi( @6/(word) rem16u#0 )
  kickasm(location (const byte*) LOGO) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
    .for (var y=0; y<6	; y++)
        .for (var x=0;x<40; x++)
            .for(var cp=0; cp<8; cp++)
                .byte logoPic.getMulticolorByte(x,cp+y*8)
 }}
  to:@30

(void()) main()
main: scope:[main]  from @32
  (word) xsin_idx#26 ← phi( @32/(word) xsin_idx#16 )
  (word) rem16u#37 ← phi( @32/(word) rem16u#25 )
  asm { sei  }
  *((const byte*) BORDERCOL) ← (const byte) WHITE
  *((const byte*) BGCOL2) ← (const byte) DARK_GREY
  *((const byte*) BGCOL) ← *((const byte*) BGCOL2)
  *((const byte*) BGCOL3) ← (const byte) BLACK
  (byte*) main::toD0181_screen#0 ← (const byte*) SCREEN
  (byte*) main::toD0181_gfx#0 ← (const byte*) LOGO
  to:main::toD0181
main::toD0181: scope:[main]  from main
  (word) xsin_idx#25 ← phi( main/(word) xsin_idx#26 )
  (word) rem16u#36 ← phi( main/(word) rem16u#37 )
  (byte*) main::toD0181_gfx#1 ← phi( main/(byte*) main::toD0181_gfx#0 )
  (byte*) main::toD0181_screen#1 ← phi( main/(byte*) main::toD0181_screen#0 )
  (word~) main::toD0181_$0 ← ((word)) (byte*) main::toD0181_screen#1
  (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff
  (number~) main::toD0181_$2 ← (number~) main::toD0181_$1 * (number) 4
  (number~) main::toD0181_$3 ← > (number~) main::toD0181_$2
  (word~) main::toD0181_$4 ← ((word)) (byte*) main::toD0181_gfx#1
  (byte~) main::toD0181_$5 ← > (word~) main::toD0181_$4
  (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4
  (number~) main::toD0181_$7 ← (number~) main::toD0181_$6 & (number) $f
  (number~) main::toD0181_$8 ← (number~) main::toD0181_$3 | (number~) main::toD0181_$7
  (byte) main::toD0181_return#0 ← (number~) main::toD0181_$8
  to:main::toD0181_@return
main::toD0181_@return: scope:[main]  from main::toD0181
  (word) xsin_idx#24 ← phi( main::toD0181/(word) xsin_idx#25 )
  (word) rem16u#35 ← phi( main::toD0181/(word) rem16u#36 )
  (byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 )
  (byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2
  to:main::@3
main::@3: scope:[main]  from main::toD0181_@return
  (word) xsin_idx#23 ← phi( main::toD0181_@return/(word) xsin_idx#24 )
  (word) rem16u#34 ← phi( main::toD0181_@return/(word) rem16u#35 )
  (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
  (byte~) main::$0 ← (byte) main::toD0181_return#3
  *((const byte*) D018) ← (byte~) main::$0
  *((const byte*) D016) ← (const byte) VIC_MCM
  (void*) memset::str#0 ← (void*)(const byte*) SCREEN
  (byte) memset::c#0 ← (const byte) BLACK
  (word) memset::num#0 ← (number) $3e8
  call memset 
  (void*) memset::return#2 ← (void*) memset::return#1
  to:main::@4
main::@4: scope:[main]  from main::@3
  (word) xsin_idx#22 ← phi( main::@3/(word) xsin_idx#23 )
  (word) rem16u#33 ← phi( main::@3/(word) rem16u#34 )
  (void*) memset::str#1 ← (void*)(const byte*) COLS
  (byte) memset::c#1 ← (const byte) WHITE|(number) 8
  (word) memset::num#1 ← (number) $3e8
  call memset 
  (void*) memset::return#3 ← (void*) memset::return#1
  to:main::@5
main::@5: scope:[main]  from main::@4
  (word) xsin_idx#21 ← phi( main::@4/(word) xsin_idx#22 )
  (word) rem16u#30 ← phi( main::@4/(word) rem16u#33 )
  (byte) main::ch#0 ← (byte) 0
  to:main::@1
main::@1: scope:[main]  from main::@1 main::@5
  (word) xsin_idx#20 ← phi( main::@1/(word) xsin_idx#20 main::@5/(word) xsin_idx#21 )
  (word) rem16u#27 ← phi( main::@1/(word) rem16u#27 main::@5/(word) rem16u#30 )
  (byte) main::ch#2 ← phi( main::@1/(byte) main::ch#1 main::@5/(byte) main::ch#0 )
  *((const byte*) SCREEN + (byte) main::ch#2) ← (byte) main::ch#2
  (byte) main::ch#1 ← (byte) main::ch#2 + rangenext(0,$ef)
  (bool~) main::$5 ← (byte) main::ch#1 != rangelast(0,$ef)
  if((bool~) main::$5) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  (word) xsin_idx#17 ← phi( main::@1/(word) xsin_idx#20 )
  (word) rem16u#23 ← phi( main::@1/(word) rem16u#27 )
  (signed word*) sin16s_gen2::sintab#1 ← (const signed word*) xsin
  (word) sin16s_gen2::wavelength#0 ← (const word) XSIN_SIZE
  (signed word) sin16s_gen2::min#0 ← (number) -$140
  (signed word) sin16s_gen2::max#0 ← (number) $140
  call sin16s_gen2 
  to:main::@6
main::@6: scope:[main]  from main::@2
  (word) xsin_idx#13 ← phi( main::@2/(word) xsin_idx#17 )
  (word) rem16u#17 ← phi( main::@2/(word) rem16u#7 )
  (word) rem16u#8 ← (word) rem16u#17
  call loop 
  to:main::@7
main::@7: scope:[main]  from main::@6
  (word) rem16u#24 ← phi( main::@6/(word) rem16u#8 )
  (word) xsin_idx#7 ← phi( main::@6/(word) xsin_idx#5 )
  (word) xsin_idx#0 ← (word) xsin_idx#7
  to:main::@return
main::@return: scope:[main]  from main::@7
  (word) xsin_idx#8 ← phi( main::@7/(word) xsin_idx#0 )
  (word) rem16u#18 ← phi( main::@7/(word) rem16u#24 )
  (word) rem16u#9 ← (word) rem16u#18
  (word) xsin_idx#1 ← (word) xsin_idx#8
  return 
  to:@return
@30: scope:[]  from @29
  (word) rem16u#28 ← phi( @29/(word) rem16u#31 )
  (word) xsin_idx#2 ← (word) 0
  to:@32

(void()) loop()
loop: scope:[loop]  from main::@6
  (word) xsin_idx#18 ← phi( main::@6/(word) xsin_idx#13 )
  to:loop::@1
loop::@1: scope:[loop]  from loop loop::@11
  (word) xsin_idx#15 ← phi( loop/(word) xsin_idx#18 loop::@11/(word) xsin_idx#19 )
  if(true) goto loop::@4
  to:loop::@return
loop::@4: scope:[loop]  from loop::@1 loop::@4
  (word) xsin_idx#14 ← phi( loop::@1/(word) xsin_idx#15 loop::@4/(word) xsin_idx#14 )
  (bool~) loop::$0 ← *((const byte*) RASTER) != (number) $ff
  if((bool~) loop::$0) goto loop::@4
  to:loop::@6
loop::@6: scope:[loop]  from loop::@4
  (word) xsin_idx#9 ← phi( loop::@4/(word) xsin_idx#14 )
  *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL)
  (word~) loop::$7 ← (word) xsin_idx#9 * (const byte) SIZEOF_SIGNED_WORD
  (signed word*~) loop::$2 ← (const signed word*) xsin + (word~) loop::$7
  (signed word) loop::xpos#0 ← *((signed word*~) loop::$2)
  (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
  call render_logo 
  to:loop::@15
loop::@15: scope:[loop]  from loop::@6
  (word) xsin_idx#10 ← phi( loop::@6/(word) xsin_idx#9 )
  (word) xsin_idx#3 ← ++ (word) xsin_idx#10
  (bool~) loop::$4 ← (word) xsin_idx#3 == (const word) XSIN_SIZE
  (bool~) loop::$5 ← ! (bool~) loop::$4
  if((bool~) loop::$5) goto loop::@11
  to:loop::@10
loop::@11: scope:[loop]  from loop::@10 loop::@15
  (word) xsin_idx#19 ← phi( loop::@10/(word) xsin_idx#4 loop::@15/(word) xsin_idx#3 )
  *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL)
  to:loop::@1
loop::@10: scope:[loop]  from loop::@15
  (word) xsin_idx#4 ← (number) 0
  to:loop::@11
loop::@return: scope:[loop]  from loop::@1
  (word) xsin_idx#11 ← phi( loop::@1/(word) xsin_idx#15 )
  (word) xsin_idx#5 ← (word) xsin_idx#11
  return 
  to:@return

(void()) render_logo((signed word) render_logo::xpos)
render_logo: scope:[render_logo]  from loop::@6
  (signed word) render_logo::xpos#1 ← phi( loop::@6/(signed word) render_logo::xpos#0 )
  (byte) render_logo::logo_idx#0 ← (byte) 0
  (byte) render_logo::screen_idx#0 ← (byte) 0
  (byte~) render_logo::$0 ← ((byte)) (signed word) render_logo::xpos#1
  (number~) render_logo::$1 ← (byte~) render_logo::$0 & (number) 7
  (number~) render_logo::$2 ← (const byte) VIC_MCM | (number~) render_logo::$1
  *((const byte*) D016) ← (number~) render_logo::$2
  (number~) render_logo::$3 ← (signed word) render_logo::xpos#1 / (number) 8
  (signed byte~) render_logo::$4 ← ((signed byte)) (number~) render_logo::$3
  (signed byte) render_logo::x_char#0 ← (signed byte~) render_logo::$4
  (byte) render_logo::line#0 ← (byte) 0
  (bool~) render_logo::$5 ← (signed word) render_logo::xpos#1 < (number) 0
  if((bool~) render_logo::$5) goto render_logo::@1
  to:render_logo::@3
render_logo::@1: scope:[render_logo]  from render_logo
  (signed byte) render_logo::x_char#1 ← phi( render_logo/(signed byte) render_logo::x_char#0 )
  (signed byte~) render_logo::$17 ← - (signed byte) render_logo::x_char#1
  (byte~) render_logo::$18 ← ((byte)) (signed byte~) render_logo::$17
  (byte) render_logo::logo_idx#1 ← (byte~) render_logo::$18
  (byte) render_logo::screen_idx#1 ← (number) 0
  to:render_logo::@21
render_logo::@3: scope:[render_logo]  from render_logo
  (signed byte) render_logo::x_char#2 ← phi( render_logo/(signed byte) render_logo::x_char#0 )
  (byte~) render_logo::$6 ← ((byte)) (signed byte) render_logo::x_char#2
  (byte) render_logo::logo_start#0 ← (byte~) render_logo::$6
  (byte) render_logo::screen_idx#2 ← (number) 0
  to:render_logo::@4
render_logo::@4: scope:[render_logo]  from render_logo::@3 render_logo::@8
  (byte) render_logo::logo_start#1 ← phi( render_logo::@3/(byte) render_logo::logo_start#0 render_logo::@8/(byte) render_logo::logo_start#2 )
  (byte) render_logo::screen_idx#7 ← phi( render_logo::@3/(byte) render_logo::screen_idx#2 render_logo::@8/(byte) render_logo::screen_idx#3 )
  (bool~) render_logo::$7 ← (byte) render_logo::screen_idx#7 != (byte) render_logo::logo_start#1
  if((bool~) render_logo::$7) goto render_logo::@5
  to:render_logo::@6
render_logo::@5: scope:[render_logo]  from render_logo::@4
  (byte) render_logo::logo_start#4 ← phi( render_logo::@4/(byte) render_logo::logo_start#1 )
  (byte) render_logo::screen_idx#18 ← phi( render_logo::@4/(byte) render_logo::screen_idx#7 )
  (byte) render_logo::line#1 ← (number) 0
  to:render_logo::@7
render_logo::@6: scope:[render_logo]  from render_logo::@4
  (byte) render_logo::screen_idx#19 ← phi( render_logo::@4/(byte) render_logo::screen_idx#7 )
  (byte) render_logo::logo_idx#2 ← (number) 0
  to:render_logo::@12
render_logo::@7: scope:[render_logo]  from render_logo::@5 render_logo::@7
  (byte) render_logo::logo_start#3 ← phi( render_logo::@5/(byte) render_logo::logo_start#4 render_logo::@7/(byte) render_logo::logo_start#3 )
  (byte) render_logo::screen_idx#8 ← phi( render_logo::@5/(byte) render_logo::screen_idx#18 render_logo::@7/(byte) render_logo::screen_idx#8 )
  (byte) render_logo::line#9 ← phi( render_logo::@5/(byte) render_logo::line#1 render_logo::@7/(byte) render_logo::line#2 )
  (number~) render_logo::$8 ← (number) $28 * (byte) render_logo::line#9
  (byte*~) render_logo::$9 ← (const byte*) SCREEN + (number~) render_logo::$8
  *((byte*~) render_logo::$9 + (byte) render_logo::screen_idx#8) ← (number) 0
  (byte) render_logo::line#2 ← (byte) render_logo::line#9 + rangenext(0,5)
  (bool~) render_logo::$10 ← (byte) render_logo::line#2 != rangelast(0,5)
  unroll if((bool~) render_logo::$10) goto render_logo::@7
  to:render_logo::@8
render_logo::@8: scope:[render_logo]  from render_logo::@7
  (byte) render_logo::logo_start#2 ← phi( render_logo::@7/(byte) render_logo::logo_start#3 )
  (byte) render_logo::screen_idx#9 ← phi( render_logo::@7/(byte) render_logo::screen_idx#8 )
  (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#9
  to:render_logo::@4
render_logo::@12: scope:[render_logo]  from render_logo::@16 render_logo::@6
  (byte) render_logo::logo_idx#12 ← phi( render_logo::@16/(byte) render_logo::logo_idx#3 render_logo::@6/(byte) render_logo::logo_idx#2 )
  (byte) render_logo::screen_idx#10 ← phi( render_logo::@16/(byte) render_logo::screen_idx#4 render_logo::@6/(byte) render_logo::screen_idx#19 )
  (bool~) render_logo::$11 ← (byte) render_logo::screen_idx#10 != (number) $28
  if((bool~) render_logo::$11) goto render_logo::@13
  to:render_logo::@return
render_logo::@13: scope:[render_logo]  from render_logo::@12
  (byte) render_logo::screen_idx#20 ← phi( render_logo::@12/(byte) render_logo::screen_idx#10 )
  (byte) render_logo::logo_idx#10 ← phi( render_logo::@12/(byte) render_logo::logo_idx#12 )
  (byte) render_logo::line#3 ← (number) 0
  to:render_logo::@15
render_logo::@15: scope:[render_logo]  from render_logo::@13 render_logo::@15
  (byte) render_logo::screen_idx#11 ← phi( render_logo::@13/(byte) render_logo::screen_idx#20 render_logo::@15/(byte) render_logo::screen_idx#11 )
  (byte) render_logo::logo_idx#5 ← phi( render_logo::@13/(byte) render_logo::logo_idx#10 render_logo::@15/(byte) render_logo::logo_idx#5 )
  (byte) render_logo::line#10 ← phi( render_logo::@13/(byte) render_logo::line#3 render_logo::@15/(byte) render_logo::line#4 )
  (number~) render_logo::$12 ← (number) $28 * (byte) render_logo::line#10
  (byte*~) render_logo::$13 ← (const byte*) SCREEN + (number~) render_logo::$12
  (number~) render_logo::$14 ← (number) $28 * (byte) render_logo::line#10
  (number~) render_logo::$15 ← (byte) render_logo::logo_idx#5 + (number~) render_logo::$14
  *((byte*~) render_logo::$13 + (byte) render_logo::screen_idx#11) ← (number~) render_logo::$15
  (byte) render_logo::line#4 ← (byte) render_logo::line#10 + rangenext(0,5)
  (bool~) render_logo::$16 ← (byte) render_logo::line#4 != rangelast(0,5)
  unroll if((bool~) render_logo::$16) goto render_logo::@15
  to:render_logo::@16
render_logo::@16: scope:[render_logo]  from render_logo::@15
  (byte) render_logo::logo_idx#6 ← phi( render_logo::@15/(byte) render_logo::logo_idx#5 )
  (byte) render_logo::screen_idx#12 ← phi( render_logo::@15/(byte) render_logo::screen_idx#11 )
  (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#12
  (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#6
  to:render_logo::@12
render_logo::@21: scope:[render_logo]  from render_logo::@1 render_logo::@25
  (byte) render_logo::screen_idx#22 ← phi( render_logo::@1/(byte) render_logo::screen_idx#1 render_logo::@25/(byte) render_logo::screen_idx#5 )
  (byte) render_logo::logo_idx#7 ← phi( render_logo::@1/(byte) render_logo::logo_idx#1 render_logo::@25/(byte) render_logo::logo_idx#4 )
  (bool~) render_logo::$19 ← (byte) render_logo::logo_idx#7 != (number) $28
  if((bool~) render_logo::$19) goto render_logo::@22
  to:render_logo::@29
render_logo::@22: scope:[render_logo]  from render_logo::@21
  (byte) render_logo::screen_idx#21 ← phi( render_logo::@21/(byte) render_logo::screen_idx#22 )
  (byte) render_logo::logo_idx#11 ← phi( render_logo::@21/(byte) render_logo::logo_idx#7 )
  (byte) render_logo::line#5 ← (number) 0
  to:render_logo::@24
render_logo::@24: scope:[render_logo]  from render_logo::@22 render_logo::@24
  (byte) render_logo::screen_idx#13 ← phi( render_logo::@22/(byte) render_logo::screen_idx#21 render_logo::@24/(byte) render_logo::screen_idx#13 )
  (byte) render_logo::logo_idx#8 ← phi( render_logo::@22/(byte) render_logo::logo_idx#11 render_logo::@24/(byte) render_logo::logo_idx#8 )
  (byte) render_logo::line#11 ← phi( render_logo::@22/(byte) render_logo::line#5 render_logo::@24/(byte) render_logo::line#6 )
  (number~) render_logo::$20 ← (number) $28 * (byte) render_logo::line#11
  (byte*~) render_logo::$21 ← (const byte*) SCREEN + (number~) render_logo::$20
  (number~) render_logo::$22 ← (number) $28 * (byte) render_logo::line#11
  (number~) render_logo::$23 ← (byte) render_logo::logo_idx#8 + (number~) render_logo::$22
  *((byte*~) render_logo::$21 + (byte) render_logo::screen_idx#13) ← (number~) render_logo::$23
  (byte) render_logo::line#6 ← (byte) render_logo::line#11 + rangenext(0,5)
  (bool~) render_logo::$24 ← (byte) render_logo::line#6 != rangelast(0,5)
  unroll if((bool~) render_logo::$24) goto render_logo::@24
  to:render_logo::@25
render_logo::@25: scope:[render_logo]  from render_logo::@24
  (byte) render_logo::logo_idx#9 ← phi( render_logo::@24/(byte) render_logo::logo_idx#8 )
  (byte) render_logo::screen_idx#14 ← phi( render_logo::@24/(byte) render_logo::screen_idx#13 )
  (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#14
  (byte) render_logo::logo_idx#4 ← ++ (byte) render_logo::logo_idx#9
  to:render_logo::@21
render_logo::@29: scope:[render_logo]  from render_logo::@21 render_logo::@33
  (byte) render_logo::screen_idx#15 ← phi( render_logo::@21/(byte) render_logo::screen_idx#22 render_logo::@33/(byte) render_logo::screen_idx#6 )
  (bool~) render_logo::$25 ← (byte) render_logo::screen_idx#15 != (number) $28
  if((bool~) render_logo::$25) goto render_logo::@30
  to:render_logo::@return
render_logo::@30: scope:[render_logo]  from render_logo::@29
  (byte) render_logo::screen_idx#23 ← phi( render_logo::@29/(byte) render_logo::screen_idx#15 )
  (byte) render_logo::line#7 ← (number) 0
  to:render_logo::@32
render_logo::@32: scope:[render_logo]  from render_logo::@30 render_logo::@32
  (byte) render_logo::screen_idx#16 ← phi( render_logo::@30/(byte) render_logo::screen_idx#23 render_logo::@32/(byte) render_logo::screen_idx#16 )
  (byte) render_logo::line#12 ← phi( render_logo::@30/(byte) render_logo::line#7 render_logo::@32/(byte) render_logo::line#8 )
  (number~) render_logo::$26 ← (number) $28 * (byte) render_logo::line#12
  (byte*~) render_logo::$27 ← (const byte*) SCREEN + (number~) render_logo::$26
  *((byte*~) render_logo::$27 + (byte) render_logo::screen_idx#16) ← (number) 0
  (byte) render_logo::line#8 ← (byte) render_logo::line#12 + rangenext(0,5)
  (bool~) render_logo::$28 ← (byte) render_logo::line#8 != rangelast(0,5)
  unroll if((bool~) render_logo::$28) goto render_logo::@32
  to:render_logo::@33
render_logo::@33: scope:[render_logo]  from render_logo::@32
  (byte) render_logo::screen_idx#17 ← phi( render_logo::@32/(byte) render_logo::screen_idx#16 )
  (byte) render_logo::screen_idx#6 ← ++ (byte) render_logo::screen_idx#17
  to:render_logo::@29
render_logo::@return: scope:[render_logo]  from render_logo::@12 render_logo::@29
  return 
  to:@return
@32: scope:[]  from @30
  (word) xsin_idx#16 ← phi( @30/(word) xsin_idx#2 )
  (word) rem16u#25 ← phi( @30/(word) rem16u#28 )
  call main 
  to:@33
@33: scope:[]  from @32
  (word) xsin_idx#12 ← phi( @32/(word) xsin_idx#1 )
  (word) rem16u#19 ← phi( @32/(word) rem16u#9 )
  (word) rem16u#10 ← (word) rem16u#19
  (word) xsin_idx#6 ← (word) xsin_idx#12
  to:@end
@end: scope:[]  from @33

SYMBOL TABLE SSA
(label) @29
(label) @30
(label) @32
(label) @33
(label) @6
(label) @begin
(label) @end
(const byte*) BGCOL = (byte*)(number) $d021
(const byte*) BGCOL2 = (byte*)(number) $d022
(const byte*) BGCOL3 = (byte*)(number) $d023
(const byte) BLACK = (byte) 0
(const byte*) BORDERCOL = (byte*)(number) $d020
(const byte*) COLS = (byte*)(number) $d800
(const byte*) D016 = (byte*)(number) $d016
(const byte*) D018 = (byte*)(number) $d018
(const byte) DARK_GREY = (byte) $b
(const byte*) LOGO = (byte*)(number) $2000
(const dword) PI2_u4f28 = (dword) $6487ed51
(const dword) PI_HALF_u4f28 = (dword) $1921fb54
(const dword) PI_u4f28 = (dword) $3243f6a9
(const byte*) RASTER = (byte*)(number) $d012
(const byte*) SCREEN = (byte*)(number) $400
(const byte) SIZEOF_SIGNED_WORD = (byte) 2
(const byte) VIC_MCM = (byte) $10
(const byte) WHITE = (byte) 1
(const word) XSIN_SIZE = (word) $200
(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
(number~) divr16u::$2
(bool~) divr16u::$3
(bool~) divr16u::$4
(number~) divr16u::$5
(word~) divr16u::$6
(word~) divr16u::$7
(bool~) divr16u::$8
(bool~) divr16u::$9
(label) divr16u::@1
(label) divr16u::@2
(label) divr16u::@3
(label) divr16u::@4
(label) divr16u::@5
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0
(word) divr16u::dividend#1
(word) divr16u::dividend#2
(word) divr16u::dividend#3
(word) divr16u::dividend#4
(word) divr16u::dividend#5
(word) divr16u::dividend#6
(word) divr16u::dividend#7
(word) divr16u::dividend#8
(word) divr16u::divisor
(word) divr16u::divisor#0
(word) divr16u::divisor#1
(word) divr16u::divisor#2
(word) divr16u::divisor#3
(word) divr16u::divisor#4
(word) divr16u::divisor#5
(word) divr16u::divisor#6
(word) divr16u::divisor#7
(byte) divr16u::i
(byte) divr16u::i#0
(byte) divr16u::i#1
(byte) divr16u::i#2
(byte) divr16u::i#3
(byte) divr16u::i#4
(byte) divr16u::i#5
(byte) divr16u::i#6
(word) divr16u::quotient
(word) divr16u::quotient#0
(word) divr16u::quotient#1
(word) divr16u::quotient#2
(word) divr16u::quotient#3
(word) divr16u::quotient#4
(word) divr16u::quotient#5
(word) divr16u::quotient#6
(word) divr16u::quotient#7
(word) divr16u::quotient#8
(word) divr16u::rem
(word) divr16u::rem#0
(word) divr16u::rem#1
(word) divr16u::rem#10
(word) divr16u::rem#11
(word) divr16u::rem#2
(word) divr16u::rem#3
(word) divr16u::rem#4
(word) divr16u::rem#5
(word) divr16u::rem#6
(word) divr16u::rem#7
(word) divr16u::rem#8
(word) divr16u::rem#9
(word) divr16u::return
(word) divr16u::return#0
(word) divr16u::return#1
(word) divr16u::return#2
(word) divr16u::return#3
(word) divr16u::return#4
(word) divr16u::return#5
(word) divr16u::return#6
(void()) loop()
(bool~) loop::$0
(signed word*~) loop::$2
(bool~) loop::$4
(bool~) loop::$5
(word~) loop::$7
(label) loop::@1
(label) loop::@10
(label) loop::@11
(label) loop::@15
(label) loop::@4
(label) loop::@6
(label) loop::@return
(signed word) loop::xpos
(signed word) loop::xpos#0
(void()) main()
(byte~) main::$0
(bool~) main::$5
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@return
(byte) main::ch
(byte) main::ch#0
(byte) main::ch#1
(byte) main::ch#2
(label) main::toD0181
(word~) main::toD0181_$0
(number~) main::toD0181_$1
(number~) main::toD0181_$2
(number~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(number~) main::toD0181_$6
(number~) main::toD0181_$7
(number~) main::toD0181_$8
(label) main::toD0181_@return
(byte*) main::toD0181_gfx
(byte*) main::toD0181_gfx#0
(byte*) main::toD0181_gfx#1
(byte) main::toD0181_return
(byte) main::toD0181_return#0
(byte) main::toD0181_return#1
(byte) main::toD0181_return#2
(byte) main::toD0181_return#3
(byte*) main::toD0181_screen
(byte*) main::toD0181_screen#0
(byte*) main::toD0181_screen#1
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(bool~) memset::$0
(bool~) memset::$1
(byte*~) memset::$2
(byte*~) memset::$3
(bool~) memset::$4
(label) memset::@1
(label) memset::@2
(label) memset::@4
(label) memset::@5
(label) memset::@return
(byte) memset::c
(byte) memset::c#0
(byte) memset::c#1
(byte) memset::c#2
(byte) memset::c#3
(byte) memset::c#4
(byte) memset::c#5
(byte*) memset::dst
(byte*) memset::dst#0
(byte*) memset::dst#1
(byte*) memset::dst#2
(byte*) memset::dst#3
(byte*) memset::end
(byte*) memset::end#0
(byte*) memset::end#1
(byte*) memset::end#2
(word) memset::num
(word) memset::num#0
(word) memset::num#1
(word) memset::num#2
(word) memset::num#3
(void*) memset::return
(void*) memset::return#0
(void*) memset::return#1
(void*) memset::return#2
(void*) memset::return#3
(void*) memset::return#4
(void*) memset::str
(void*) memset::str#0
(void*) memset::str#1
(void*) memset::str#2
(void*) memset::str#3
(void*) memset::str#4
(void*) memset::str#5
(void*) memset::str#6
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$0
(word~) mul16s::$1
(word~) mul16s::$10
(word~) mul16s::$11
(word~) mul16s::$13
(word~) mul16s::$14
(word~) mul16s::$15
(word~) mul16s::$16
(word~) mul16s::$17
(dword~) mul16s::$2
(bool~) mul16s::$3
(bool~) mul16s::$4
(bool~) mul16s::$5
(bool~) mul16s::$6
(signed dword~) mul16s::$7
(word~) mul16s::$9
(label) mul16s::@1
(label) mul16s::@2
(label) mul16s::@3
(label) mul16s::@4
(label) mul16s::@6
(label) mul16s::@return
(signed word) mul16s::a
(signed word) mul16s::a#0
(signed word) mul16s::a#1
(signed word) mul16s::a#2
(signed word) mul16s::a#3
(signed word) mul16s::a#4
(signed word) mul16s::a#5
(signed word) mul16s::b
(signed word) mul16s::b#0
(signed word) mul16s::b#1
(signed word) mul16s::b#2
(signed word) mul16s::b#3
(signed word) mul16s::b#4
(dword) mul16s::m
(dword) mul16s::m#0
(dword) mul16s::m#1
(dword) mul16s::m#2
(dword) mul16s::m#3
(dword) mul16s::m#4
(dword) mul16s::m#5
(dword) mul16s::m#6
(signed dword) mul16s::return
(signed dword) mul16s::return#0
(signed dword) mul16s::return#1
(signed dword) mul16s::return#2
(signed dword) mul16s::return#3
(signed dword) mul16s::return#4
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(bool~) mul16u::$0
(number~) mul16u::$1
(bool~) mul16u::$2
(bool~) mul16u::$3
(dword~) mul16u::$4
(word~) mul16u::$5
(dword~) mul16u::$6
(label) mul16u::@1
(label) mul16u::@2
(label) mul16u::@3
(label) mul16u::@4
(label) mul16u::@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::a#7
(word) mul16u::b
(word) mul16u::b#0
(word) mul16u::b#1
(word) mul16u::b#2
(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
(dword) mul16u::return#5
(dword) mul16u::return#6
(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
(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
(void()) render_logo((signed word) render_logo::xpos)
(byte~) render_logo::$0
(number~) render_logo::$1
(bool~) render_logo::$10
(bool~) render_logo::$11
(number~) render_logo::$12
(byte*~) render_logo::$13
(number~) render_logo::$14
(number~) render_logo::$15
(bool~) render_logo::$16
(signed byte~) render_logo::$17
(byte~) render_logo::$18
(bool~) render_logo::$19
(number~) render_logo::$2
(number~) render_logo::$20
(byte*~) render_logo::$21
(number~) render_logo::$22
(number~) render_logo::$23
(bool~) render_logo::$24
(bool~) render_logo::$25
(number~) render_logo::$26
(byte*~) render_logo::$27
(bool~) render_logo::$28
(number~) render_logo::$3
(signed byte~) render_logo::$4
(bool~) render_logo::$5
(byte~) render_logo::$6
(bool~) render_logo::$7
(number~) render_logo::$8
(byte*~) render_logo::$9
(label) render_logo::@1
(label) render_logo::@12
(label) render_logo::@13
(label) render_logo::@15
(label) render_logo::@16
(label) render_logo::@21
(label) render_logo::@22
(label) render_logo::@24
(label) render_logo::@25
(label) render_logo::@29
(label) render_logo::@3
(label) render_logo::@30
(label) render_logo::@32
(label) render_logo::@33
(label) render_logo::@4
(label) render_logo::@5
(label) render_logo::@6
(label) render_logo::@7
(label) render_logo::@8
(label) render_logo::@return
(byte) render_logo::line
(byte) render_logo::line#0
(byte) render_logo::line#1
(byte) render_logo::line#10
(byte) render_logo::line#11
(byte) render_logo::line#12
(byte) render_logo::line#2
(byte) render_logo::line#3
(byte) render_logo::line#4
(byte) render_logo::line#5
(byte) render_logo::line#6
(byte) render_logo::line#7
(byte) render_logo::line#8
(byte) render_logo::line#9
(byte) render_logo::logo_idx
(byte) render_logo::logo_idx#0
(byte) render_logo::logo_idx#1
(byte) render_logo::logo_idx#10
(byte) render_logo::logo_idx#11
(byte) render_logo::logo_idx#12
(byte) render_logo::logo_idx#2
(byte) render_logo::logo_idx#3
(byte) render_logo::logo_idx#4
(byte) render_logo::logo_idx#5
(byte) render_logo::logo_idx#6
(byte) render_logo::logo_idx#7
(byte) render_logo::logo_idx#8
(byte) render_logo::logo_idx#9
(byte) render_logo::logo_start
(byte) render_logo::logo_start#0
(byte) render_logo::logo_start#1
(byte) render_logo::logo_start#2
(byte) render_logo::logo_start#3
(byte) render_logo::logo_start#4
(byte) render_logo::screen_idx
(byte) render_logo::screen_idx#0
(byte) render_logo::screen_idx#1
(byte) render_logo::screen_idx#10
(byte) render_logo::screen_idx#11
(byte) render_logo::screen_idx#12
(byte) render_logo::screen_idx#13
(byte) render_logo::screen_idx#14
(byte) render_logo::screen_idx#15
(byte) render_logo::screen_idx#16
(byte) render_logo::screen_idx#17
(byte) render_logo::screen_idx#18
(byte) render_logo::screen_idx#19
(byte) render_logo::screen_idx#2
(byte) render_logo::screen_idx#20
(byte) render_logo::screen_idx#21
(byte) render_logo::screen_idx#22
(byte) render_logo::screen_idx#23
(byte) render_logo::screen_idx#3
(byte) render_logo::screen_idx#4
(byte) render_logo::screen_idx#5
(byte) render_logo::screen_idx#6
(byte) render_logo::screen_idx#7
(byte) render_logo::screen_idx#8
(byte) render_logo::screen_idx#9
(signed byte) render_logo::x_char
(signed byte) render_logo::x_char#0
(signed byte) render_logo::x_char#1
(signed byte) render_logo::x_char#2
(signed word) render_logo::xpos
(signed word) render_logo::xpos#0
(signed word) render_logo::xpos#1
(signed word()) sin16s((dword) sin16s::x)
(bool~) sin16s::$0
(bool~) sin16s::$1
(word~) sin16s::$10
(word~) sin16s::$11
(word~) sin16s::$12
(word~) sin16s::$13
(signed word~) sin16s::$14
(bool~) sin16s::$15
(bool~) sin16s::$16
(dword~) sin16s::$17
(dword~) sin16s::$18
(signed word~) sin16s::$19
(bool~) sin16s::$2
(signed word~) sin16s::$20
(bool~) sin16s::$3
(dword~) sin16s::$4
(word~) sin16s::$5
(word~) sin16s::$6
(word~) sin16s::$7
(word~) sin16s::$8
(word~) sin16s::$9
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
(label) sin16s::@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_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
(signed word~) sin16s_gen2::$0
(signed word~) sin16s_gen2::$1
(dword~) sin16s_gen2::$10
(signed word~) sin16s_gen2::$2
(dword~) sin16s_gen2::$3
(bool~) sin16s_gen2::$4
(signed word~) sin16s_gen2::$5
(signed dword~) sin16s_gen2::$6
(word~) sin16s_gen2::$7
(signed word~) sin16s_gen2::$8
(signed word~) sin16s_gen2::$9
(label) sin16s_gen2::@1
(label) sin16s_gen2::@2
(label) sin16s_gen2::@7
(label) sin16s_gen2::@8
(label) sin16s_gen2::@9
(label) sin16s_gen2::@return
(signed word) sin16s_gen2::ampl
(signed word) sin16s_gen2::ampl#0
(signed word) sin16s_gen2::ampl#1
(signed word) sin16s_gen2::ampl#2
(signed word) sin16s_gen2::ampl#3
(signed word) sin16s_gen2::ampl#4
(signed word) sin16s_gen2::ampl#5
(word) sin16s_gen2::i
(word) sin16s_gen2::i#0
(word) sin16s_gen2::i#1
(word) sin16s_gen2::i#2
(word) sin16s_gen2::i#3
(word) sin16s_gen2::i#4
(word) sin16s_gen2::i#5
(signed word) sin16s_gen2::max
(signed word) sin16s_gen2::max#0
(signed word) sin16s_gen2::max#1
(signed word) sin16s_gen2::min
(signed word) sin16s_gen2::min#0
(signed word) sin16s_gen2::min#1
(signed word) sin16s_gen2::offs
(signed word) sin16s_gen2::offs#0
(signed word) sin16s_gen2::offs#1
(signed word) sin16s_gen2::offs#2
(signed word) sin16s_gen2::offs#3
(signed word) sin16s_gen2::offs#4
(signed word) sin16s_gen2::offs#5
(signed word*) sin16s_gen2::sintab
(signed word*) sin16s_gen2::sintab#0
(signed word*) sin16s_gen2::sintab#1
(signed word*) sin16s_gen2::sintab#2
(signed word*) sin16s_gen2::sintab#3
(signed word*) sin16s_gen2::sintab#4
(signed word*) sin16s_gen2::sintab#5
(signed word*) sin16s_gen2::sintab#6
(signed word*) sin16s_gen2::sintab#7
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0
(dword) sin16s_gen2::step#1
(dword) sin16s_gen2::step#2
(dword) sin16s_gen2::step#3
(dword) sin16s_gen2::step#4
(word) sin16s_gen2::wavelength
(word) sin16s_gen2::wavelength#0
(word) sin16s_gen2::wavelength#1
(word) sin16s_gen2::wavelength#2
(word) sin16s_gen2::wavelength#3
(word) sin16s_gen2::wavelength#4
(word) sin16s_gen2::wavelength#5
(word) sin16s_gen2::wavelength#6
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#0
(dword) sin16s_gen2::x#1
(dword) sin16s_gen2::x#2
(dword) sin16s_gen2::x#3
(dword) sin16s_gen2::x#4
(dword) sin16s_gen2::x#5
(const signed word*) xsin[(const word) XSIN_SIZE]  = { fill( XSIN_SIZE, 0) }
(word) xsin_idx
(word) xsin_idx#0
(word) xsin_idx#1
(word) xsin_idx#10
(word) xsin_idx#11
(word) xsin_idx#12
(word) xsin_idx#13
(word) xsin_idx#14
(word) xsin_idx#15
(word) xsin_idx#16
(word) xsin_idx#17
(word) xsin_idx#18
(word) xsin_idx#19
(word) xsin_idx#2
(word) xsin_idx#20
(word) xsin_idx#21
(word) xsin_idx#22
(word) xsin_idx#23
(word) xsin_idx#24
(word) xsin_idx#25
(word) xsin_idx#26
(word) xsin_idx#3
(word) xsin_idx#4
(word) xsin_idx#5
(word) xsin_idx#6
(word) xsin_idx#7
(word) xsin_idx#8
(word) xsin_idx#9

Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 dw= (word)div32u16u::quotient_lo#0
Successful SSA optimization Pass2FixInlineConstructors
Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1
Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80
Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80
Adding number conversion cast (unumber) 0 in (bool~) divr16u::$3 ← (unumber~) divr16u::$2 != (number) 0
Adding number conversion cast (unumber) 1 in (word~) divr16u::$6 ← (word) divr16u::dividend#4 << (number) 1
Adding number conversion cast (unumber) 1 in (word~) divr16u::$7 ← (word) divr16u::quotient#3 << (number) 1
Adding number conversion cast (unumber) 1 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (number) 1
Adding number conversion cast (unumber) divr16u::$5 in (number~) divr16u::$5 ← (word) divr16u::rem#7 | (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (word) divr16u::rem#3 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) mul16u::$0 ← (word) mul16u::a#3 != (number) 0
Adding number conversion cast (unumber) 1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (number) 1
Adding number conversion cast (unumber) mul16u::$1 in (number~) mul16u::$1 ← (word) mul16u::a#4 & (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (bool~) mul16u::$2 ← (unumber~) mul16u::$1 != (number) 0
Adding number conversion cast (unumber) 1 in (word~) mul16u::$5 ← (word) mul16u::a#5 >> (number) 1
Adding number conversion cast (unumber) 1 in (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (number) 1
Adding number conversion cast (snumber) 0 in (bool~) mul16s::$3 ← (signed word) mul16s::a#2 < (number) 0
Adding number conversion cast (snumber) 0 in (bool~) mul16s::$5 ← (signed word) mul16s::b#2 < (number) 0
Adding number conversion cast (snumber) 1 in (signed word~) sin16s_gen2::$1 ← (signed word) sin16s_gen2::ampl#0 >> (number) 1
Adding number conversion cast (unumber) 1 in (byte) sin16s::isUpper#1 ← (number) 1
Adding number conversion cast (unumber) 3 in (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (number) 3
Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#0 ← (number) 0
Adding number conversion cast (unumber) 1 in (byte) mulu16_sel::select#1 ← (number) 1
Adding number conversion cast (unumber) $10000/6 in (word) mulu16_sel::v2#2 ← (number) $10000/(number) 6
Adding number conversion cast (unumber) 1 in (byte) mulu16_sel::select#2 ← (number) 1
Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#3 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#4 ← (number) 0
Adding number conversion cast (unumber) 4 in (word~) sin16s::$12 ← (word) sin16s::x5#0 >> (number) 4
Adding number conversion cast (unumber) 0 in (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (number) 0
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0
Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (number) $3fff
Adding number conversion cast (unumber) main::toD0181_$1 in (number~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (unumber)(number) $3fff
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (number) 4
Adding number conversion cast (unumber) main::toD0181_$2 in (number~) main::toD0181_$2 ← (unumber~) main::toD0181_$1 * (unumber)(number) 4
Adding number conversion cast (unumber) main::toD0181_$3 in (number~) main::toD0181_$3 ← > (unumber~) main::toD0181_$2
Adding number conversion cast (unumber) 4 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (number) 4
Adding number conversion cast (unumber) main::toD0181_$6 in (number~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (unumber)(number) 4
Adding number conversion cast (unumber) $f in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (number) $f
Adding number conversion cast (unumber) main::toD0181_$7 in (number~) main::toD0181_$7 ← (unumber~) main::toD0181_$6 & (unumber)(number) $f
Adding number conversion cast (unumber) main::toD0181_$8 in (number~) main::toD0181_$8 ← (unumber~) main::toD0181_$3 | (unumber~) main::toD0181_$7
Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) WHITE|8 in (byte) memset::c#1 ← (const byte) WHITE|(number) 8
Adding number conversion cast (unumber) 8 in (byte) memset::c#1 ← ((unumber)) (const byte) WHITE|(number) 8
Adding number conversion cast (unumber) $3e8 in (word) memset::num#1 ← (number) $3e8
Adding number conversion cast (snumber) -$140 in (signed word) sin16s_gen2::min#0 ← (number) -$140
Adding number conversion cast (snumber) $140 in (signed word) sin16s_gen2::max#0 ← (number) $140
Adding number conversion cast (unumber) $ff in (bool~) loop::$0 ← *((const byte*) RASTER) != (number) $ff
Adding number conversion cast (unumber) 0 in (word) xsin_idx#4 ← (number) 0
Adding number conversion cast (unumber) 7 in (number~) render_logo::$1 ← (byte~) render_logo::$0 & (number) 7
Adding number conversion cast (unumber) render_logo::$1 in (number~) render_logo::$1 ← (byte~) render_logo::$0 & (unumber)(number) 7
Adding number conversion cast (unumber) render_logo::$2 in (number~) render_logo::$2 ← (const byte) VIC_MCM | (unumber~) render_logo::$1
Adding number conversion cast (snumber) 8 in (number~) render_logo::$3 ← (signed word) render_logo::xpos#1 / (number) 8
Adding number conversion cast (snumber) render_logo::$3 in (number~) render_logo::$3 ← (signed word) render_logo::xpos#1 / (snumber)(number) 8
Adding number conversion cast (snumber) 0 in (bool~) render_logo::$5 ← (signed word) render_logo::xpos#1 < (number) 0
Adding number conversion cast (unumber) 0 in (byte) render_logo::screen_idx#1 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) render_logo::screen_idx#2 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) render_logo::line#1 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) render_logo::logo_idx#2 ← (number) 0
Adding number conversion cast (unumber) $28 in (number~) render_logo::$8 ← (number) $28 * (byte) render_logo::line#9
Adding number conversion cast (unumber) render_logo::$8 in (number~) render_logo::$8 ← (unumber)(number) $28 * (byte) render_logo::line#9
Adding number conversion cast (unumber) 0 in *((byte*~) render_logo::$9 + (byte) render_logo::screen_idx#8) ← (number) 0
Adding number conversion cast (unumber) $28 in (bool~) render_logo::$11 ← (byte) render_logo::screen_idx#10 != (number) $28
Adding number conversion cast (unumber) 0 in (byte) render_logo::line#3 ← (number) 0
Adding number conversion cast (unumber) $28 in (number~) render_logo::$12 ← (number) $28 * (byte) render_logo::line#10
Adding number conversion cast (unumber) render_logo::$12 in (number~) render_logo::$12 ← (unumber)(number) $28 * (byte) render_logo::line#10
Adding number conversion cast (unumber) $28 in (number~) render_logo::$14 ← (number) $28 * (byte) render_logo::line#10
Adding number conversion cast (unumber) render_logo::$14 in (number~) render_logo::$14 ← (unumber)(number) $28 * (byte) render_logo::line#10
Adding number conversion cast (unumber) render_logo::$15 in (number~) render_logo::$15 ← (byte) render_logo::logo_idx#5 + (unumber~) render_logo::$14
Adding number conversion cast (unumber) $28 in (bool~) render_logo::$19 ← (byte) render_logo::logo_idx#7 != (number) $28
Adding number conversion cast (unumber) 0 in (byte) render_logo::line#5 ← (number) 0
Adding number conversion cast (unumber) $28 in (number~) render_logo::$20 ← (number) $28 * (byte) render_logo::line#11
Adding number conversion cast (unumber) render_logo::$20 in (number~) render_logo::$20 ← (unumber)(number) $28 * (byte) render_logo::line#11
Adding number conversion cast (unumber) $28 in (number~) render_logo::$22 ← (number) $28 * (byte) render_logo::line#11
Adding number conversion cast (unumber) render_logo::$22 in (number~) render_logo::$22 ← (unumber)(number) $28 * (byte) render_logo::line#11
Adding number conversion cast (unumber) render_logo::$23 in (number~) render_logo::$23 ← (byte) render_logo::logo_idx#8 + (unumber~) render_logo::$22
Adding number conversion cast (unumber) $28 in (bool~) render_logo::$25 ← (byte) render_logo::screen_idx#15 != (number) $28
Adding number conversion cast (unumber) 0 in (byte) render_logo::line#7 ← (number) 0
Adding number conversion cast (unumber) $28 in (number~) render_logo::$26 ← (number) $28 * (byte) render_logo::line#12
Adding number conversion cast (unumber) render_logo::$26 in (number~) render_logo::$26 ← (unumber)(number) $28 * (byte) render_logo::line#12
Adding number conversion cast (unumber) 0 in *((byte*~) render_logo::$27 + (byte) render_logo::screen_idx#16) ← (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0
Inlining cast (word~) mul16s::$0 ← (word)(signed word) mul16s::a#1
Inlining cast (word~) mul16s::$1 ← (word)(signed word) mul16s::b#1
Inlining cast (word~) mul16s::$10 ← (word)(signed word) mul16s::b#3
Inlining cast (signed dword~) mul16s::$7 ← (signed dword)(dword) mul16s::m#4
Inlining cast (word~) mul16s::$14 ← (word)(signed word) mul16s::a#3
Inlining cast (signed word~) sin16s_gen2::$8 ← (signed word)(word~) sin16s_gen2::$7
Inlining cast (byte) sin16s::isUpper#1 ← (unumber)(number) 1
Inlining cast (byte) mulu16_sel::select#0 ← (unumber)(number) 0
Inlining cast (byte) mulu16_sel::select#1 ← (unumber)(number) 1
Inlining cast (word) mulu16_sel::v2#2 ← (unumber)(number) $10000/(number) 6
Inlining cast (byte) mulu16_sel::select#2 ← (unumber)(number) 1
Inlining cast (byte) mulu16_sel::select#3 ← (unumber)(number) 0
Inlining cast (byte) mulu16_sel::select#4 ← (unumber)(number) 0
Inlining cast (signed word~) sin16s::$14 ← (signed word)(word) sin16s::usinx#1
Inlining cast (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#3
Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3
Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3
Inlining cast (word~) main::toD0181_$0 ← (word)(byte*) main::toD0181_screen#1
Inlining cast (word~) main::toD0181_$4 ← (word)(byte*) main::toD0181_gfx#1
Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8
Inlining cast (byte) memset::c#1 ← (unumber)(const byte) WHITE|(unumber)(number) 8
Inlining cast (word) memset::num#1 ← (unumber)(number) $3e8
Inlining cast (signed word) sin16s_gen2::min#0 ← (snumber)(number) -$140
Inlining cast (signed word) sin16s_gen2::max#0 ← (snumber)(number) $140
Inlining cast (word) xsin_idx#4 ← (unumber)(number) 0
Inlining cast (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#1
Inlining cast (signed byte~) render_logo::$4 ← (signed byte)(snumber~) render_logo::$3
Inlining cast (byte~) render_logo::$18 ← (byte)(signed byte~) render_logo::$17
Inlining cast (byte) render_logo::screen_idx#1 ← (unumber)(number) 0
Inlining cast (byte~) render_logo::$6 ← (byte)(signed byte) render_logo::x_char#2
Inlining cast (byte) render_logo::screen_idx#2 ← (unumber)(number) 0
Inlining cast (byte) render_logo::line#1 ← (unumber)(number) 0
Inlining cast (byte) render_logo::logo_idx#2 ← (unumber)(number) 0
Inlining cast *((byte*~) render_logo::$9 + (byte) render_logo::screen_idx#8) ← (unumber)(number) 0
Inlining cast (byte) render_logo::line#3 ← (unumber)(number) 0
Inlining cast (byte) render_logo::line#5 ← (unumber)(number) 0
Inlining cast (byte) render_logo::line#7 ← (unumber)(number) 0
Inlining cast *((byte*~) render_logo::$27 + (byte) render_logo::screen_idx#16) ← (unumber)(number) 0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 53266
Simplifying constant pointer cast (byte*) 53280
Simplifying constant pointer cast (byte*) 53281
Simplifying constant pointer cast (byte*) 53282
Simplifying constant pointer cast (byte*) 53283
Simplifying constant pointer cast (byte*) 53270
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (byte*) 55296
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (byte*) 8192
Simplifying constant integer cast 1
Simplifying constant integer cast $80
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast (word) div32u16u::quotient_hi#1
Simplifying constant integer cast (word) div32u16u::quotient_lo#0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 3
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 4
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast $3e8
Simplifying constant integer cast (const byte) WHITE|(unumber)(number) 8
Simplifying constant integer cast 8
Simplifying constant integer cast $3e8
Simplifying constant integer cast -$140
Simplifying constant integer cast $140
Simplifying constant integer cast $ff
Simplifying constant integer cast 0
Simplifying constant integer cast 7
Simplifying constant integer cast 8
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (word) $3e8
Finalized signed number type (signed word) -$140
Finalized signed number type (signed word) $140
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 7
Finalized signed number type (signed byte) 8
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80
Inferred type updated to word in (unumber~) divr16u::$5 ← (word) divr16u::rem#7 | (byte) 1
Inferred type updated to byte in (unumber~) mul16u::$1 ← (word) mul16u::a#4 & (byte) 1
Inferred type updated to word in (unumber~) main::toD0181_$1 ← (word~) main::toD0181_$0 & (word) $3fff
Inferred type updated to word in (unumber~) main::toD0181_$2 ← (word~) main::toD0181_$1 * (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$3 ← > (word~) main::toD0181_$2
Inferred type updated to byte in (unumber~) main::toD0181_$6 ← (byte~) main::toD0181_$5 / (byte) 4
Inferred type updated to byte in (unumber~) main::toD0181_$7 ← (byte~) main::toD0181_$6 & (byte) $f
Inferred type updated to byte in (unumber~) main::toD0181_$8 ← (byte~) main::toD0181_$3 | (byte~) main::toD0181_$7
Inferred type updated to byte in (unumber~) render_logo::$1 ← (byte~) render_logo::$0 & (byte) 7
Inferred type updated to byte in (unumber~) render_logo::$2 ← (const byte) VIC_MCM | (byte~) render_logo::$1
Inferred type updated to signed word in (snumber~) render_logo::$3 ← (signed word) render_logo::xpos#1 / (signed byte) 8
Inferred type updated to byte in (unumber~) render_logo::$8 ← (byte) $28 * (byte) render_logo::line#9
Inferred type updated to byte in (unumber~) render_logo::$12 ← (byte) $28 * (byte) render_logo::line#10
Inferred type updated to byte in (unumber~) render_logo::$14 ← (byte) $28 * (byte) render_logo::line#10
Inferred type updated to byte in (unumber~) render_logo::$15 ← (byte) render_logo::logo_idx#5 + (byte~) render_logo::$14
Inferred type updated to byte in (unumber~) render_logo::$20 ← (byte) $28 * (byte) render_logo::line#11
Inferred type updated to byte in (unumber~) render_logo::$22 ← (byte) $28 * (byte) render_logo::line#11
Inferred type updated to byte in (unumber~) render_logo::$23 ← (byte) render_logo::logo_idx#8 + (byte~) render_logo::$22
Inferred type updated to byte in (unumber~) render_logo::$26 ← (byte) $28 * (byte) render_logo::line#12
Inversing boolean not [10] (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte) 0 from [9] (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte) 0
Inversing boolean not [18] (bool~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from [17] (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2
Inversing boolean not [75] (bool~) mul16u::$3 ← (byte~) mul16u::$1 == (byte) 0 from [74] (bool~) mul16u::$2 ← (byte~) mul16u::$1 != (byte) 0
Inversing boolean not [101] (bool~) mul16s::$4 ← (signed word) mul16s::a#2 >= (signed byte) 0 from [100] (bool~) mul16s::$3 ← (signed word) mul16s::a#2 < (signed byte) 0
Inversing boolean not [105] (bool~) mul16s::$6 ← (signed word) mul16s::b#2 >= (signed byte) 0 from [104] (bool~) mul16s::$5 ← (signed word) mul16s::b#2 < (signed byte) 0
Inversing boolean not [170] (bool~) sin16s::$1 ← (dword) sin16s::x#3 < (const dword) PI_u4f28 from [169] (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (const dword) PI_u4f28
Inversing boolean not [174] (bool~) sin16s::$3 ← (dword) sin16s::x#4 < (const dword) PI_HALF_u4f28 from [173] (bool~) sin16s::$2 ← (dword) sin16s::x#4 >= (const dword) PI_HALF_u4f28
Inversing boolean not [233] (bool~) sin16s::$16 ← (byte) sin16s::isUpper#2 == (byte) 0 from [232] (bool~) sin16s::$15 ← (byte) sin16s::isUpper#2 != (byte) 0
Inversing boolean not [262] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [261] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0
Inversing boolean not [358] (bool~) loop::$5 ← (word) xsin_idx#3 != (const word) XSIN_SIZE from [357] (bool~) loop::$4 ← (word) xsin_idx#3 == (const word) XSIN_SIZE
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~) 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::$4 (dword) div32u16u::return#3 (dword) div32u16u::return#1 
Alias (word) mul16u::a#3 = (word) mul16u::a#4 (word) mul16u::a#7 
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#4 (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 (word) mul16u::a#1 = (word~) mul16s::$0 
Alias (word) mul16u::b#0 = (word~) mul16s::$1 
Alias (dword) mul16u::return#2 = (dword) mul16u::return#5 
Alias (signed word) mul16s::a#1 = (signed word) mul16s::a#2 (signed word) mul16s::a#5 
Alias (signed word) mul16s::b#1 = (signed word) mul16s::b#4 (signed word) mul16s::b#3 
Alias (dword) mul16s::m#0 = (dword~) mul16s::$2 (dword) mul16s::m#3 
Alias (word~) mul16s::$16 = (word~) mul16s::$11 
Alias (signed dword) mul16s::return#0 = (signed dword~) mul16s::$7 (signed dword) mul16s::return#3 (signed dword) mul16s::return#1 
Alias (dword) mul16s::m#5 = (dword) mul16s::m#6 
Alias (signed word) mul16s::a#3 = (signed word) mul16s::a#4 
Alias (word~) mul16s::$17 = (word~) mul16s::$15 
Alias (signed word) sin16s_gen2::ampl#0 = (signed word~) sin16s_gen2::$0 (signed word) sin16s_gen2::ampl#4 
Alias (signed word) sin16s_gen2::offs#0 = (signed word~) sin16s_gen2::$2 (signed word) sin16s_gen2::offs#5 
Alias (dword) div32u16u::return#2 = (dword) div32u16u::return#4 
Alias (word) sin16s_gen2::wavelength#1 = (word) sin16s_gen2::wavelength#3 
Alias (signed word*) sin16s_gen2::sintab#6 = (signed word*) sin16s_gen2::sintab#7 
Alias (word) rem16u#15 = (word) rem16u#6 
Alias (dword) sin16s_gen2::step#0 = (dword~) sin16s_gen2::$3 
Alias (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#4 (dword) sin16s_gen2::x#5 (dword) sin16s_gen2::x#3 
Alias (signed word) sin16s_gen2::ampl#1 = (signed word) sin16s_gen2::ampl#2 (signed word) sin16s_gen2::ampl#3 (signed word) sin16s_gen2::ampl#5 
Alias (signed word) sin16s_gen2::offs#1 = (signed word) sin16s_gen2::offs#3 (signed word) sin16s_gen2::offs#4 (signed word) sin16s_gen2::offs#2 
Alias (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#4 (signed word*) sin16s_gen2::sintab#5 (signed word*) sin16s_gen2::sintab#3 
Alias (dword) sin16s_gen2::step#1 = (dword) sin16s_gen2::step#3 (dword) sin16s_gen2::step#4 (dword) sin16s_gen2::step#2 
Alias (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#5 (word) sin16s_gen2::i#4 (word) sin16s_gen2::i#3 
Alias (word) sin16s_gen2::wavelength#2 = (word) sin16s_gen2::wavelength#6 (word) sin16s_gen2::wavelength#5 (word) sin16s_gen2::wavelength#4 
Alias (word) rem16u#16 = (word) rem16u#32 (word) rem16u#22 (word) rem16u#29 (word) rem16u#26 (word) rem16u#7 
Alias (signed word) sin16s::return#0 = (signed word) sin16s::return#3 
Alias (signed word) mul16s::a#0 = (signed word~) sin16s_gen2::$5 
Alias (signed dword) mul16s::return#2 = (signed dword) mul16s::return#4 
Alias (dword) sin16s_gen2::x#1 = (dword~) sin16s_gen2::$10 
Alias (dword) sin16s::x#3 = (dword) sin16s::x#5 
Alias (dword) sin16s::x#1 = (dword~) sin16s::$17 
Alias (word) sin16s::x1#0 = (word~) sin16s::$5 (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::$6 
Alias (word) mulu16_sel::return#1 = (word) mulu16_sel::return#8 
Alias (word) sin16s::x3#0 = (word~) sin16s::$7 (word) sin16s::x3#1 
Alias (word) mulu16_sel::return#2 = (word) mulu16_sel::return#9 
Alias (word) sin16s::x3_6#0 = (word~) sin16s::$8 
Alias (word) sin16s::usinx#0 = (word~) sin16s::$9 (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::$10 
Alias (word) mulu16_sel::return#11 = (word) mulu16_sel::return#4 
Alias (word) sin16s::x5#0 = (word~) sin16s::$11 
Alias (word) sin16s::x5_128#0 = (word~) sin16s::$12 
Alias (word) sin16s::usinx#1 = (word~) sin16s::$13 (word) sin16s::usinx#3 
Alias (signed word) sin16s::sinx#0 = (signed word~) sin16s::$14 
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::$18 
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::$20 
Alias (dword) mul16u::return#3 = (dword) mul16u::return#6 
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 (void*) memset::return#0 = (void*) memset::str#2 (void*) memset::return#4 (void*) memset::return#1 
Alias (void*) memset::str#3 = (void*) memset::str#4 
Alias (word) memset::num#2 = (word) memset::num#3 
Alias (byte) memset::c#4 = (byte) memset::c#5 
Alias (byte*) memset::end#0 = (byte*~) memset::$3 
Alias (byte) memset::c#2 = (byte) memset::c#3 
Alias (byte*) memset::dst#2 = (byte*) memset::dst#3 
Alias (byte*) memset::end#1 = (byte*) memset::end#2 
Alias (void*) memset::str#5 = (void*) memset::str#6 
Alias (word) rem16u#0 = (word) rem16u#31 (word) rem16u#28 (word) rem16u#25 
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 
Alias (word) rem16u#30 = (word) rem16u#36 (word) rem16u#37 (word) rem16u#35 (word) rem16u#34 (word) rem16u#33 
Alias (word) xsin_idx#21 = (word) xsin_idx#25 (word) xsin_idx#26 (word) xsin_idx#24 (word) xsin_idx#23 (word) xsin_idx#22 
Alias (byte) main::toD0181_return#0 = (byte~) main::toD0181_$8 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$0 
Alias (word) rem16u#23 = (word) rem16u#27 
Alias (word) xsin_idx#13 = (word) xsin_idx#17 (word) xsin_idx#20 
Alias (word) rem16u#17 = (word) rem16u#8 (word) rem16u#24 (word) rem16u#18 (word) rem16u#9 
Alias (word) xsin_idx#0 = (word) xsin_idx#7 (word) xsin_idx#8 (word) xsin_idx#1 
Alias (word) xsin_idx#10 = (word) xsin_idx#9 (word) xsin_idx#14 
Alias (word) xsin_idx#11 = (word) xsin_idx#15 (word) xsin_idx#5 
Alias (signed byte) render_logo::x_char#0 = (signed byte~) render_logo::$4 (signed byte) render_logo::x_char#1 (signed byte) render_logo::x_char#2 
Alias (byte) render_logo::logo_idx#1 = (byte~) render_logo::$18 
Alias (byte) render_logo::logo_start#0 = (byte~) render_logo::$6 
Alias (byte) render_logo::screen_idx#18 = (byte) render_logo::screen_idx#7 (byte) render_logo::screen_idx#19 
Alias (byte) render_logo::logo_start#1 = (byte) render_logo::logo_start#4 
Alias (byte) render_logo::screen_idx#8 = (byte) render_logo::screen_idx#9 
Alias (byte) render_logo::logo_start#2 = (byte) render_logo::logo_start#3 
Alias (byte) render_logo::logo_idx#10 = (byte) render_logo::logo_idx#12 
Alias (byte) render_logo::screen_idx#10 = (byte) render_logo::screen_idx#20 
Alias (byte) render_logo::screen_idx#11 = (byte) render_logo::screen_idx#12 
Alias (byte) render_logo::logo_idx#5 = (byte) render_logo::logo_idx#6 
Alias (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#7 
Alias (byte) render_logo::screen_idx#21 = (byte) render_logo::screen_idx#22 
Alias (byte) render_logo::screen_idx#13 = (byte) render_logo::screen_idx#14 
Alias (byte) render_logo::logo_idx#8 = (byte) render_logo::logo_idx#9 
Alias (byte) render_logo::screen_idx#15 = (byte) render_logo::screen_idx#23 
Alias (byte) render_logo::screen_idx#16 = (byte) render_logo::screen_idx#17 
Alias (word) xsin_idx#16 = (word) xsin_idx#2 
Alias (word) rem16u#10 = (word) rem16u#19 
Alias (word) xsin_idx#12 = (word) xsin_idx#6 
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#3 = (word) mul16u::a#5 
Alias (dword) mul16u::mb#2 = (dword) mul16u::mb#3 
Alias (signed word) mul16s::b#1 = (signed word) mul16s::b#2 
Alias (signed word) mul16s::a#1 = (signed word) mul16s::a#3 
Alias (byte) sin16s::isUpper#2 = (byte) sin16s::isUpper#8 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (word) divr16u::divisor#2 (word) divr16u::divisor#6
Identical Phi Values (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0
Identical Phi Values (word) div32u16u::divisor#1 (word) div32u16u::divisor#0
Identical Phi Values (word) rem16u#20 (word) rem16u#21
Identical Phi Values (word) rem16u#12 (word) rem16u#1
Identical Phi Values (word) rem16u#13 (word) rem16u#1
Identical Phi Values (signed word) mul16s::a#1 (signed word) mul16s::a#0
Identical Phi Values (signed word) mul16s::b#1 (signed word) mul16s::b#0
Identical Phi Values (signed word) sin16s_gen2::max#1 (signed word) sin16s_gen2::max#0
Identical Phi Values (signed word) sin16s_gen2::min#1 (signed word) sin16s_gen2::min#0
Identical Phi Values (word) sin16s_gen2::wavelength#1 (word) sin16s_gen2::wavelength#0
Identical Phi Values (word) rem16u#21 (word) rem16u#23
Identical Phi Values (signed word*) sin16s_gen2::sintab#6 (signed word*) sin16s_gen2::sintab#1
Identical Phi Values (word) rem16u#15 (word) rem16u#13
Identical Phi Values (word) sin16s_gen2::wavelength#2 (word) sin16s_gen2::wavelength#1
Identical Phi Values (word) rem16u#16 (word) rem16u#15
Identical Phi Values (signed word) sin16s_gen2::ampl#1 (signed word) sin16s_gen2::ampl#0
Identical Phi Values (signed word) sin16s_gen2::offs#1 (signed word) sin16s_gen2::offs#0
Identical Phi Values (dword) sin16s_gen2::step#1 (dword) sin16s_gen2::step#0
Identical Phi Values (dword) sin16s::x#3 (dword) sin16s::x#0
Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0
Identical Phi Values (void*) memset::str#5 (void*) memset::str#3
Identical Phi Values (byte) memset::c#2 (byte) memset::c#4
Identical Phi Values (word) rem16u#30 (word) rem16u#0
Identical Phi Values (word) xsin_idx#21 (word) xsin_idx#16
Identical Phi Values (word) rem16u#23 (word) rem16u#30
Identical Phi Values (word) xsin_idx#13 (word) xsin_idx#21
Identical Phi Values (word) rem16u#17 (word) rem16u#16
Identical Phi Values (word) xsin_idx#0 (word) xsin_idx#11
Identical Phi Values (word) xsin_idx#18 (word) xsin_idx#13
Identical Phi Values (word) xsin_idx#10 (word) xsin_idx#11
Identical Phi Values (signed word) render_logo::xpos#1 (signed word) render_logo::xpos#0
Identical Phi Values (byte) render_logo::screen_idx#8 (byte) render_logo::screen_idx#18
Identical Phi Values (byte) render_logo::logo_start#2 (byte) render_logo::logo_start#1
Identical Phi Values (byte) render_logo::logo_idx#5 (byte) render_logo::logo_idx#10
Identical Phi Values (byte) render_logo::screen_idx#11 (byte) render_logo::screen_idx#10
Identical Phi Values (byte) render_logo::logo_idx#8 (byte) render_logo::logo_idx#11
Identical Phi Values (byte) render_logo::screen_idx#13 (byte) render_logo::screen_idx#21
Identical Phi Values (byte) render_logo::screen_idx#16 (byte) render_logo::screen_idx#15
Identical Phi Values (word) rem16u#10 (word) rem16u#17
Identical Phi Values (word) xsin_idx#12 (word) xsin_idx#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (void*) memset::return#0 (void*) memset::str#3
Identical Phi Values (byte) render_logo::logo_start#1 (byte) render_logo::logo_start#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [412] (byte~) render_logo::$14 ← (byte) $28 * (byte) render_logo::line#10
Identified duplicate assignment right side [429] (byte~) render_logo::$22 ← (byte) $28 * (byte) render_logo::line#11
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) divr16u::$4 [9] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2
Simple Condition (bool~) divr16u::$9 [14] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3
Simple Condition (bool~) divr16u::$11 [19] if((byte) divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1
Simple Condition (bool~) mul16u::$0 [46] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2
Simple Condition (bool~) mul16u::$3 [49] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@4
Simple Condition (bool~) mul16s::$4 [62] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1
Simple Condition (bool~) mul16s::$6 [65] if((signed word) mul16s::b#0>=(signed byte) 0) goto mul16s::@2
Simple Condition (bool~) sin16s_gen2::$4 [91] if((word) sin16s_gen2::i#2<(word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@2
Simple Condition (bool~) sin16s::$1 [111] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1
Simple Condition (bool~) sin16s::$3 [114] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2
Simple Condition (bool~) sin16s::$16 [155] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@3
Simple Condition (bool~) memset::$1 [172] if((word) memset::num#2<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [179] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) main::$5 [218] if((byte) main::ch#1!=rangelast(0,$ef)) goto main::@1
Simple Condition (bool~) loop::$0 [234] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@4
Simple Condition (bool~) loop::$5 [243] if((word) xsin_idx#3!=(const word) XSIN_SIZE) goto loop::@11
Simple Condition (bool~) render_logo::$5 [259] if((signed word) render_logo::xpos#0<(signed byte) 0) goto render_logo::@1
Simple Condition (bool~) render_logo::$7 [267] if((byte) render_logo::screen_idx#18!=(byte) render_logo::logo_start#0) goto render_logo::@5
Simple Condition (bool~) render_logo::$10 [276] unroll if((byte) render_logo::line#2!=rangelast(0,5)) goto render_logo::@7
Simple Condition (bool~) render_logo::$11 [280] if((byte) render_logo::screen_idx#10!=(byte) $28) goto render_logo::@13
Simple Condition (bool~) render_logo::$16 [290] unroll if((byte) render_logo::line#4!=rangelast(0,5)) goto render_logo::@15
Simple Condition (bool~) render_logo::$19 [295] if((byte) render_logo::logo_idx#11!=(byte) $28) goto render_logo::@22
Simple Condition (bool~) render_logo::$24 [305] unroll if((byte) render_logo::line#6!=rangelast(0,5)) goto render_logo::@24
Simple Condition (bool~) render_logo::$25 [310] if((byte) render_logo::screen_idx#15!=(byte) $28) goto render_logo::@30
Simple Condition (bool~) render_logo::$28 [318] unroll if((byte) render_logo::line#8!=rangelast(0,5)) goto render_logo::@32
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [133] (word) mulu16_sel::v2#2 ← (unumber)(number) $10000/(number) 6
Constant right-side identified [203] (void*) memset::str#0 ← (void*)(const byte*) SCREEN
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) rem16u#0 = 0
Constant (const word) divr16u::quotient#0 = 0
Constant (const byte) divr16u::i#0 = 0
Constant (const word) divr16u::rem#3 = 0
Constant (const dword) mul16u::res#0 = 0
Constant (const dword) div32u16u::dividend#0 = PI2_u4f28
Constant (const dword) sin16s_gen2::x#0 = 0
Constant (const word) sin16s_gen2::i#0 = 0
Constant (const byte) sin16s::isUpper#0 = 0
Constant (const byte) sin16s::isUpper#1 = 1
Constant (const byte) mulu16_sel::select#0 = 0
Constant (const byte) mulu16_sel::select#1 = 1
Constant (const word) mulu16_sel::v2#2 = (unumber)$10000/6
Constant (const byte) mulu16_sel::select#2 = 1
Constant (const byte) mulu16_sel::select#3 = 0
Constant (const byte) mulu16_sel::select#4 = 0
Constant (const byte*) main::toD0181_screen#0 = SCREEN
Constant (const byte*) main::toD0181_gfx#0 = LOGO
Constant (const void*) memset::str#0 = (void*)SCREEN
Constant (const byte) memset::c#0 = BLACK
Constant (const word) memset::num#0 = $3e8
Constant (const void*) memset::str#1 = (void*)COLS
Constant (const byte) memset::c#1 = WHITE|8
Constant (const word) memset::num#1 = $3e8
Constant (const byte) main::ch#0 = 0
Constant (const signed word*) sin16s_gen2::sintab#1 = xsin
Constant (const word) sin16s_gen2::wavelength#0 = XSIN_SIZE
Constant (const signed word) sin16s_gen2::min#0 = -$140
Constant (const signed word) sin16s_gen2::max#0 = $140
Constant (const word) xsin_idx#16 = 0
Constant (const word) xsin_idx#4 = 0
Constant (const byte) render_logo::logo_idx#0 = 0
Constant (const byte) render_logo::screen_idx#0 = 0
Constant (const byte) render_logo::line#0 = 0
Constant (const byte) render_logo::screen_idx#1 = 0
Constant (const byte) render_logo::screen_idx#2 = 0
Constant (const byte) render_logo::line#1 = 0
Constant (const byte) render_logo::logo_idx#2 = 0
Constant (const byte) render_logo::line#3 = 0
Constant (const byte) render_logo::line#5 = 0
Constant (const byte) render_logo::line#7 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant (const word) div32u16u::divisor#0 = sin16s_gen2::wavelength#0
Constant (const word) main::toD0181_$0 = (word)main::toD0181_screen#0
Constant (const word) main::toD0181_$4 = (word)main::toD0181_gfx#0
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
if() condition always true - replacing block destination [231] if(true) goto loop::@4
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [17] divr16u::i#1 ← ++ divr16u::i#2 to ++
Resolved ranged comparison value [19] if(divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 to (number) $10
Resolved ranged next value [216] main::ch#1 ← ++ main::ch#2 to ++
Resolved ranged comparison value [218] if(main::ch#1!=rangelast(0,$ef)) goto main::@1 to (number) $f0
Resolved ranged next value [274] render_logo::line#2 ← ++ render_logo::line#9 to ++
Resolved ranged comparison value [276] unroll if(render_logo::line#2!=rangelast(0,5)) goto render_logo::@7 to (number) 6
Resolved ranged next value [288] render_logo::line#4 ← ++ render_logo::line#10 to ++
Resolved ranged comparison value [290] unroll if(render_logo::line#4!=rangelast(0,5)) goto render_logo::@15 to (number) 6
Resolved ranged next value [303] render_logo::line#6 ← ++ render_logo::line#11 to ++
Resolved ranged comparison value [305] unroll if(render_logo::line#6!=rangelast(0,5)) goto render_logo::@24 to (number) 6
Resolved ranged next value [316] render_logo::line#8 ← ++ render_logo::line#12 to ++
Resolved ranged comparison value [318] unroll if(render_logo::line#8!=rangelast(0,5)) goto render_logo::@32 to (number) 6
Eliminating unused variable (void*) memset::return#2 and assignment [159] (void*) memset::return#2 ← (void*) memset::str#3
Eliminating unused variable (void*) memset::return#3 and assignment [161] (void*) memset::return#3 ← (void*) memset::str#3
Eliminating unused constant (const byte) render_logo::logo_idx#0
Eliminating unused constant (const byte) render_logo::screen_idx#0
Eliminating unused constant (const byte) render_logo::line#0
Eliminating unused constant (const word) rem16u#0
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block loop::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Adding number conversion cast (unumber) $10 in if((byte) divr16u::i#1!=(number) $10) goto divr16u::@1
Adding number conversion cast (unumber) $f0 in if((byte) main::ch#1!=(number) $f0) goto main::@1
Adding number conversion cast (unumber) 6 in unroll if((byte) render_logo::line#2!=(number) 6) goto render_logo::@7
Adding number conversion cast (unumber) 6 in unroll if((byte) render_logo::line#4!=(number) 6) goto render_logo::@15
Adding number conversion cast (unumber) 6 in unroll if((byte) render_logo::line#6!=(number) 6) goto render_logo::@24
Adding number conversion cast (unumber) 6 in unroll if((byte) render_logo::line#8!=(number) 6) goto render_logo::@32
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $10
Simplifying constant integer cast $f0
Simplifying constant integer cast 6
Simplifying constant integer cast 6
Simplifying constant integer cast 6
Simplifying constant integer cast 6
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) $f0
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) 6
Finalized unsigned number type (byte) 6
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte~) render_logo::$14 = (byte~) render_logo::$12 
Alias (byte~) render_logo::$22 = (byte~) render_logo::$20 
Successful SSA optimization Pass2AliasElimination
Constant right-side identified [18] (word) divr16u::dividend#1 ← > (const dword) div32u16u::dividend#0
Constant right-side identified [22] (word) divr16u::dividend#2 ← < (const dword) div32u16u::dividend#0
Constant right-side identified [59] (signed word) sin16s_gen2::ampl#0 ← (const signed word) sin16s_gen2::max#0 - (const signed word) sin16s_gen2::min#0
Constant right-side identified [149] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff
Constant right-side identified [152] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0
Constant (const word) divr16u::dividend#2 = <div32u16u::dividend#0
Constant (const signed word) sin16s_gen2::ampl#0 = sin16s_gen2::max#0-sin16s_gen2::min#0
Constant (const word) main::toD0181_$1 = main::toD0181_$0&$3fff
Constant (const byte) main::toD0181_$5 = >main::toD0181_$4
Successful SSA optimization Pass2ConstantIdentification
Constant (const signed word) mul16s::b#0 = sin16s_gen2::ampl#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const word) mul16u::b#0 = (word)mul16s::b#0
Constant (const word) mul16s::$10 = (word)mul16s::b#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [47] if((const signed word) mul16s::b#0>=(signed byte) 0) goto mul16s::@2
Successful SSA optimization Pass2ConstantIfs
Eliminating variable (word~) mul16s::$13 from unused block mul16s::@4
Eliminating variable (word~) mul16s::$14 from unused block mul16s::@4
Eliminating variable (word~) mul16s::$17 from unused block mul16s::@4
Eliminating variable (dword) mul16s::m#2 from unused block mul16s::@4
Removing PHI-reference to removed block (mul16s::@4) in block mul16s::@2
Removing unused block mul16s::@4
Successful SSA optimization Pass2EliminateUnusedBlocks
Alias (dword) mul16s::m#4 = (dword) mul16s::m#5 
Successful SSA optimization Pass2AliasElimination
Constant right-side identified [49] (signed word~) sin16s_gen2::$1 ← (const signed word) sin16s_gen2::ampl#0 >> (signed byte) 1
Constant right-side identified [137] (word~) main::toD0181_$2 ← (const word) main::toD0181_$1 * (byte) 4
Constant right-side identified [139] (byte~) main::toD0181_$6 ← (const byte) main::toD0181_$5 / (byte) 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const signed word) sin16s_gen2::$1 = sin16s_gen2::ampl#0>>1
Constant (const word) main::toD0181_$2 = main::toD0181_$1*4
Constant (const byte) main::toD0181_$6 = main::toD0181_$5/4
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [49] (signed word) sin16s_gen2::offs#0 ← (const signed word) sin16s_gen2::min#0 + (const signed word) sin16s_gen2::$1
Constant right-side identified [136] (byte~) main::toD0181_$3 ← > (const word) main::toD0181_$2
Constant right-side identified [137] (byte~) main::toD0181_$7 ← (const byte) main::toD0181_$6 & (byte) $f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const signed word) sin16s_gen2::offs#0 = sin16s_gen2::min#0+sin16s_gen2::$1
Constant (const byte) main::toD0181_$3 = >main::toD0181_$2
Constant (const byte) main::toD0181_$7 = main::toD0181_$6&$f
Successful SSA optimization Pass2ConstantIdentification
Simplifying constant evaluating to zero (const signed word) sin16s_gen2::min#0+(const signed word) sin16s_gen2::$1 in 
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero sin16s_gen2::$8 in [64] (signed word~) sin16s_gen2::$9 ← (const signed word) sin16s_gen2::offs#0 + (signed word~) sin16s_gen2::$8
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused constant (const signed word) sin16s_gen2::$1
Eliminating unused constant (const signed word) sin16s_gen2::offs#0
Successful SSA optimization PassNEliminateUnusedVars
Alias (signed word~) sin16s_gen2::$9 = (signed word~) sin16s_gen2::$8 
Successful SSA optimization Pass2AliasElimination
Constant right-side identified [134] (byte) main::toD0181_return#0 ← (const byte) main::toD0181_$3 | (const byte) main::toD0181_$7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::toD0181_return#0 = main::toD0181_$3|main::toD0181_$7
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@7 tails: render_logo::@7 blocks: render_logo::@7 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#9 (const byte) render_logo::line#1
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [174] if((byte) render_logo::line#2==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [170] (byte~) render_logo::$8 ← (byte) $28 * (const byte) render_logo::line#1
Constant right-side identified [173] (byte) render_logo::line#2 ← ++ (const byte) render_logo::line#1
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$8 = $28*render_logo::line#1
Constant (const byte) render_logo::line#2 = ++render_logo::line#1
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [174] if((const byte) render_logo::line#2==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConstantIfs
Simplifying constant evaluating to zero (byte) $28*(const byte) render_logo::line#1 in 
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero SCREEN in [171] (byte*~) render_logo::$9 ← (const byte*) SCREEN + (const byte) render_logo::$8
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused constant (const byte) render_logo::$8
Successful SSA optimization PassNEliminateUnusedVars
Constant (const byte*) render_logo::$9 = SCREEN
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@15 tails: render_logo::@15 blocks: render_logo::@15 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#10 (const byte) render_logo::line#3
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [49] if((byte) render_logo::line#4==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [44] (byte~) render_logo::$14 ← (byte) $28 * (const byte) render_logo::line#3
Constant right-side identified [48] (byte) render_logo::line#4 ← ++ (const byte) render_logo::line#3
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$14 = $28*render_logo::line#3
Constant (const byte) render_logo::line#4 = ++render_logo::line#3
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [49] if((const byte) render_logo::line#4==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConstantIfs
Simplifying constant evaluating to zero (byte) $28*(const byte) render_logo::line#3 in 
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero SCREEN in [45] (byte*~) render_logo::$13 ← (const byte*) SCREEN + (const byte) render_logo::$14
Simplifying expression containing zero render_logo::logo_idx#10 in [46] (byte~) render_logo::$15 ← (byte) render_logo::logo_idx#10 + (const byte) render_logo::$14
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused constant (const byte) render_logo::$14
Successful SSA optimization PassNEliminateUnusedVars
Alias (byte) render_logo::logo_idx#10 = (byte~) render_logo::$15 
Successful SSA optimization Pass2AliasElimination
Constant (const byte*) render_logo::$13 = SCREEN
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@15_1 tails: render_logo::@15_1 blocks: render_logo::@15_1 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#15 (const byte) render_logo::line#4
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [50] if((byte) render_logo::line#16==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [45] (byte~) render_logo::$31 ← (byte) $28 * (const byte) render_logo::line#4
Constant right-side identified [49] (byte) render_logo::line#16 ← ++ (const byte) render_logo::line#4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$31 = $28*render_logo::line#4
Constant (const byte) render_logo::line#16 = ++render_logo::line#4
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [50] if((const byte) render_logo::line#16==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [44] (byte*~) render_logo::$32 ← (const byte*) SCREEN + (const byte) render_logo::$31
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$32 = SCREEN+render_logo::$31
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@15_2 tails: render_logo::@15_2 blocks: render_logo::@15_2 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#17 (const byte) render_logo::line#16
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [52] if((byte) render_logo::line#18==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [47] (byte~) render_logo::$34 ← (byte) $28 * (const byte) render_logo::line#16
Constant right-side identified [51] (byte) render_logo::line#18 ← ++ (const byte) render_logo::line#16
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$34 = $28*render_logo::line#16
Constant (const byte) render_logo::line#18 = ++render_logo::line#16
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [52] if((const byte) render_logo::line#18==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [46] (byte*~) render_logo::$35 ← (const byte*) SCREEN + (const byte) render_logo::$34
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$35 = SCREEN+render_logo::$34
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@15_3 tails: render_logo::@15_3 blocks: render_logo::@15_3 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#19 (const byte) render_logo::line#18
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [54] if((byte) render_logo::line#20==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [49] (byte~) render_logo::$37 ← (byte) $28 * (const byte) render_logo::line#18
Constant right-side identified [53] (byte) render_logo::line#20 ← ++ (const byte) render_logo::line#18
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$37 = $28*render_logo::line#18
Constant (const byte) render_logo::line#20 = ++render_logo::line#18
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [54] if((const byte) render_logo::line#20==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [48] (byte*~) render_logo::$38 ← (const byte*) SCREEN + (const byte) render_logo::$37
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$38 = SCREEN+render_logo::$37
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@15_4 tails: render_logo::@15_4 blocks: render_logo::@15_4 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#21 (const byte) render_logo::line#20
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [56] if((byte) render_logo::line#22==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [51] (byte~) render_logo::$40 ← (byte) $28 * (const byte) render_logo::line#20
Constant right-side identified [55] (byte) render_logo::line#22 ← ++ (const byte) render_logo::line#20
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$40 = $28*render_logo::line#20
Constant (const byte) render_logo::line#22 = ++render_logo::line#20
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [56] if((const byte) render_logo::line#22==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [50] (byte*~) render_logo::$41 ← (const byte*) SCREEN + (const byte) render_logo::$40
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$41 = SCREEN+render_logo::$40
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@15_5 tails: render_logo::@15_5 blocks: render_logo::@15_5 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#23 (const byte) render_logo::line#22
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [58] if((byte) render_logo::line#24==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [53] (byte~) render_logo::$43 ← (byte) $28 * (const byte) render_logo::line#22
Constant right-side identified [57] (byte) render_logo::line#24 ← ++ (const byte) render_logo::line#22
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$43 = $28*render_logo::line#22
Constant (const byte) render_logo::line#24 = ++render_logo::line#22
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (render_logo::@15_5) in block render_logo::@15_6
if() condition always true - replacing block destination [58] if((const byte) render_logo::line#24==(byte) 6) goto render_logo::@16
Successful SSA optimization Pass2ConstantIfs
Eliminating unused constant (const byte) render_logo::line#24
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte) render_logo::line#25 from unused block render_logo::@15_6
Eliminating variable (byte~) render_logo::$46 from unused block render_logo::@15_6
Eliminating variable (byte*~) render_logo::$47 from unused block render_logo::@15_6
Eliminating variable (byte~) render_logo::$48 from unused block render_logo::@15_6
Eliminating variable (byte) render_logo::line#26 from unused block render_logo::@15_6
Removing unused block render_logo::@15_6
Successful SSA optimization Pass2EliminateUnusedBlocks
Constant right-side identified [52] (byte*~) render_logo::$44 ← (const byte*) SCREEN + (const byte) render_logo::$43
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$44 = SCREEN+render_logo::$43
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@7_1 tails: render_logo::@7_1 blocks: render_logo::@7_1 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#13 (const byte) render_logo::line#2
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [62] if((byte) render_logo::line#14==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [58] (byte~) render_logo::$29 ← (byte) $28 * (const byte) render_logo::line#2
Constant right-side identified [61] (byte) render_logo::line#14 ← ++ (const byte) render_logo::line#2
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$29 = $28*render_logo::line#2
Constant (const byte) render_logo::line#14 = ++render_logo::line#2
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [62] if((const byte) render_logo::line#14==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [57] (byte*~) render_logo::$30 ← (const byte*) SCREEN + (const byte) render_logo::$29
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$30 = SCREEN+render_logo::$29
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@7_2 tails: render_logo::@7_2 blocks: render_logo::@7_2 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#27 (const byte) render_logo::line#14
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [63] if((byte) render_logo::line#28==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [59] (byte~) render_logo::$49 ← (byte) $28 * (const byte) render_logo::line#14
Constant right-side identified [62] (byte) render_logo::line#28 ← ++ (const byte) render_logo::line#14
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$49 = $28*render_logo::line#14
Constant (const byte) render_logo::line#28 = ++render_logo::line#14
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [63] if((const byte) render_logo::line#28==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [58] (byte*~) render_logo::$50 ← (const byte*) SCREEN + (const byte) render_logo::$49
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$50 = SCREEN+render_logo::$49
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@7_3 tails: render_logo::@7_3 blocks: render_logo::@7_3 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#29 (const byte) render_logo::line#28
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [64] if((byte) render_logo::line#30==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [60] (byte~) render_logo::$51 ← (byte) $28 * (const byte) render_logo::line#28
Constant right-side identified [63] (byte) render_logo::line#30 ← ++ (const byte) render_logo::line#28
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$51 = $28*render_logo::line#28
Constant (const byte) render_logo::line#30 = ++render_logo::line#28
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [64] if((const byte) render_logo::line#30==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [59] (byte*~) render_logo::$52 ← (const byte*) SCREEN + (const byte) render_logo::$51
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$52 = SCREEN+render_logo::$51
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@7_4 tails: render_logo::@7_4 blocks: render_logo::@7_4 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#31 (const byte) render_logo::line#30
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [65] if((byte) render_logo::line#32==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [61] (byte~) render_logo::$53 ← (byte) $28 * (const byte) render_logo::line#30
Constant right-side identified [64] (byte) render_logo::line#32 ← ++ (const byte) render_logo::line#30
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$53 = $28*render_logo::line#30
Constant (const byte) render_logo::line#32 = ++render_logo::line#30
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [65] if((const byte) render_logo::line#32==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [60] (byte*~) render_logo::$54 ← (const byte*) SCREEN + (const byte) render_logo::$53
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$54 = SCREEN+render_logo::$53
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@7_5 tails: render_logo::@7_5 blocks: render_logo::@7_5 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#33 (const byte) render_logo::line#32
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [66] if((byte) render_logo::line#34==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [62] (byte~) render_logo::$55 ← (byte) $28 * (const byte) render_logo::line#32
Constant right-side identified [65] (byte) render_logo::line#34 ← ++ (const byte) render_logo::line#32
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$55 = $28*render_logo::line#32
Constant (const byte) render_logo::line#34 = ++render_logo::line#32
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (render_logo::@7_5) in block render_logo::@7_6
if() condition always true - replacing block destination [66] if((const byte) render_logo::line#34==(byte) 6) goto render_logo::@8
Successful SSA optimization Pass2ConstantIfs
Eliminating unused constant (const byte) render_logo::line#34
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte) render_logo::line#35 from unused block render_logo::@7_6
Eliminating variable (byte~) render_logo::$57 from unused block render_logo::@7_6
Eliminating variable (byte*~) render_logo::$58 from unused block render_logo::@7_6
Eliminating variable (byte) render_logo::line#36 from unused block render_logo::@7_6
Removing unused block render_logo::@7_6
Successful SSA optimization Pass2EliminateUnusedBlocks
Constant right-side identified [61] (byte*~) render_logo::$56 ← (const byte*) SCREEN + (const byte) render_logo::$55
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$56 = SCREEN+render_logo::$55
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@32 tails: render_logo::@32 blocks: render_logo::@32 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#12 (const byte) render_logo::line#7
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [74] if((byte) render_logo::line#8==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [70] (byte~) render_logo::$26 ← (byte) $28 * (const byte) render_logo::line#7
Constant right-side identified [73] (byte) render_logo::line#8 ← ++ (const byte) render_logo::line#7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$26 = $28*render_logo::line#7
Constant (const byte) render_logo::line#8 = ++render_logo::line#7
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [74] if((const byte) render_logo::line#8==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConstantIfs
Simplifying constant evaluating to zero (byte) $28*(const byte) render_logo::line#7 in 
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero SCREEN in [71] (byte*~) render_logo::$27 ← (const byte*) SCREEN + (const byte) render_logo::$26
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused constant (const byte) render_logo::$26
Successful SSA optimization PassNEliminateUnusedVars
Constant (const byte*) render_logo::$27 = SCREEN
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@32_1 tails: render_logo::@32_1 blocks: render_logo::@32_1 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#37 (const byte) render_logo::line#8
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [75] if((byte) render_logo::line#38==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [71] (byte~) render_logo::$59 ← (byte) $28 * (const byte) render_logo::line#8
Constant right-side identified [74] (byte) render_logo::line#38 ← ++ (const byte) render_logo::line#8
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$59 = $28*render_logo::line#8
Constant (const byte) render_logo::line#38 = ++render_logo::line#8
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [75] if((const byte) render_logo::line#38==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [70] (byte*~) render_logo::$60 ← (const byte*) SCREEN + (const byte) render_logo::$59
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$60 = SCREEN+render_logo::$59
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@32_2 tails: render_logo::@32_2 blocks: render_logo::@32_2 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#39 (const byte) render_logo::line#38
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [76] if((byte) render_logo::line#40==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [72] (byte~) render_logo::$61 ← (byte) $28 * (const byte) render_logo::line#38
Constant right-side identified [75] (byte) render_logo::line#40 ← ++ (const byte) render_logo::line#38
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$61 = $28*render_logo::line#38
Constant (const byte) render_logo::line#40 = ++render_logo::line#38
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [76] if((const byte) render_logo::line#40==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [71] (byte*~) render_logo::$62 ← (const byte*) SCREEN + (const byte) render_logo::$61
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$62 = SCREEN+render_logo::$61
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@32_3 tails: render_logo::@32_3 blocks: render_logo::@32_3 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#41 (const byte) render_logo::line#40
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [77] if((byte) render_logo::line#42==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [73] (byte~) render_logo::$63 ← (byte) $28 * (const byte) render_logo::line#40
Constant right-side identified [76] (byte) render_logo::line#42 ← ++ (const byte) render_logo::line#40
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$63 = $28*render_logo::line#40
Constant (const byte) render_logo::line#42 = ++render_logo::line#40
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [77] if((const byte) render_logo::line#42==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [72] (byte*~) render_logo::$64 ← (const byte*) SCREEN + (const byte) render_logo::$63
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$64 = SCREEN+render_logo::$63
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@32_4 tails: render_logo::@32_4 blocks: render_logo::@32_4 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#43 (const byte) render_logo::line#42
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [78] if((byte) render_logo::line#44==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [74] (byte~) render_logo::$65 ← (byte) $28 * (const byte) render_logo::line#42
Constant right-side identified [77] (byte) render_logo::line#44 ← ++ (const byte) render_logo::line#42
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$65 = $28*render_logo::line#42
Constant (const byte) render_logo::line#44 = ++render_logo::line#42
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [78] if((const byte) render_logo::line#44==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [73] (byte*~) render_logo::$66 ← (const byte*) SCREEN + (const byte) render_logo::$65
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$66 = SCREEN+render_logo::$65
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@32_5 tails: render_logo::@32_5 blocks: render_logo::@32_5 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#45 (const byte) render_logo::line#44
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [79] if((byte) render_logo::line#46==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [75] (byte~) render_logo::$67 ← (byte) $28 * (const byte) render_logo::line#44
Constant right-side identified [78] (byte) render_logo::line#46 ← ++ (const byte) render_logo::line#44
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$67 = $28*render_logo::line#44
Constant (const byte) render_logo::line#46 = ++render_logo::line#44
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (render_logo::@32_5) in block render_logo::@32_6
if() condition always true - replacing block destination [79] if((const byte) render_logo::line#46==(byte) 6) goto render_logo::@33
Successful SSA optimization Pass2ConstantIfs
Eliminating unused constant (const byte) render_logo::line#46
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte) render_logo::line#47 from unused block render_logo::@32_6
Eliminating variable (byte~) render_logo::$69 from unused block render_logo::@32_6
Eliminating variable (byte*~) render_logo::$70 from unused block render_logo::@32_6
Eliminating variable (byte) render_logo::line#48 from unused block render_logo::@32_6
Removing unused block render_logo::@32_6
Successful SSA optimization Pass2EliminateUnusedBlocks
Constant right-side identified [74] (byte*~) render_logo::$68 ← (const byte*) SCREEN + (const byte) render_logo::$67
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$68 = SCREEN+render_logo::$67
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@24 tails: render_logo::@24 blocks: render_logo::@24 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#11 (const byte) render_logo::line#5
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [82] if((byte) render_logo::line#6==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [77] (byte~) render_logo::$22 ← (byte) $28 * (const byte) render_logo::line#5
Constant right-side identified [81] (byte) render_logo::line#6 ← ++ (const byte) render_logo::line#5
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$22 = $28*render_logo::line#5
Constant (const byte) render_logo::line#6 = ++render_logo::line#5
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [82] if((const byte) render_logo::line#6==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConstantIfs
Simplifying constant evaluating to zero (byte) $28*(const byte) render_logo::line#5 in 
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero SCREEN in [78] (byte*~) render_logo::$21 ← (const byte*) SCREEN + (const byte) render_logo::$22
Simplifying expression containing zero render_logo::logo_idx#11 in [79] (byte~) render_logo::$23 ← (byte) render_logo::logo_idx#11 + (const byte) render_logo::$22
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused constant (const byte) render_logo::$22
Successful SSA optimization PassNEliminateUnusedVars
Alias (byte) render_logo::logo_idx#11 = (byte~) render_logo::$23 
Successful SSA optimization Pass2AliasElimination
Constant (const byte*) render_logo::$21 = SCREEN
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@24_1 tails: render_logo::@24_1 blocks: render_logo::@24_1 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#49 (const byte) render_logo::line#6
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [83] if((byte) render_logo::line#50==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [78] (byte~) render_logo::$71 ← (byte) $28 * (const byte) render_logo::line#6
Constant right-side identified [82] (byte) render_logo::line#50 ← ++ (const byte) render_logo::line#6
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$71 = $28*render_logo::line#6
Constant (const byte) render_logo::line#50 = ++render_logo::line#6
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [83] if((const byte) render_logo::line#50==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [77] (byte*~) render_logo::$72 ← (const byte*) SCREEN + (const byte) render_logo::$71
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$72 = SCREEN+render_logo::$71
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@24_2 tails: render_logo::@24_2 blocks: render_logo::@24_2 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#51 (const byte) render_logo::line#50
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [85] if((byte) render_logo::line#52==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [80] (byte~) render_logo::$74 ← (byte) $28 * (const byte) render_logo::line#50
Constant right-side identified [84] (byte) render_logo::line#52 ← ++ (const byte) render_logo::line#50
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$74 = $28*render_logo::line#50
Constant (const byte) render_logo::line#52 = ++render_logo::line#50
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [85] if((const byte) render_logo::line#52==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [79] (byte*~) render_logo::$75 ← (const byte*) SCREEN + (const byte) render_logo::$74
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$75 = SCREEN+render_logo::$74
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@24_3 tails: render_logo::@24_3 blocks: render_logo::@24_3 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#53 (const byte) render_logo::line#52
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [87] if((byte) render_logo::line#54==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [82] (byte~) render_logo::$77 ← (byte) $28 * (const byte) render_logo::line#52
Constant right-side identified [86] (byte) render_logo::line#54 ← ++ (const byte) render_logo::line#52
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$77 = $28*render_logo::line#52
Constant (const byte) render_logo::line#54 = ++render_logo::line#52
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [87] if((const byte) render_logo::line#54==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [81] (byte*~) render_logo::$78 ← (const byte*) SCREEN + (const byte) render_logo::$77
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$78 = SCREEN+render_logo::$77
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@24_4 tails: render_logo::@24_4 blocks: render_logo::@24_4 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#55 (const byte) render_logo::line#54
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [89] if((byte) render_logo::line#56==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [84] (byte~) render_logo::$80 ← (byte) $28 * (const byte) render_logo::line#54
Constant right-side identified [88] (byte) render_logo::line#56 ← ++ (const byte) render_logo::line#54
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$80 = $28*render_logo::line#54
Constant (const byte) render_logo::line#56 = ++render_logo::line#54
Successful SSA optimization Pass2ConstantIdentification
if() condition always false - eliminating [89] if((const byte) render_logo::line#56==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConstantIfs
Constant right-side identified [83] (byte*~) render_logo::$81 ← (const byte*) SCREEN + (const byte) render_logo::$80
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$81 = SCREEN+render_logo::$80
Successful SSA optimization Pass2ConstantIdentification
Unrolling loop Loop head: render_logo::@24_5 tails: render_logo::@24_5 blocks: render_logo::@24_5 
Successful SSA optimization Pass2LoopUnroll
Identical Phi Values (byte) render_logo::line#57 (const byte) render_logo::line#56
Successful SSA optimization Pass2IdenticalPhiElimination
Negating conditional jump and destination [91] if((byte) render_logo::line#58==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [86] (byte~) render_logo::$83 ← (byte) $28 * (const byte) render_logo::line#56
Constant right-side identified [90] (byte) render_logo::line#58 ← ++ (const byte) render_logo::line#56
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) render_logo::$83 = $28*render_logo::line#56
Constant (const byte) render_logo::line#58 = ++render_logo::line#56
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (render_logo::@24_5) in block render_logo::@24_6
if() condition always true - replacing block destination [91] if((const byte) render_logo::line#58==(byte) 6) goto render_logo::@25
Successful SSA optimization Pass2ConstantIfs
Eliminating unused constant (const byte) render_logo::line#58
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte) render_logo::line#59 from unused block render_logo::@24_6
Eliminating variable (byte~) render_logo::$86 from unused block render_logo::@24_6
Eliminating variable (byte*~) render_logo::$87 from unused block render_logo::@24_6
Eliminating variable (byte~) render_logo::$88 from unused block render_logo::@24_6
Eliminating variable (byte) render_logo::line#60 from unused block render_logo::@24_6
Removing unused block render_logo::@24_6
Successful SSA optimization Pass2EliminateUnusedBlocks
Constant right-side identified [85] (byte*~) render_logo::$84 ← (const byte*) SCREEN + (const byte) render_logo::$83
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) render_logo::$84 = SCREEN+render_logo::$83
Successful SSA optimization Pass2ConstantIdentification
Inlining Noop Cast [37] (byte) render_logo::logo_start#0 ← (byte)(signed byte) render_logo::x_char#0 keeping render_logo::x_char#0
Inlining Noop Cast [165] (signed word) sin16s::sinx#0 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1
Inlining Noop Cast [167] (signed word~) sin16s::$19 ← (signed word)(word) sin16s::usinx#1 keeping sin16s::usinx#1
Inlining Noop Cast [209] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3
Inlining Noop Cast [211] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [64] (byte) render_logo::logo_idx#1 ← (byte)(signed byte~) render_logo::$17 keeping render_logo::logo_idx#1
Inlining Noop Cast [103] (signed word~) sin16s_gen2::$9 ← (signed word)(word~) sin16s_gen2::$7 keeping sin16s_gen2::$9
Successful SSA optimization Pass2NopCastInlining
Rewriting multiplication to use shift [21] (word~) loop::$7 ← (word) xsin_idx#11 * (const byte) SIZEOF_SIGNED_WORD
Rewriting division to use shift [34] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 / (signed byte) 8
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const word) divr16u::quotient#0
Inlining constant with var siblings (const byte) divr16u::i#0
Inlining constant with var siblings (const word) divr16u::rem#3
Inlining constant with var siblings (const word) divr16u::divisor#0
Inlining constant with var siblings (const word) divr16u::divisor#1
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 dword) mul16u::res#0
Inlining constant with var siblings (const word) mul16u::b#0
Inlining constant with var siblings (const dword) sin16s_gen2::x#0
Inlining constant with var siblings (const word) sin16s_gen2::i#0
Inlining constant with var siblings (const signed word*) sin16s_gen2::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 void*) memset::str#0
Inlining constant with var siblings (const byte) memset::c#0
Inlining constant with var siblings (const word) memset::num#0
Inlining constant with var siblings (const void*) memset::str#1
Inlining constant with var siblings (const byte) memset::c#1
Inlining constant with var siblings (const word) memset::num#1
Inlining constant with var siblings (const byte) main::ch#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#2
Inlining constant with different constant siblings (const byte) render_logo::line#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#2
Inlining constant with different constant siblings (const byte) render_logo::line#3
Inlining constant with different constant siblings (const byte) render_logo::line#5
Inlining constant with different constant siblings (const byte) render_logo::line#7
Inlining constant with different constant siblings (const byte) render_logo::line#2
Inlining constant with different constant siblings (const byte) render_logo::line#4
Inlining constant with different constant siblings (const byte) render_logo::line#16
Inlining constant with different constant siblings (const byte) render_logo::line#18
Inlining constant with different constant siblings (const byte) render_logo::line#20
Inlining constant with different constant siblings (const byte) render_logo::line#22
Inlining constant with different constant siblings (const byte) render_logo::line#14
Inlining constant with different constant siblings (const byte) render_logo::line#28
Inlining constant with different constant siblings (const byte) render_logo::line#30
Inlining constant with different constant siblings (const byte) render_logo::line#32
Inlining constant with different constant siblings (const byte) render_logo::line#8
Inlining constant with different constant siblings (const byte) render_logo::line#38
Inlining constant with different constant siblings (const byte) render_logo::line#40
Inlining constant with different constant siblings (const byte) render_logo::line#42
Inlining constant with different constant siblings (const byte) render_logo::line#44
Inlining constant with different constant siblings (const byte) render_logo::line#6
Inlining constant with different constant siblings (const byte) render_logo::line#50
Inlining constant with different constant siblings (const byte) render_logo::line#52
Inlining constant with different constant siblings (const byte) render_logo::line#54
Inlining constant with different constant siblings (const byte) render_logo::line#56
Inlining constant with var siblings (const word) xsin_idx#16
Inlining constant with var siblings (const word) xsin_idx#4
Constant inlined render_logo::line#56 = ++++++++++(byte) 0
Constant inlined divr16u::rem#3 = (byte) 0
Constant inlined render_logo::$30 = (const byte*) SCREEN+(byte) $28*++(byte) 0
Constant inlined render_logo::line#52 = ++++++(byte) 0
Constant inlined render_logo::$32 = (const byte*) SCREEN+(byte) $28*++(byte) 0
Constant inlined render_logo::line#54 = ++++++++(byte) 0
Constant inlined render_logo::$31 = (byte) $28*++(byte) 0
Constant inlined sin16s::isUpper#0 = (byte) 0
Constant inlined render_logo::line#50 = ++++(byte) 0
Constant inlined mulu16_sel::select#4 = (byte) 0
Constant inlined mulu16_sel::select#2 = (byte) 1
Constant inlined mulu16_sel::select#3 = (byte) 0
Constant inlined mulu16_sel::select#0 = (byte) 0
Constant inlined sin16s::isUpper#1 = (byte) 1
Constant inlined mulu16_sel::select#1 = (byte) 1
Constant inlined render_logo::$34 = (byte) $28*++++(byte) 0
Constant inlined render_logo::$35 = (const byte*) SCREEN+(byte) $28*++++(byte) 0
Constant inlined render_logo::$38 = (const byte*) SCREEN+(byte) $28*++++++(byte) 0
Constant inlined render_logo::$37 = (byte) $28*++++++(byte) 0
Constant inlined main::ch#0 = (byte) 0
Constant inlined main::toD0181_$7 = >(word)(const byte*) LOGO/(byte) 4&(byte) $f
Constant inlined render_logo::$41 = (const byte*) SCREEN+(byte) $28*++++++++(byte) 0
Constant inlined render_logo::$40 = (byte) $28*++++++++(byte) 0
Constant inlined render_logo::$43 = (byte) $28*++++++++++(byte) 0
Constant inlined main::toD0181_$2 = (word)(const byte*) SCREEN&(word) $3fff*(byte) 4
Constant inlined sin16s_gen2::wavelength#0 = (const word) XSIN_SIZE
Constant inlined main::toD0181_$1 = (word)(const byte*) SCREEN&(word) $3fff
Constant inlined main::toD0181_$0 = (word)(const byte*) SCREEN
Constant inlined main::toD0181_$6 = >(word)(const byte*) LOGO/(byte) 4
Constant inlined main::toD0181_$5 = >(word)(const byte*) LOGO
Constant inlined main::toD0181_$4 = (word)(const byte*) LOGO
Constant inlined main::toD0181_$3 = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4
Constant inlined xsin_idx#16 = (word) 0
Constant inlined sin16s_gen2::sintab#1 = (const signed word*) xsin
Constant inlined render_logo::$44 = (const byte*) SCREEN+(byte) $28*++++++++++(byte) 0
Constant inlined memset::c#0 = (const byte) BLACK
Constant inlined render_logo::$49 = (byte) $28*++++(byte) 0
Constant inlined memset::c#1 = (const byte) WHITE|(byte) 8
Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN
Constant inlined render_logo::$50 = (const byte*) SCREEN+(byte) $28*++++(byte) 0
Constant inlined render_logo::$52 = (const byte*) SCREEN+(byte) $28*++++++(byte) 0
Constant inlined divr16u::i#0 = (byte) 0
Constant inlined render_logo::$51 = (byte) $28*++++++(byte) 0
Constant inlined render_logo::$54 = (const byte*) SCREEN+(byte) $28*++++++++(byte) 0
Constant inlined render_logo::$53 = (byte) $28*++++++++(byte) 0
Constant inlined sin16s_gen2::x#0 = (dword) 0
Constant inlined render_logo::$56 = (const byte*) SCREEN+(byte) $28*++++++++++(byte) 0
Constant inlined render_logo::$55 = (byte) $28*++++++++++(byte) 0
Constant inlined render_logo::screen_idx#1 = (byte) 0
Constant inlined render_logo::$59 = (byte) $28*++(byte) 0
Constant inlined render_logo::screen_idx#2 = (byte) 0
Constant inlined render_logo::$61 = (byte) $28*++++(byte) 0
Constant inlined render_logo::$60 = (const byte*) SCREEN+(byte) $28*++(byte) 0
Constant inlined render_logo::$63 = (byte) $28*++++++(byte) 0
Constant inlined render_logo::$62 = (const byte*) SCREEN+(byte) $28*++++(byte) 0
Constant inlined render_logo::$65 = (byte) $28*++++++++(byte) 0
Constant inlined render_logo::$64 = (const byte*) SCREEN+(byte) $28*++++++(byte) 0
Constant inlined divr16u::dividend#1 = >(const dword) PI2_u4f28
Constant inlined divr16u::dividend#2 = <(const dword) PI2_u4f28
Constant inlined render_logo::line#2 = ++(byte) 0
Constant inlined mulu16_sel::v2#2 = (word)(number) $10000/(number) 6
Constant inlined render_logo::line#1 = (byte) 0
Constant inlined render_logo::$67 = (byte) $28*++++++++++(byte) 0
Constant inlined render_logo::line#4 = ++(byte) 0
Constant inlined render_logo::$66 = (const byte*) SCREEN+(byte) $28*++++++++(byte) 0
Constant inlined render_logo::line#3 = (byte) 0
Constant inlined render_logo::line#6 = ++(byte) 0
Constant inlined render_logo::$68 = (const byte*) SCREEN+(byte) $28*++++++++++(byte) 0
Constant inlined render_logo::line#5 = (byte) 0
Constant inlined render_logo::line#8 = ++(byte) 0
Constant inlined render_logo::line#7 = (byte) 0
Constant inlined render_logo::$9 = (const byte*) SCREEN
Constant inlined render_logo::$72 = (const byte*) SCREEN+(byte) $28*++(byte) 0
Constant inlined render_logo::line#14 = ++++(byte) 0
Constant inlined render_logo::$71 = (byte) $28*++(byte) 0
Constant inlined sin16s_gen2::i#0 = (word) 0
Constant inlined render_logo::$74 = (byte) $28*++++(byte) 0
Constant inlined render_logo::$75 = (const byte*) SCREEN+(byte) $28*++++(byte) 0
Constant inlined memset::num#1 = (word) $3e8
Constant inlined memset::num#0 = (word) $3e8
Constant inlined mul16u::b#0 = (word)(const signed word) sin16s_gen2::ampl#0
Constant inlined render_logo::$78 = (const byte*) SCREEN+(byte) $28*++++++(byte) 0
Constant inlined render_logo::$77 = (byte) $28*++++++(byte) 0
Constant inlined mul16s::$10 = (word)(const signed word) sin16s_gen2::ampl#0
Constant inlined render_logo::$81 = (const byte*) SCREEN+(byte) $28*++++++++(byte) 0
Constant inlined mul16s::b#0 = (const signed word) sin16s_gen2::ampl#0
Constant inlined render_logo::$80 = (byte) $28*++++++++(byte) 0
Constant inlined render_logo::$83 = (byte) $28*++++++++++(byte) 0
Constant inlined render_logo::$84 = (const byte*) SCREEN+(byte) $28*++++++++++(byte) 0
Constant inlined render_logo::line#20 = ++++++++(byte) 0
Constant inlined render_logo::line#22 = ++++++++++(byte) 0
Constant inlined render_logo::line#16 = ++++(byte) 0
Constant inlined render_logo::line#18 = ++++++(byte) 0
Constant inlined render_logo::logo_idx#2 = (byte) 0
Constant inlined main::toD0181_gfx#0 = (const byte*) LOGO
Constant inlined render_logo::line#30 = ++++++++(byte) 0
Constant inlined render_logo::line#32 = ++++++++++(byte) 0
Constant inlined xsin_idx#4 = (byte) 0
Constant inlined div32u16u::dividend#0 = (const dword) PI2_u4f28
Constant inlined divr16u::quotient#0 = (word) 0
Constant inlined mul16u::res#0 = (dword) 0
Constant inlined render_logo::$13 = (const byte*) SCREEN
Constant inlined divr16u::divisor#1 = (const word) XSIN_SIZE
Constant inlined divr16u::divisor#0 = (const word) XSIN_SIZE
Constant inlined render_logo::line#28 = ++++++(byte) 0
Constant inlined memset::str#1 = (void*)(const byte*) COLS
Constant inlined memset::str#0 = (void*)(const byte*) SCREEN
Constant inlined render_logo::line#42 = ++++++++(byte) 0
Constant inlined render_logo::$21 = (const byte*) SCREEN
Constant inlined render_logo::line#44 = ++++++++++(byte) 0
Constant inlined render_logo::line#40 = ++++++(byte) 0
Constant inlined div32u16u::divisor#0 = (const word) XSIN_SIZE
Constant inlined render_logo::$27 = (const byte*) SCREEN
Constant inlined render_logo::line#38 = ++++(byte) 0
Constant inlined render_logo::$29 = (byte) $28*++(byte) 0
Successful SSA optimization Pass2ConstantInlining
Simplifying constant integer increment ++0
Simplifying constant integer increment ++0
Simplifying constant integer increment ++1
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Simplifying constant integer increment ++0
Simplifying constant integer increment ++0
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++0
Simplifying constant integer increment ++0
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++0
Simplifying constant integer increment ++0
Simplifying constant integer increment ++1
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Successful SSA optimization Pass2ConstantSimplification
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Successful SSA optimization Pass2ConstantSimplification
Identical Phi Values (word) divr16u::divisor#6 (const word) XSIN_SIZE
Identical Phi Values (word) memset::num#2 (word) $3e8
Successful SSA optimization Pass2IdenticalPhiElimination
if() condition always false - eliminating [203] if((word) $3e8<=(byte) 0) goto memset::@1
Successful SSA optimization Pass2ConstantIfs
Added new block during phi lifting main::@8(between main::@1 and main::@1)
Added new block during phi lifting loop::@16(between loop::@15 and loop::@11)
Added new block during phi lifting render_logo::@37(between render_logo::@21 and render_logo::@29)
Added new block during phi lifting mul16s::@7(between mul16s::@6 and mul16s::@1)
Added new block during phi lifting mul16u::@10(between mul16u::@2 and mul16u::@4)
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 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 @6
Adding NOP phi() at start of @30
Adding NOP phi() at start of @32
Adding NOP phi() at start of @33
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of loop
Adding NOP phi() at start of loop::@10
Adding NOP phi() at start of render_logo::@3
Adding NOP phi() at start of render_logo::@13
Adding NOP phi() at start of render_logo::@5
Adding NOP phi() at start of render_logo::@30
Adding NOP phi() at start of render_logo::@22
Adding NOP phi() at start of sin16s_gen2
Adding NOP phi() at start of mul16u::@3
Adding NOP phi() at start of div32u16u
Adding NOP phi() at start of memset::@1
CALL GRAPH
Calls in [] to main:5 
Calls in [main] to memset:17 memset:19 sin16s_gen2:26 loop:28 
Calls in [loop] to render_logo:40 
Calls in [sin16s_gen2] to div32u16u:120 sin16s:127 mul16s:130 
Calls in [mul16s] to mul16u:143 
Calls in [sin16s] to mulu16_sel:188 mulu16_sel:195 mulu16_sel:200 mulu16_sel:208 mulu16_sel:215 
Calls in [mulu16_sel] to mul16u:233 
Calls in [div32u16u] to divr16u:240 divr16u:245 

Created 38 initial phi equivalence classes
Coalesced [31] main::ch#3 ← main::ch#1
Coalesced [46] xsin_idx#27 ← xsin_idx#19
Coalesced [47] xsin_idx#28 ← xsin_idx#3
Coalesced [58] render_logo::screen_idx#26 ← render_logo::screen_idx#18
Coalesced [76] render_logo::screen_idx#25 ← render_logo::screen_idx#4
Coalesced [77] render_logo::logo_idx#13 ← render_logo::logo_idx#3
Coalesced [86] render_logo::screen_idx#24 ← render_logo::screen_idx#3
Coalesced [91] render_logo::screen_idx#28 ← render_logo::screen_idx#21
Coalesced [102] render_logo::screen_idx#29 ← render_logo::screen_idx#6
Coalesced [117] render_logo::logo_idx#15 ← render_logo::logo_idx#4
Coalesced [118] render_logo::screen_idx#27 ← render_logo::screen_idx#5
Coalesced [138] sin16s_gen2::i#6 ← sin16s_gen2::i#1
Coalesced [139] sin16s_gen2::x#6 ← sin16s_gen2::x#1
Coalesced [140] sin16s_gen2::sintab#8 ← sin16s_gen2::sintab#0
Coalesced [142] mul16u::a#8 ← mul16u::a#1
Coalesced [150] mul16s::m#7 ← mul16s::m#1
Coalesced [154] mul16s::m#8 ← mul16s::m#0
Coalesced [157] mul16u::a#10 ← mul16u::a#6
Coalesced [158] mul16u::mb#6 ← mul16u::mb#0
Coalesced [166] mul16u::res#9 ← mul16u::res#1
Coalesced [170] mul16u::a#11 ← mul16u::a#0
Coalesced [171] mul16u::res#7 ← mul16u::res#6
Coalesced [172] mul16u::mb#7 ← mul16u::mb#1
Coalesced (already) [173] mul16u::res#8 ← mul16u::res#2
Coalesced [176] sin16s::x#9 ← sin16s::x#1
Coalesced [180] sin16s::x#11 ← sin16s::x#2
Coalesced [186] mulu16_sel::v1#8 ← mulu16_sel::v1#0
Coalesced [187] mulu16_sel::v2#8 ← mulu16_sel::v2#0
Coalesced [193] mulu16_sel::v1#9 ← mulu16_sel::v1#1
Coalesced [194] mulu16_sel::v2#9 ← mulu16_sel::v2#1
Coalesced [199] mulu16_sel::v1#10 ← mulu16_sel::v1#2
Coalesced [206] mulu16_sel::v1#6 ← mulu16_sel::v1#3
Coalesced [207] mulu16_sel::v2#6 ← mulu16_sel::v2#3
Coalesced [213] mulu16_sel::v1#7 ← mulu16_sel::v1#4
Coalesced [214] mulu16_sel::v2#7 ← mulu16_sel::v2#4
Coalesced [222] sin16s::return#6 ← sin16s::sinx#1
Coalesced [226] sin16s::x#10 ← sin16s::x#4
Coalesced [227] sin16s::x#8 ← sin16s::x#0
Coalesced [231] mul16u::b#3 ← mul16u::b#1
Coalesced [232] mul16u::a#9 ← mul16u::a#2
Coalesced [244] divr16u::rem#12 ← divr16u::rem#4
Coalesced [251] divr16u::rem#13 ← divr16u::rem#10
Coalesced [252] divr16u::dividend#9 ← divr16u::dividend#5
Coalesced [259] divr16u::rem#16 ← divr16u::rem#1
Coalesced [266] divr16u::rem#18 ← divr16u::rem#2
Coalesced [267] divr16u::return#8 ← divr16u::quotient#2
Coalesced [273] divr16u::rem#14 ← divr16u::rem#11
Coalesced [274] divr16u::dividend#10 ← divr16u::dividend#0
Coalesced [275] divr16u::quotient#9 ← divr16u::return#0
Coalesced [276] divr16u::i#7 ← divr16u::i#1
Coalesced [277] divr16u::rem#17 ← divr16u::rem#6
Coalesced [278] divr16u::return#7 ← divr16u::quotient#1
Coalesced [279] divr16u::rem#15 ← divr16u::rem#0
Coalesced [289] memset::dst#5 ← memset::dst#1
Coalesced down to 27 phi equivalence classes
Culled Empty Block (label) @6
Culled Empty Block (label) @30
Culled Empty Block (label) @33
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@8
Culled Empty Block (label) loop::@10
Culled Empty Block (label) render_logo::@3
Culled Empty Block (label) render_logo::@6
Culled Empty Block (label) render_logo::@13
Culled Empty Block (label) render_logo::@5
Culled Empty Block (label) render_logo::@37
Culled Empty Block (label) render_logo::@30
Culled Empty Block (label) render_logo::@22
Culled Empty Block (label) mul16s::@7
Culled Empty Block (label) mul16u::@3
Culled Empty Block (label) mul16u::@10
Culled Empty Block (label) sin16s::@14
Culled Empty Block (label) sin16s::@13
Culled Empty Block (label) divr16u::@8
Culled Empty Block (label) divr16u::@10
Culled Empty Block (label) divr16u::@9
Culled Empty Block (label) memset::@1
Renumbering block @29 to @1
Renumbering block @32 to @2
Renumbering block div32u16u::@2 to div32u16u::@1
Renumbering block div32u16u::@3 to div32u16u::@2
Renumbering block mul16u::@4 to mul16u::@3
Renumbering block mul16u::@7 to mul16u::@4
Renumbering block mul16s::@6 to mul16s::@4
Renumbering block sin16s_gen2::@7 to sin16s_gen2::@3
Renumbering block sin16s_gen2::@8 to sin16s_gen2::@4
Renumbering block sin16s_gen2::@9 to sin16s_gen2::@5
Renumbering block sin16s::@8 to sin16s::@7
Renumbering block sin16s::@9 to sin16s::@8
Renumbering block sin16s::@10 to sin16s::@9
Renumbering block sin16s::@11 to sin16s::@10
Renumbering block sin16s::@12 to sin16s::@11
Renumbering block sin16s::@15 to sin16s::@12
Renumbering block mulu16_sel::@2 to mulu16_sel::@1
Renumbering block memset::@2 to memset::@1
Renumbering block memset::@4 to memset::@2
Renumbering block memset::@5 to memset::@3
Renumbering block main::@6 to main::@5
Renumbering block loop::@4 to loop::@2
Renumbering block loop::@6 to loop::@3
Renumbering block loop::@11 to loop::@4
Renumbering block loop::@15 to loop::@5
Renumbering block loop::@16 to loop::@6
Renumbering block render_logo::@4 to render_logo::@2
Renumbering block render_logo::@7 to render_logo::@3
Renumbering block render_logo::@8 to render_logo::@4
Renumbering block render_logo::@12 to render_logo::@5
Renumbering block render_logo::@15 to render_logo::@6
Renumbering block render_logo::@16 to render_logo::@7
Renumbering block render_logo::@21 to render_logo::@8
Renumbering block render_logo::@24 to render_logo::@9
Renumbering block render_logo::@25 to render_logo::@10
Renumbering block render_logo::@29 to render_logo::@11
Renumbering block render_logo::@32 to render_logo::@12
Renumbering block render_logo::@33 to render_logo::@13
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of loop
Adding NOP phi() at start of loop::@6
Adding NOP phi() at start of sin16s_gen2
Adding NOP phi() at start of div32u16u

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  kickasm(location (const byte*) LOGO) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
    .for (var y=0; y<6	; y++)
        .for (var x=0;x<40; x++)
            .for(var cp=0; cp<8; cp++)
                .byte logoPic.getMulticolorByte(x,cp+y*8)
 }}
  to:@2
@2: scope:[]  from @1
  [2] phi()
  [3] call main 
  to:@end
@end: scope:[]  from @2
  [4] phi()

(void()) main()
main: scope:[main]  from @2
  asm { sei  }
  [6] *((const byte*) BORDERCOL) ← (const byte) WHITE
  [7] *((const byte*) BGCOL2) ← (const byte) DARK_GREY
  [8] *((const byte*) BGCOL) ← *((const byte*) BGCOL2)
  [9] *((const byte*) BGCOL3) ← (const byte) BLACK
  to:main::toD0181
main::toD0181: scope:[main]  from main
  [10] phi()
  to:main::@3
main::@3: scope:[main]  from main::toD0181
  [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0
  [12] *((const byte*) D016) ← (const byte) VIC_MCM
  [13] call memset 
  to:main::@4
main::@4: scope:[main]  from main::@3
  [14] phi()
  [15] call memset 
  to:main::@1
main::@1: scope:[main]  from main::@1 main::@4
  [16] (byte) main::ch#2 ← phi( main::@1/(byte) main::ch#1 main::@4/(byte) 0 )
  [17] *((const byte*) SCREEN + (byte) main::ch#2) ← (byte) main::ch#2
  [18] (byte) main::ch#1 ← ++ (byte) main::ch#2
  [19] if((byte) main::ch#1!=(byte) $f0) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  [20] phi()
  [21] call sin16s_gen2 
  to:main::@5
main::@5: scope:[main]  from main::@2
  [22] phi()
  [23] call loop 
  to:main::@return
main::@return: scope:[main]  from main::@5
  [24] return 
  to:@return

(void()) loop()
loop: scope:[loop]  from main::@5
  [25] phi()
  to:loop::@1
loop::@1: scope:[loop]  from loop loop::@4
  [26] (word) xsin_idx#11 ← phi( loop/(word) 0 loop::@4/(word) xsin_idx#19 )
  to:loop::@2
loop::@2: scope:[loop]  from loop::@1 loop::@2
  [27] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@2
  to:loop::@3
loop::@3: scope:[loop]  from loop::@2
  [28] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL)
  [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1
  [30] (signed word*~) loop::$2 ← (const signed word*) xsin + (word~) loop::$7
  [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2)
  [32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
  [33] call render_logo 
  to:loop::@5
loop::@5: scope:[loop]  from loop::@3
  [34] (word) xsin_idx#3 ← ++ (word) xsin_idx#11
  [35] if((word) xsin_idx#3!=(const word) XSIN_SIZE) goto loop::@6
  to:loop::@4
loop::@6: scope:[loop]  from loop::@5
  [36] phi()
  to:loop::@4
loop::@4: scope:[loop]  from loop::@5 loop::@6
  [37] (word) xsin_idx#19 ← phi( loop::@5/(byte) 0 loop::@6/(word) xsin_idx#3 )
  [38] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL)
  to:loop::@1

(void()) render_logo((signed word) render_logo::xpos)
render_logo: scope:[render_logo]  from loop::@3
  [39] (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#0
  [40] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte) 7
  [41] (byte~) render_logo::$2 ← (const byte) VIC_MCM | (byte~) render_logo::$1
  [42] *((const byte*) D016) ← (byte~) render_logo::$2
  [43] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte) 3
  [44] (signed byte) render_logo::x_char#0 ← (signed byte)(signed word~) render_logo::$3
  [45] if((signed word) render_logo::xpos#0<(signed byte) 0) goto render_logo::@1
  to:render_logo::@2
render_logo::@2: scope:[render_logo]  from render_logo render_logo::@4
  [46] (byte) render_logo::screen_idx#18 ← phi( render_logo/(byte) 0 render_logo::@4/(byte) render_logo::screen_idx#3 )
  [47] if((byte) render_logo::screen_idx#18!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@3
  to:render_logo::@5
render_logo::@5: scope:[render_logo]  from render_logo::@2 render_logo::@7
  [48] (byte) render_logo::logo_idx#10 ← phi( render_logo::@7/(byte) render_logo::logo_idx#3 render_logo::@2/(byte) 0 )
  [48] (byte) render_logo::screen_idx#10 ← phi( render_logo::@7/(byte) render_logo::screen_idx#4 render_logo::@2/(byte) render_logo::screen_idx#18 )
  [49] if((byte) render_logo::screen_idx#10!=(byte) $28) goto render_logo::@6
  to:render_logo::@return
render_logo::@return: scope:[render_logo]  from render_logo::@11 render_logo::@5
  [50] return 
  to:@return
render_logo::@6: scope:[render_logo]  from render_logo::@5
  [51] *((const byte*) SCREEN + (byte) render_logo::screen_idx#10) ← (byte) render_logo::logo_idx#10
  to:render_logo::@15_1
render_logo::@15_1: scope:[render_logo]  from render_logo::@6
  [52] (byte~) render_logo::$33 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 1
  [53] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$33
  to:render_logo::@15_2
render_logo::@15_2: scope:[render_logo]  from render_logo::@15_1
  [54] (byte~) render_logo::$36 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 2
  [55] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$36
  to:render_logo::@15_3
render_logo::@15_3: scope:[render_logo]  from render_logo::@15_2
  [56] (byte~) render_logo::$39 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 3
  [57] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$39
  to:render_logo::@15_4
render_logo::@15_4: scope:[render_logo]  from render_logo::@15_3
  [58] (byte~) render_logo::$42 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 4
  [59] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$42
  to:render_logo::@15_5
render_logo::@15_5: scope:[render_logo]  from render_logo::@15_4
  [60] (byte~) render_logo::$45 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 5
  [61] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$45
  to:render_logo::@7
render_logo::@7: scope:[render_logo]  from render_logo::@15_5
  [62] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#10
  [63] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10
  to:render_logo::@5
render_logo::@3: scope:[render_logo]  from render_logo::@2
  [64] *((const byte*) SCREEN + (byte) render_logo::screen_idx#18) ← (byte) 0
  to:render_logo::@7_1
render_logo::@7_1: scope:[render_logo]  from render_logo::@3
  [65] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#18) ← (byte) 0
  to:render_logo::@7_2
render_logo::@7_2: scope:[render_logo]  from render_logo::@7_1
  [66] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#18) ← (byte) 0
  to:render_logo::@7_3
render_logo::@7_3: scope:[render_logo]  from render_logo::@7_2
  [67] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#18) ← (byte) 0
  to:render_logo::@7_4
render_logo::@7_4: scope:[render_logo]  from render_logo::@7_3
  [68] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#18) ← (byte) 0
  to:render_logo::@7_5
render_logo::@7_5: scope:[render_logo]  from render_logo::@7_4
  [69] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#18) ← (byte) 0
  to:render_logo::@4
render_logo::@4: scope:[render_logo]  from render_logo::@7_5
  [70] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#18
  to:render_logo::@2
render_logo::@1: scope:[render_logo]  from render_logo
  [71] (signed byte) render_logo::logo_idx#1 ← - (signed byte) render_logo::x_char#0
  [72] (byte) render_logo::logo_idx#14 ← (byte)(signed byte) render_logo::logo_idx#1
  to:render_logo::@8
render_logo::@8: scope:[render_logo]  from render_logo::@1 render_logo::@10
  [73] (byte) render_logo::screen_idx#21 ← phi( render_logo::@1/(byte) 0 render_logo::@10/(byte) render_logo::screen_idx#5 )
  [73] (byte) render_logo::logo_idx#11 ← phi( render_logo::@1/(byte) render_logo::logo_idx#14 render_logo::@10/(byte) render_logo::logo_idx#4 )
  [74] if((byte) render_logo::logo_idx#11!=(byte) $28) goto render_logo::@9
  to:render_logo::@11
render_logo::@11: scope:[render_logo]  from render_logo::@13 render_logo::@8
  [75] (byte) render_logo::screen_idx#15 ← phi( render_logo::@8/(byte) render_logo::screen_idx#21 render_logo::@13/(byte) render_logo::screen_idx#6 )
  [76] if((byte) render_logo::screen_idx#15!=(byte) $28) goto render_logo::@12
  to:render_logo::@return
render_logo::@12: scope:[render_logo]  from render_logo::@11
  [77] *((const byte*) SCREEN + (byte) render_logo::screen_idx#15) ← (byte) 0
  to:render_logo::@32_1
render_logo::@32_1: scope:[render_logo]  from render_logo::@12
  [78] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#15) ← (byte) 0
  to:render_logo::@32_2
render_logo::@32_2: scope:[render_logo]  from render_logo::@32_1
  [79] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#15) ← (byte) 0
  to:render_logo::@32_3
render_logo::@32_3: scope:[render_logo]  from render_logo::@32_2
  [80] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#15) ← (byte) 0
  to:render_logo::@32_4
render_logo::@32_4: scope:[render_logo]  from render_logo::@32_3
  [81] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#15) ← (byte) 0
  to:render_logo::@32_5
render_logo::@32_5: scope:[render_logo]  from render_logo::@32_4
  [82] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#15) ← (byte) 0
  to:render_logo::@13
render_logo::@13: scope:[render_logo]  from render_logo::@32_5
  [83] (byte) render_logo::screen_idx#6 ← ++ (byte) render_logo::screen_idx#15
  to:render_logo::@11
render_logo::@9: scope:[render_logo]  from render_logo::@8
  [84] *((const byte*) SCREEN + (byte) render_logo::screen_idx#21) ← (byte) render_logo::logo_idx#11
  to:render_logo::@24_1
render_logo::@24_1: scope:[render_logo]  from render_logo::@9
  [85] (byte~) render_logo::$73 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 1
  [86] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$73
  to:render_logo::@24_2
render_logo::@24_2: scope:[render_logo]  from render_logo::@24_1
  [87] (byte~) render_logo::$76 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 2
  [88] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$76
  to:render_logo::@24_3
render_logo::@24_3: scope:[render_logo]  from render_logo::@24_2
  [89] (byte~) render_logo::$79 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 3
  [90] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$79
  to:render_logo::@24_4
render_logo::@24_4: scope:[render_logo]  from render_logo::@24_3
  [91] (byte~) render_logo::$82 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 4
  [92] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$82
  to:render_logo::@24_5
render_logo::@24_5: scope:[render_logo]  from render_logo::@24_4
  [93] (byte~) render_logo::$85 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 5
  [94] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$85
  to:render_logo::@10
render_logo::@10: scope:[render_logo]  from render_logo::@24_5
  [95] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#21
  [96] (byte) render_logo::logo_idx#4 ← ++ (byte) render_logo::logo_idx#11
  to:render_logo::@8

(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
sin16s_gen2: scope:[sin16s_gen2]  from main::@2
  [97] phi()
  [98] call div32u16u 
  [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
  to:sin16s_gen2::@3
sin16s_gen2::@3: scope:[sin16s_gen2]  from sin16s_gen2
  [100] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2
  to:sin16s_gen2::@1
sin16s_gen2::@1: scope:[sin16s_gen2]  from sin16s_gen2::@3 sin16s_gen2::@5
  [101] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word*) xsin sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 )
  [101] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 )
  [101] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(word) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 )
  [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE) goto sin16s_gen2::@2
  to:sin16s_gen2::@return
sin16s_gen2::@return: scope:[sin16s_gen2]  from sin16s_gen2::@1
  [103] return 
  to:@return
sin16s_gen2::@2: scope:[sin16s_gen2]  from sin16s_gen2::@1
  [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2
  [105] call sin16s 
  [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
  to:sin16s_gen2::@4
sin16s_gen2::@4: scope:[sin16s_gen2]  from sin16s_gen2::@2
  [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0
  [108] call mul16s 
  [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0
  to:sin16s_gen2::@5
sin16s_gen2::@5: scope:[sin16s_gen2]  from sin16s_gen2::@4
  [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2
  [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6
  [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9
  [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
  [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0
  [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2
  to:sin16s_gen2::@1

(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
mul16s: scope:[mul16s]  from sin16s_gen2::@4
  [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0
  [117] call mul16u 
  [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2
  to:mul16s::@4
mul16s::@4: scope:[mul16s]  from mul16s
  [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2
  [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1
  to:mul16s::@3
mul16s::@3: scope:[mul16s]  from mul16s::@4
  [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0
  [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0
  [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
  to:mul16s::@1
mul16s::@1: scope:[mul16s]  from mul16s::@3 mul16s::@4
  [124] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@4/(dword) mul16s::m#0 )
  to:mul16s::@2
mul16s::@2: scope:[mul16s]  from mul16s::@1
  [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4
  to:mul16s::@return
mul16s::@return: scope:[mul16s]  from mul16s::@2
  [126] return 
  to:@return

(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
mul16u: scope:[mul16u]  from mul16s mulu16_sel
  [127] (word) mul16u::a#6 ← phi( mul16s/(word) mul16u::a#1 mulu16_sel/(word) mul16u::a#2 )
  [127] (word) mul16u::b#2 ← phi( mul16s/(word)(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
  [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2
  to:mul16u::@1
mul16u::@1: scope:[mul16u]  from mul16u mul16u::@3
  [129] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@3/(dword) mul16u::mb#1 )
  [129] (dword) mul16u::res#2 ← phi( mul16u/(dword) 0 mul16u::@3/(dword) mul16u::res#6 )
  [129] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@3/(word) mul16u::a#0 )
  [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2
  to:mul16u::@return
mul16u::@return: scope:[mul16u]  from mul16u::@1
  [131] return 
  to:@return
mul16u::@2: scope:[mul16u]  from mul16u::@1
  [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1
  [133] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3
  to:mul16u::@4
mul16u::@4: scope:[mul16u]  from mul16u::@2
  [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
  to:mul16u::@3
mul16u::@3: scope:[mul16u]  from mul16u::@2 mul16u::@4
  [135] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@4/(dword) mul16u::res#1 )
  [136] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1
  [137] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1
  to:mul16u::@1

(signed word()) sin16s((dword) sin16s::x)
sin16s: scope:[sin16s]  from sin16s_gen2::@2
  [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1
  to:sin16s::@4
sin16s::@4: scope:[sin16s]  from sin16s
  [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28
  to:sin16s::@1
sin16s::@1: scope:[sin16s]  from sin16s sin16s::@4
  [140] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte) 0 sin16s::@4/(byte) 1 )
  [140] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
  [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2
  to:sin16s::@5
sin16s::@5: scope:[sin16s]  from sin16s::@1
  [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4
  to:sin16s::@2
sin16s::@2: scope:[sin16s]  from sin16s::@1 sin16s::@5
  [143] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
  [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3
  [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4
  [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
  [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
  [148] call mulu16_sel 
  [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
  to:sin16s::@7
sin16s::@7: scope:[sin16s]  from sin16s::@2
  [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
  [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
  [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
  [153] call mulu16_sel 
  [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
  to:sin16s::@8
sin16s::@8: scope:[sin16s]  from sin16s::@7
  [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
  [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
  [157] call mulu16_sel 
  [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
  to:sin16s::@9
sin16s::@9: scope:[sin16s]  from sin16s::@8
  [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
  [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
  [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
  [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
  [163] call mulu16_sel 
  [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
  to:sin16s::@10
sin16s::@10: scope:[sin16s]  from sin16s::@9
  [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
  [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
  [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
  [168] call mulu16_sel 
  [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
  to:sin16s::@11
sin16s::@11: scope:[sin16s]  from sin16s::@10
  [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
  [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4
  [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
  [173] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12
  to:sin16s::@6
sin16s::@6: scope:[sin16s]  from sin16s::@11
  [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
  to:sin16s::@3
sin16s::@3: scope:[sin16s]  from sin16s::@12 sin16s::@6
  [175] (signed word) sin16s::return#1 ← phi( sin16s::@12/(signed word) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
  to:sin16s::@return
sin16s::@return: scope:[sin16s]  from sin16s::@3
  [176] return 
  to:@return
sin16s::@12: scope:[sin16s]  from sin16s::@11
  [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
  to:sin16s::@3

(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
mulu16_sel: scope:[mulu16_sel]  from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9
  [178] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 )
  [178] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 )
  [178] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 )
  [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
  [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
  [181] call mul16u 
  [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2
  to:mulu16_sel::@1
mulu16_sel::@1: scope:[mulu16_sel]  from mulu16_sel
  [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
  [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
  [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
  to:mulu16_sel::@return
mulu16_sel::@return: scope:[mulu16_sel]  from mulu16_sel::@1
  [186] return 
  to:@return

(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
div32u16u: scope:[div32u16u]  from sin16s_gen2
  [187] phi()
  [188] call divr16u 
  [189] (word) divr16u::return#2 ← (word) divr16u::return#0
  to:div32u16u::@1
div32u16u::@1: scope:[div32u16u]  from div32u16u
  [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
  [191] (word) divr16u::rem#4 ← (word) rem16u#1
  [192] call divr16u 
  [193] (word) divr16u::return#3 ← (word) divr16u::return#0
  to:div32u16u::@2
div32u16u::@2: scope:[div32u16u]  from div32u16u::@1
  [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
  [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
  to:div32u16u::@return
div32u16u::@return: scope:[div32u16u]  from div32u16u::@2
  [196] return 
  to:@return

(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
divr16u: scope:[divr16u]  from div32u16u div32u16u::@1
  [197] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28 div32u16u::@1/<(const dword) PI2_u4f28 )
  [197] (word) divr16u::rem#10 ← phi( div32u16u/(byte) 0 div32u16u::@1/(word) divr16u::rem#4 )
  to:divr16u::@1
divr16u::@1: scope:[divr16u]  from divr16u divr16u::@3
  [198] (byte) divr16u::i#2 ← phi( divr16u/(byte) 0 divr16u::@3/(byte) divr16u::i#1 )
  [198] (word) divr16u::quotient#3 ← phi( divr16u/(word) 0 divr16u::@3/(word) divr16u::return#0 )
  [198] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
  [198] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
  [199] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1
  [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
  [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80
  [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2
  to:divr16u::@4
divr16u::@4: scope:[divr16u]  from divr16u::@1
  [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1
  to:divr16u::@2
divr16u::@2: scope:[divr16u]  from divr16u::@1 divr16u::@4
  [204] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
  [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1
  [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1
  [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3
  to:divr16u::@5
divr16u::@5: scope:[divr16u]  from divr16u::@2
  [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
  [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE
  to:divr16u::@3
divr16u::@3: scope:[divr16u]  from divr16u::@2 divr16u::@5
  [210] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
  [210] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
  [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
  [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1
  to:divr16u::@6
divr16u::@6: scope:[divr16u]  from divr16u::@3
  [213] (word) rem16u#1 ← (word) divr16u::rem#11
  to:divr16u::@return
divr16u::@return: scope:[divr16u]  from divr16u::@6
  [214] return 
  to:@return

(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset]  from main::@3 main::@4
  [215] (byte) memset::c#4 ← phi( main::@3/(const byte) BLACK main::@4/(const byte) WHITE|(byte) 8 )
  [215] (void*) memset::str#3 ← phi( main::@3/(void*)(const byte*) SCREEN main::@4/(void*)(const byte*) COLS )
  to:memset::@1
memset::@1: scope:[memset]  from memset
  [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8
  [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
  to:memset::@2
memset::@2: scope:[memset]  from memset::@1 memset::@3
  [218] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
  [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
  to:memset::@return
memset::@return: scope:[memset]  from memset::@2
  [220] return 
  to:@return
memset::@3: scope:[memset]  from memset::@2
  [221] *((byte*) memset::dst#2) ← (byte) memset::c#4
  [222] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
  to:memset::@2


VARIABLE REGISTER WEIGHTS
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(dword) div32u16u::dividend
(word) div32u16u::divisor
(dword) div32u16u::quotient
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 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()) loop()
(signed word*~) loop::$2 22.0
(word~) loop::$7 22.0
(signed word) loop::xpos
(signed word) loop::xpos#0 22.0
(void()) main()
(byte) main::ch
(byte) main::ch#1 16.5
(byte) main::ch#2 22.0
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(byte*) main::toD0181_screen
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(byte) memset::c
(byte) memset::c#4 1.5714285714285714
(byte*) memset::dst
(byte*) memset::dst#1 22.0
(byte*) memset::dst#2 15.333333333333332
(byte*) memset::dst#4 4.0
(byte*) memset::end
(byte*) memset::end#0 2.1666666666666665
(word) memset::num
(void*) memset::return
(void*) memset::str
(void*) memset::str#3
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 4.0
(word~) mul16s::$9 4.0
(signed word) mul16s::a
(signed word) mul16s::a#0 2.6
(signed word) mul16s::b
(dword) mul16s::m
(dword) mul16s::m#0 2.0
(dword) mul16s::m#1 4.0
(dword) mul16s::m#4 4.0
(signed dword) mul16s::return
(signed dword) mul16s::return#0 4.333333333333333
(signed dword) mul16s::return#2 22.0
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte~) mul16u::$1 202.0
(word) mul16u::a
(word) mul16u::a#0 101.0
(word) mul16u::a#1 4.0
(word) mul16u::a#2 2.0
(word) mul16u::a#3 67.66666666666666
(word) mul16u::a#6 3.0
(word) mul16u::b
(word) mul16u::b#1 4.0
(word) mul16u::b#2 2.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 43.85714285714286
(dword) mul16u::res#6 101.0
(dword) mul16u::return
(dword) mul16u::return#2 4.0
(dword) mul16u::return#3 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
(word) rem16u
(word) rem16u#1 0.8
(void()) render_logo((signed word) render_logo::xpos)
(byte~) render_logo::$0 4.0
(byte~) render_logo::$1 4.0
(byte~) render_logo::$2 4.0
(signed word~) render_logo::$3 2.0
(byte~) render_logo::$33 202.0
(byte~) render_logo::$36 202.0
(byte~) render_logo::$39 202.0
(byte~) render_logo::$42 202.0
(byte~) render_logo::$45 202.0
(byte~) render_logo::$73 202.0
(byte~) render_logo::$76 202.0
(byte~) render_logo::$79 202.0
(byte~) render_logo::$82 202.0
(byte~) render_logo::$85 202.0
(byte) render_logo::line
(byte) render_logo::logo_idx
(signed byte) render_logo::logo_idx#1 2.0
(byte) render_logo::logo_idx#10 57.714285714285715
(byte) render_logo::logo_idx#11 65.07142857142857
(byte) render_logo::logo_idx#14 4.0
(byte) render_logo::logo_idx#3 202.0
(byte) render_logo::logo_idx#4 202.0
(byte) render_logo::logo_start
(byte) render_logo::screen_idx
(byte) render_logo::screen_idx#10 77.6923076923077
(byte) render_logo::screen_idx#15 126.25
(byte) render_logo::screen_idx#18 126.25
(byte) render_logo::screen_idx#21 69.92307692307692
(byte) render_logo::screen_idx#3 202.0
(byte) render_logo::screen_idx#4 101.0
(byte) render_logo::screen_idx#5 101.0
(byte) render_logo::screen_idx#6 202.0
(signed byte) render_logo::x_char
(signed byte) render_logo::x_char#0 0.36363636363636365
(signed word) render_logo::xpos
(signed word) render_logo::xpos#0 2.142857142857143
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 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_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
(signed dword~) sin16s_gen2::$6 22.0
(word~) sin16s_gen2::$9 11.0
(signed word) sin16s_gen2::ampl
(word) sin16s_gen2::i
(word) sin16s_gen2::i#1 22.0
(word) sin16s_gen2::i#2 2.5384615384615383
(signed word) sin16s_gen2::max
(signed word) sin16s_gen2::min
(signed word) sin16s_gen2::offs
(signed word*) sin16s_gen2::sintab
(signed word*) sin16s_gen2::sintab#0 7.333333333333333
(signed word*) sin16s_gen2::sintab#2 3.0
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 0.8666666666666666
(word) sin16s_gen2::wavelength
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#1 11.0
(dword) sin16s_gen2::x#2 2.75
(word) xsin_idx
(word) xsin_idx#11 4.125
(word) xsin_idx#19 11.0
(word) xsin_idx#3 11.0

Initial phi equivalence classes
[ main::ch#2 main::ch#1 ]
[ xsin_idx#11 xsin_idx#19 xsin_idx#3 ]
[ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
[ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
[ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
[ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
[ sin16s_gen2::i#2 sin16s_gen2::i#1 ]
[ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
[ mul16s::m#4 mul16s::m#1 mul16s::m#0 ]
[ mul16u::b#2 mul16u::b#1 ]
[ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
[ mul16u::res#2 mul16u::res#6 mul16u::res#1 ]
[ mul16u::mb#2 mul16u::mb#0 mul16u::mb#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 ]
[ 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 ]
[ memset::str#3 ]
[ memset::c#4 ]
[ memset::dst#2 memset::dst#4 memset::dst#1 ]
Added variable loop::$7 to live range equivalence class [ loop::$7 ]
Added variable loop::$2 to live range equivalence class [ loop::$2 ]
Added variable loop::xpos#0 to live range equivalence class [ loop::xpos#0 ]
Added variable render_logo::xpos#0 to live range equivalence class [ render_logo::xpos#0 ]
Added variable render_logo::$0 to live range equivalence class [ render_logo::$0 ]
Added variable render_logo::$1 to live range equivalence class [ render_logo::$1 ]
Added variable render_logo::$2 to live range equivalence class [ render_logo::$2 ]
Added variable render_logo::$3 to live range equivalence class [ render_logo::$3 ]
Added variable render_logo::x_char#0 to live range equivalence class [ render_logo::x_char#0 ]
Added variable render_logo::$33 to live range equivalence class [ render_logo::$33 ]
Added variable render_logo::$36 to live range equivalence class [ render_logo::$36 ]
Added variable render_logo::$39 to live range equivalence class [ render_logo::$39 ]
Added variable render_logo::$42 to live range equivalence class [ render_logo::$42 ]
Added variable render_logo::$45 to live range equivalence class [ render_logo::$45 ]
Added variable render_logo::logo_idx#1 to live range equivalence class [ render_logo::logo_idx#1 ]
Added variable render_logo::$73 to live range equivalence class [ render_logo::$73 ]
Added variable render_logo::$76 to live range equivalence class [ render_logo::$76 ]
Added variable render_logo::$79 to live range equivalence class [ render_logo::$79 ]
Added variable render_logo::$82 to live range equivalence class [ render_logo::$82 ]
Added variable render_logo::$85 to live range equivalence class [ render_logo::$85 ]
Added variable div32u16u::return#2 to live range equivalence class [ div32u16u::return#2 ]
Added variable sin16s_gen2::step#0 to live range equivalence class [ sin16s_gen2::step#0 ]
Added variable sin16s::return#0 to live range equivalence class [ sin16s::return#0 ]
Added variable mul16s::a#0 to live range equivalence class [ mul16s::a#0 ]
Added variable mul16s::return#2 to live range equivalence class [ mul16s::return#2 ]
Added variable sin16s_gen2::$6 to live range equivalence class [ sin16s_gen2::$6 ]
Added variable sin16s_gen2::$9 to live range equivalence class [ sin16s_gen2::$9 ]
Added variable mul16u::return#2 to live range equivalence class [ mul16u::return#2 ]
Added variable mul16s::$9 to live range equivalence class [ mul16s::$9 ]
Added variable mul16s::$16 to live range equivalence class [ mul16s::$16 ]
Added variable mul16s::return#0 to live range equivalence class [ mul16s::return#0 ]
Added variable mul16u::$1 to live range equivalence class [ mul16u::$1 ]
Added variable sin16s::$4 to live range equivalence class [ sin16s::$4 ]
Added variable sin16s::x1#0 to live range equivalence class [ sin16s::x1#0 ]
Added variable mulu16_sel::return#0 to live range equivalence class [ mulu16_sel::return#0 ]
Added variable sin16s::x2#0 to live range equivalence class [ sin16s::x2#0 ]
Added variable mulu16_sel::return#1 to live range equivalence class [ mulu16_sel::return#1 ]
Added variable sin16s::x3#0 to live range equivalence class [ sin16s::x3#0 ]
Added variable mulu16_sel::return#2 to live range equivalence class [ mulu16_sel::return#2 ]
Added variable sin16s::x3_6#0 to live range equivalence class [ sin16s::x3_6#0 ]
Added variable sin16s::usinx#0 to live range equivalence class [ sin16s::usinx#0 ]
Added variable mulu16_sel::return#10 to live range equivalence class [ mulu16_sel::return#10 ]
Added variable sin16s::x4#0 to live range equivalence class [ sin16s::x4#0 ]
Added variable mulu16_sel::return#11 to live range equivalence class [ mulu16_sel::return#11 ]
Added variable sin16s::x5#0 to live range equivalence class [ sin16s::x5#0 ]
Added variable sin16s::x5_128#0 to live range equivalence class [ sin16s::x5_128#0 ]
Added variable sin16s::usinx#1 to live range equivalence class [ sin16s::usinx#1 ]
Added variable mul16u::return#3 to live range equivalence class [ mul16u::return#3 ]
Added variable mulu16_sel::$0 to live range equivalence class [ mulu16_sel::$0 ]
Added variable mulu16_sel::$1 to live range equivalence class [ mulu16_sel::$1 ]
Added variable mulu16_sel::return#12 to live range equivalence class [ mulu16_sel::return#12 ]
Added variable divr16u::return#2 to live range equivalence class [ divr16u::return#2 ]
Added variable div32u16u::quotient_hi#0 to live range equivalence class [ div32u16u::quotient_hi#0 ]
Added variable divr16u::return#3 to live range equivalence class [ divr16u::return#3 ]
Added variable div32u16u::quotient_lo#0 to live range equivalence class [ div32u16u::quotient_lo#0 ]
Added variable div32u16u::return#0 to live range equivalence class [ div32u16u::return#0 ]
Added variable divr16u::$1 to live range equivalence class [ divr16u::$1 ]
Added variable divr16u::$2 to live range equivalence class [ divr16u::$2 ]
Added variable rem16u#1 to live range equivalence class [ rem16u#1 ]
Added variable memset::end#0 to live range equivalence class [ memset::end#0 ]
Complete equivalence classes
[ main::ch#2 main::ch#1 ]
[ xsin_idx#11 xsin_idx#19 xsin_idx#3 ]
[ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
[ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
[ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
[ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
[ sin16s_gen2::i#2 sin16s_gen2::i#1 ]
[ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
[ mul16s::m#4 mul16s::m#1 mul16s::m#0 ]
[ mul16u::b#2 mul16u::b#1 ]
[ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
[ mul16u::res#2 mul16u::res#6 mul16u::res#1 ]
[ mul16u::mb#2 mul16u::mb#0 mul16u::mb#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 ]
[ 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 ]
[ memset::str#3 ]
[ memset::c#4 ]
[ memset::dst#2 memset::dst#4 memset::dst#1 ]
[ loop::$7 ]
[ loop::$2 ]
[ loop::xpos#0 ]
[ render_logo::xpos#0 ]
[ render_logo::$0 ]
[ render_logo::$1 ]
[ render_logo::$2 ]
[ render_logo::$3 ]
[ render_logo::x_char#0 ]
[ render_logo::$33 ]
[ render_logo::$36 ]
[ render_logo::$39 ]
[ render_logo::$42 ]
[ render_logo::$45 ]
[ render_logo::logo_idx#1 ]
[ render_logo::$73 ]
[ render_logo::$76 ]
[ render_logo::$79 ]
[ render_logo::$82 ]
[ render_logo::$85 ]
[ div32u16u::return#2 ]
[ sin16s_gen2::step#0 ]
[ sin16s::return#0 ]
[ mul16s::a#0 ]
[ mul16s::return#2 ]
[ sin16s_gen2::$6 ]
[ sin16s_gen2::$9 ]
[ mul16u::return#2 ]
[ mul16s::$9 ]
[ mul16s::$16 ]
[ mul16s::return#0 ]
[ mul16u::$1 ]
[ sin16s::$4 ]
[ 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::return#3 ]
[ mulu16_sel::$0 ]
[ mulu16_sel::$1 ]
[ mulu16_sel::return#12 ]
[ divr16u::return#2 ]
[ div32u16u::quotient_hi#0 ]
[ divr16u::return#3 ]
[ div32u16u::quotient_lo#0 ]
[ div32u16u::return#0 ]
[ divr16u::$1 ]
[ divr16u::$2 ]
[ rem16u#1 ]
[ memset::end#0 ]
Allocated zp[1]:2 [ main::ch#2 main::ch#1 ]
Allocated zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ]
Allocated zp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
Allocated zp[1]:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
Allocated zp[1]:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
Allocated zp[1]:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
Allocated zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ]
Allocated zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
Allocated zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
Allocated zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ]
Allocated zp[2]:21 [ mul16u::b#2 mul16u::b#1 ]
Allocated zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
Allocated zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ]
Allocated zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
Allocated zp[1]:33 [ sin16s::isUpper#2 ]
Allocated zp[4]:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ]
Allocated zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ]
Allocated zp[2]:40 [ 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[2]:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
Allocated zp[1]:44 [ mulu16_sel::select#5 ]
Allocated zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ]
Allocated zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
Allocated zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
Allocated zp[1]:51 [ divr16u::i#2 divr16u::i#1 ]
Allocated zp[2]:52 [ memset::str#3 ]
Allocated zp[1]:54 [ memset::c#4 ]
Allocated zp[2]:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
Allocated zp[2]:57 [ loop::$7 ]
Allocated zp[2]:59 [ loop::$2 ]
Allocated zp[2]:61 [ loop::xpos#0 ]
Allocated zp[2]:63 [ render_logo::xpos#0 ]
Allocated zp[1]:65 [ render_logo::$0 ]
Allocated zp[1]:66 [ render_logo::$1 ]
Allocated zp[1]:67 [ render_logo::$2 ]
Allocated zp[2]:68 [ render_logo::$3 ]
Allocated zp[1]:70 [ render_logo::x_char#0 ]
Allocated zp[1]:71 [ render_logo::$33 ]
Allocated zp[1]:72 [ render_logo::$36 ]
Allocated zp[1]:73 [ render_logo::$39 ]
Allocated zp[1]:74 [ render_logo::$42 ]
Allocated zp[1]:75 [ render_logo::$45 ]
Allocated zp[1]:76 [ render_logo::logo_idx#1 ]
Allocated zp[1]:77 [ render_logo::$73 ]
Allocated zp[1]:78 [ render_logo::$76 ]
Allocated zp[1]:79 [ render_logo::$79 ]
Allocated zp[1]:80 [ render_logo::$82 ]
Allocated zp[1]:81 [ render_logo::$85 ]
Allocated zp[4]:82 [ div32u16u::return#2 ]
Allocated zp[4]:86 [ sin16s_gen2::step#0 ]
Allocated zp[2]:90 [ sin16s::return#0 ]
Allocated zp[2]:92 [ mul16s::a#0 ]
Allocated zp[4]:94 [ mul16s::return#2 ]
Allocated zp[4]:98 [ sin16s_gen2::$6 ]
Allocated zp[2]:102 [ sin16s_gen2::$9 ]
Allocated zp[4]:104 [ mul16u::return#2 ]
Allocated zp[2]:108 [ mul16s::$9 ]
Allocated zp[2]:110 [ mul16s::$16 ]
Allocated zp[4]:112 [ mul16s::return#0 ]
Allocated zp[1]:116 [ mul16u::$1 ]
Allocated zp[4]:117 [ sin16s::$4 ]
Allocated zp[2]:121 [ sin16s::x1#0 ]
Allocated zp[2]:123 [ mulu16_sel::return#0 ]
Allocated zp[2]:125 [ sin16s::x2#0 ]
Allocated zp[2]:127 [ mulu16_sel::return#1 ]
Allocated zp[2]:129 [ sin16s::x3#0 ]
Allocated zp[2]:131 [ mulu16_sel::return#2 ]
Allocated zp[2]:133 [ sin16s::x3_6#0 ]
Allocated zp[2]:135 [ sin16s::usinx#0 ]
Allocated zp[2]:137 [ mulu16_sel::return#10 ]
Allocated zp[2]:139 [ sin16s::x4#0 ]
Allocated zp[2]:141 [ mulu16_sel::return#11 ]
Allocated zp[2]:143 [ sin16s::x5#0 ]
Allocated zp[2]:145 [ sin16s::x5_128#0 ]
Allocated zp[2]:147 [ sin16s::usinx#1 ]
Allocated zp[4]:149 [ mul16u::return#3 ]
Allocated zp[4]:153 [ mulu16_sel::$0 ]
Allocated zp[4]:157 [ mulu16_sel::$1 ]
Allocated zp[2]:161 [ mulu16_sel::return#12 ]
Allocated zp[2]:163 [ divr16u::return#2 ]
Allocated zp[2]:165 [ div32u16u::quotient_hi#0 ]
Allocated zp[2]:167 [ divr16u::return#3 ]
Allocated zp[2]:169 [ div32u16u::quotient_lo#0 ]
Allocated zp[4]:171 [ div32u16u::return#0 ]
Allocated zp[1]:175 [ divr16u::$1 ]
Allocated zp[1]:176 [ divr16u::$2 ]
Allocated zp[2]:177 [ rem16u#1 ]
Allocated zp[2]:179 [ memset::end#0 ]

INITIAL ASM
Target platform is c64basic / MOS6502X
  // File Comments
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label RASTER = $d012
  .label BORDERCOL = $d020
  .label BGCOL = $d021
  .label BGCOL2 = $d022
  .label BGCOL3 = $d023
  .label D016 = $d016
  .const VIC_MCM = $10
  .label D018 = $d018
  // Color Ram
  .label COLS = $d800
  // The colors of the C64
  .const BLACK = 0
  .const WHITE = 1
  .const DARK_GREY = $b
  // 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
  .const XSIN_SIZE = $200
  .const SIZEOF_SIGNED_WORD = 2
  .label SCREEN = $400
  .label LOGO = $2000
  // Remainder after unsigned 16-bit division
  .label rem16u = $b1
  .label xsin_idx = 3
  // @begin
__bbegin:
  jmp __b1
  // @1
__b1:
  // kickasm(location (const byte*) LOGO) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))     .for (var y=0; y<6	; y++)         .for (var x=0;x<40; x++)             .for(var cp=0; cp<8; cp++)                 .byte logoPic.getMulticolorByte(x,cp+y*8)  }}
  // [2] phi from @1 to @2 [phi:@1->@2]
__b2_from___b1:
  jmp __b2
  // @2
__b2:
  // [3] call main 
  jsr main
  // [4] phi from @2 to @end [phi:@2->@end]
__bend_from___b2:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LOGO)/4&$f
    .label ch = 2
    // asm { sei  }
    sei
    // [6] *((const byte*) BORDERCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta BORDERCOL
    // [7] *((const byte*) BGCOL2) ← (const byte) DARK_GREY -- _deref_pbuc1=vbuc2 
    lda #DARK_GREY
    sta BGCOL2
    // [8] *((const byte*) BGCOL) ← *((const byte*) BGCOL2) -- _deref_pbuc1=_deref_pbuc2 
    lda BGCOL2
    sta BGCOL
    // [9] *((const byte*) BGCOL3) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 
    lda #BLACK
    sta BGCOL3
    // [10] phi from main to main::toD0181 [phi:main->main::toD0181]
  toD0181_from_main:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp __b3
    // main::@3
  __b3:
    // [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [12] *((const byte*) D016) ← (const byte) VIC_MCM -- _deref_pbuc1=vbuc2 
    lda #VIC_MCM
    sta D016
    // [13] call memset 
    // [215] phi from main::@3 to memset [phi:main::@3->memset]
  memset_from___b3:
    // [215] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@3->memset#0] -- vbuz1=vbuc1 
    lda #BLACK
    sta.z memset.c
    // [215] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 
    lda #<SCREEN
    sta.z memset.str
    lda #>SCREEN
    sta.z memset.str+1
    jsr memset
    // [14] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  __b4_from___b3:
    jmp __b4
    // main::@4
  __b4:
    // [15] call memset 
    // [215] phi from main::@4 to memset [phi:main::@4->memset]
  memset_from___b4:
    // [215] phi (byte) memset::c#4 = (const byte) WHITE|(byte) 8 [phi:main::@4->memset#0] -- vbuz1=vbuc1 
    lda #WHITE|8
    sta.z memset.c
    // [215] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 
    lda #<COLS
    sta.z memset.str
    lda #>COLS
    sta.z memset.str+1
    jsr memset
    // [16] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
  __b1_from___b4:
    // [16] phi (byte) main::ch#2 = (byte) 0 [phi:main::@4->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z ch
    jmp __b1
    // [16] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  __b1_from___b1:
    // [16] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@1->main::@1#0] -- register_copy 
    jmp __b1
    // main::@1
  __b1:
    // [17] *((const byte*) SCREEN + (byte) main::ch#2) ← (byte) main::ch#2 -- pbuc1_derefidx_vbuz1=vbuz1 
    ldy.z ch
    tya
    sta SCREEN,y
    // [18] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 
    inc.z ch
    // [19] if((byte) main::ch#1!=(byte) $f0) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$f0
    cmp.z ch
    bne __b1_from___b1
    // [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  __b2_from___b1:
    jmp __b2
    // main::@2
  __b2:
    // [21] call sin16s_gen2 
    // [97] phi from main::@2 to sin16s_gen2 [phi:main::@2->sin16s_gen2]
  sin16s_gen2_from___b2:
    jsr sin16s_gen2
    // [22] phi from main::@2 to main::@5 [phi:main::@2->main::@5]
  __b5_from___b2:
    jmp __b5
    // main::@5
  __b5:
    // [23] call loop 
    // [25] phi from main::@5 to loop [phi:main::@5->loop]
  loop_from___b5:
    jsr loop
    jmp __breturn
    // main::@return
  __breturn:
    // [24] return 
    rts
}
  // loop
loop: {
    .label __2 = $3b
    .label __7 = $39
    .label xpos = $3d
    // [26] phi from loop to loop::@1 [phi:loop->loop::@1]
  __b1_from_loop:
    // [26] phi (word) xsin_idx#11 = (word) 0 [phi:loop->loop::@1#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z xsin_idx
    lda #>0
    sta.z xsin_idx+1
    jmp __b1
    // loop::@1
  __b1:
    jmp __b2
  // Wait for the raster to reach the bottom of the screen
    // loop::@2
  __b2:
    // [27] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne __b2
    jmp __b3
    // loop::@3
  __b3:
    // [28] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
    // [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 -- vwuz1=vwuz2_rol_1 
    lda.z xsin_idx
    asl
    sta.z __7
    lda.z xsin_idx+1
    rol
    sta.z __7+1
    // [30] (signed word*~) loop::$2 ← (const signed word*) xsin + (word~) loop::$7 -- pwsz1=pwsc1_plus_vwuz2 
    lda.z __7
    clc
    adc #<xsin
    sta.z __2
    lda.z __7+1
    adc #>xsin
    sta.z __2+1
    // [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) -- vwsz1=_deref_pwsz2 
    ldy #0
    lda (__2),y
    sta.z xpos
    iny
    lda (__2),y
    sta.z xpos+1
    // [32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0 -- vwsz1=vwsz2 
    lda.z xpos
    sta.z render_logo.xpos
    lda.z xpos+1
    sta.z render_logo.xpos+1
    // [33] call render_logo 
    jsr render_logo
    jmp __b5
    // loop::@5
  __b5:
    // [34] (word) xsin_idx#3 ← ++ (word) xsin_idx#11 -- vwuz1=_inc_vwuz1 
    inc.z xsin_idx
    bne !+
    inc.z xsin_idx+1
  !:
    // [35] if((word) xsin_idx#3!=(const word) XSIN_SIZE) goto loop::@6 -- vwuz1_neq_vwuc1_then_la1 
    lda.z xsin_idx+1
    cmp #>XSIN_SIZE
    bne __b6_from___b5
    lda.z xsin_idx
    cmp #<XSIN_SIZE
    bne __b6_from___b5
    // [37] phi from loop::@5 to loop::@4 [phi:loop::@5->loop::@4]
  __b4_from___b5:
    // [37] phi (word) xsin_idx#19 = (byte) 0 [phi:loop::@5->loop::@4#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z xsin_idx
    lda #>0
    sta.z xsin_idx+1
    jmp __b4
    // [36] phi from loop::@5 to loop::@6 [phi:loop::@5->loop::@6]
  __b6_from___b5:
    jmp __b6
    // loop::@6
  __b6:
    // [37] phi from loop::@6 to loop::@4 [phi:loop::@6->loop::@4]
  __b4_from___b6:
    // [37] phi (word) xsin_idx#19 = (word) xsin_idx#3 [phi:loop::@6->loop::@4#0] -- register_copy 
    jmp __b4
    // loop::@4
  __b4:
    // [38] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // [26] phi from loop::@4 to loop::@1 [phi:loop::@4->loop::@1]
  __b1_from___b4:
    // [26] phi (word) xsin_idx#11 = (word) xsin_idx#19 [phi:loop::@4->loop::@1#0] -- register_copy 
    jmp __b1
}
  // render_logo
// render_logo(signed word zp($3f) xpos)
render_logo: {
    .label __0 = $41
    .label __1 = $42
    .label __2 = $43
    .label __3 = $44
    .label xpos = $3f
    .label x_char = $46
    .label logo_idx = $4c
    .label screen_idx = 5
    .label logo_idx_1 = 6
    .label screen_idx_1 = 8
    .label logo_idx_2 = 7
    .label __33 = $47
    .label __36 = $48
    .label __39 = $49
    .label __42 = $4a
    .label __45 = $4b
    .label __73 = $4d
    .label __76 = $4e
    .label __79 = $4f
    .label __82 = $50
    .label __85 = $51
    // [39] (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#0 -- vbuz1=_byte_vwsz2 
    lda.z xpos
    sta.z __0
    // [40] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 
    lda #7
    and.z __0
    sta.z __1
    // [41] (byte~) render_logo::$2 ← (const byte) VIC_MCM | (byte~) render_logo::$1 -- vbuz1=vbuc1_bor_vbuz2 
    lda #VIC_MCM
    ora.z __1
    sta.z __2
    // [42] *((const byte*) D016) ← (byte~) render_logo::$2 -- _deref_pbuc1=vbuz1 
    lda.z __2
    sta D016
    // [43] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte) 3 -- vwsz1=vwsz2_ror_3 
    lda.z xpos+1
    cmp #$80
    ror
    sta.z __3+1
    lda.z xpos
    ror
    sta.z __3
    lda.z __3+1
    cmp #$80
    ror.z __3+1
    ror.z __3
    lda.z __3+1
    cmp #$80
    ror.z __3+1
    ror.z __3
    // [44] (signed byte) render_logo::x_char#0 ← (signed byte)(signed word~) render_logo::$3 -- vbsz1=_sbyte_vwsz2 
    lda.z __3
    sta.z x_char
    // [45] if((signed word) render_logo::xpos#0<(signed byte) 0) goto render_logo::@1 -- vwsz1_lt_0_then_la1 
    lda.z xpos+1
    bmi __b1
    // [46] phi from render_logo to render_logo::@2 [phi:render_logo->render_logo::@2]
  __b2_from_render_logo:
    // [46] phi (byte) render_logo::screen_idx#18 = (byte) 0 [phi:render_logo->render_logo::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta.z screen_idx
    jmp __b2
    // render_logo::@2
  __b2:
    // [47] if((byte) render_logo::screen_idx#18!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@3 -- vbuz1_neq_vbuz2_then_la1 
    lda.z screen_idx
    cmp.z x_char
    bne __b3
    // [48] phi from render_logo::@2 to render_logo::@5 [phi:render_logo::@2->render_logo::@5]
  __b5_from___b2:
    // [48] phi (byte) render_logo::logo_idx#10 = (byte) 0 [phi:render_logo::@2->render_logo::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z logo_idx_1
    // [48] phi (byte) render_logo::screen_idx#10 = (byte) render_logo::screen_idx#18 [phi:render_logo::@2->render_logo::@5#1] -- register_copy 
    jmp __b5
    // render_logo::@5
  __b5:
    // [49] if((byte) render_logo::screen_idx#10!=(byte) $28) goto render_logo::@6 -- vbuz1_neq_vbuc1_then_la1 
    lda #$28
    cmp.z screen_idx
    bne __b6
    jmp __breturn
    // render_logo::@return
  __breturn:
    // [50] return 
    rts
    // render_logo::@6
  __b6:
    // [51] *((const byte*) SCREEN + (byte) render_logo::screen_idx#10) ← (byte) render_logo::logo_idx#10 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z logo_idx_1
    ldy.z screen_idx
    sta SCREEN,y
    jmp __b15_1
    // render_logo::@15_1
  __b15_1:
    // [52] (byte~) render_logo::$33 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 1 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_1
    axs #-[$28*1]
    stx.z __33
    // [53] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$33 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __33
    ldy.z screen_idx
    sta SCREEN+$28*1,y
    jmp __b15_2
    // render_logo::@15_2
  __b15_2:
    // [54] (byte~) render_logo::$36 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 2 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_1
    axs #-[$28*2]
    stx.z __36
    // [55] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$36 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __36
    ldy.z screen_idx
    sta SCREEN+$28*2,y
    jmp __b15_3
    // render_logo::@15_3
  __b15_3:
    // [56] (byte~) render_logo::$39 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 3 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_1
    axs #-[$28*3]
    stx.z __39
    // [57] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$39 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __39
    ldy.z screen_idx
    sta SCREEN+$28*3,y
    jmp __b15_4
    // render_logo::@15_4
  __b15_4:
    // [58] (byte~) render_logo::$42 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 4 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_1
    axs #-[$28*4]
    stx.z __42
    // [59] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$42 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __42
    ldy.z screen_idx
    sta SCREEN+$28*4,y
    jmp __b15_5
    // render_logo::@15_5
  __b15_5:
    // [60] (byte~) render_logo::$45 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 5 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_1
    axs #-[$28*5]
    stx.z __45
    // [61] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$45 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __45
    ldy.z screen_idx
    sta SCREEN+$28*5,y
    jmp __b7
    // render_logo::@7
  __b7:
    // [62] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#10 -- vbuz1=_inc_vbuz1 
    inc.z screen_idx
    // [63] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10 -- vbuz1=_inc_vbuz1 
    inc.z logo_idx_1
    // [48] phi from render_logo::@7 to render_logo::@5 [phi:render_logo::@7->render_logo::@5]
  __b5_from___b7:
    // [48] phi (byte) render_logo::logo_idx#10 = (byte) render_logo::logo_idx#3 [phi:render_logo::@7->render_logo::@5#0] -- register_copy 
    // [48] phi (byte) render_logo::screen_idx#10 = (byte) render_logo::screen_idx#4 [phi:render_logo::@7->render_logo::@5#1] -- register_copy 
    jmp __b5
    // render_logo::@3
  __b3:
    // [64] *((const byte*) SCREEN + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx
    sta SCREEN,y
    jmp __b7_1
    // render_logo::@7_1
  __b7_1:
    // [65] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx
    sta SCREEN+$28*1,y
    jmp __b7_2
    // render_logo::@7_2
  __b7_2:
    // [66] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx
    sta SCREEN+$28*2,y
    jmp __b7_3
    // render_logo::@7_3
  __b7_3:
    // [67] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx
    sta SCREEN+$28*3,y
    jmp __b7_4
    // render_logo::@7_4
  __b7_4:
    // [68] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx
    sta SCREEN+$28*4,y
    jmp __b7_5
    // render_logo::@7_5
  __b7_5:
    // [69] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx
    sta SCREEN+$28*5,y
    jmp __b4
    // render_logo::@4
  __b4:
    // [70] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#18 -- vbuz1=_inc_vbuz1 
    inc.z screen_idx
    // [46] phi from render_logo::@4 to render_logo::@2 [phi:render_logo::@4->render_logo::@2]
  __b2_from___b4:
    // [46] phi (byte) render_logo::screen_idx#18 = (byte) render_logo::screen_idx#3 [phi:render_logo::@4->render_logo::@2#0] -- register_copy 
    jmp __b2
    // render_logo::@1
  __b1:
    // [71] (signed byte) render_logo::logo_idx#1 ← - (signed byte) render_logo::x_char#0 -- vbsz1=_neg_vbsz2 
    lda.z x_char
    eor #$ff
    clc
    adc #1
    sta.z logo_idx
    // [72] (byte) render_logo::logo_idx#14 ← (byte)(signed byte) render_logo::logo_idx#1 -- vbuz1=vbuz2 
    lda.z logo_idx
    sta.z logo_idx_2
    // [73] phi from render_logo::@1 to render_logo::@8 [phi:render_logo::@1->render_logo::@8]
  __b8_from___b1:
    // [73] phi (byte) render_logo::screen_idx#21 = (byte) 0 [phi:render_logo::@1->render_logo::@8#0] -- vbuz1=vbuc1 
    lda #0
    sta.z screen_idx_1
    // [73] phi (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#14 [phi:render_logo::@1->render_logo::@8#1] -- register_copy 
    jmp __b8
    // render_logo::@8
  __b8:
    // [74] if((byte) render_logo::logo_idx#11!=(byte) $28) goto render_logo::@9 -- vbuz1_neq_vbuc1_then_la1 
    lda #$28
    cmp.z logo_idx_2
    bne __b9
    // [75] phi from render_logo::@13 render_logo::@8 to render_logo::@11 [phi:render_logo::@13/render_logo::@8->render_logo::@11]
  __b11_from___b13:
  __b11_from___b8:
    // [75] phi (byte) render_logo::screen_idx#15 = (byte) render_logo::screen_idx#6 [phi:render_logo::@13/render_logo::@8->render_logo::@11#0] -- register_copy 
    jmp __b11
    // render_logo::@11
  __b11:
    // [76] if((byte) render_logo::screen_idx#15!=(byte) $28) goto render_logo::@12 -- vbuz1_neq_vbuc1_then_la1 
    lda #$28
    cmp.z screen_idx_1
    bne __b12
    jmp __breturn
    // render_logo::@12
  __b12:
    // [77] *((const byte*) SCREEN + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx_1
    sta SCREEN,y
    jmp __b32_1
    // render_logo::@32_1
  __b32_1:
    // [78] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx_1
    sta SCREEN+$28*1,y
    jmp __b32_2
    // render_logo::@32_2
  __b32_2:
    // [79] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx_1
    sta SCREEN+$28*2,y
    jmp __b32_3
    // render_logo::@32_3
  __b32_3:
    // [80] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx_1
    sta SCREEN+$28*3,y
    jmp __b32_4
    // render_logo::@32_4
  __b32_4:
    // [81] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx_1
    sta SCREEN+$28*4,y
    jmp __b32_5
    // render_logo::@32_5
  __b32_5:
    // [82] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    lda #0
    ldy.z screen_idx_1
    sta SCREEN+$28*5,y
    jmp __b13
    // render_logo::@13
  __b13:
    // [83] (byte) render_logo::screen_idx#6 ← ++ (byte) render_logo::screen_idx#15 -- vbuz1=_inc_vbuz1 
    inc.z screen_idx_1
    jmp __b11_from___b13
    // render_logo::@9
  __b9:
    // [84] *((const byte*) SCREEN + (byte) render_logo::screen_idx#21) ← (byte) render_logo::logo_idx#11 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z logo_idx_2
    ldy.z screen_idx_1
    sta SCREEN,y
    jmp __b24_1
    // render_logo::@24_1
  __b24_1:
    // [85] (byte~) render_logo::$73 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 1 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_2
    axs #-[$28*1]
    stx.z __73
    // [86] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$73 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __73
    ldy.z screen_idx_1
    sta SCREEN+$28*1,y
    jmp __b24_2
    // render_logo::@24_2
  __b24_2:
    // [87] (byte~) render_logo::$76 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 2 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_2
    axs #-[$28*2]
    stx.z __76
    // [88] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$76 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __76
    ldy.z screen_idx_1
    sta SCREEN+$28*2,y
    jmp __b24_3
    // render_logo::@24_3
  __b24_3:
    // [89] (byte~) render_logo::$79 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 3 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_2
    axs #-[$28*3]
    stx.z __79
    // [90] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$79 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __79
    ldy.z screen_idx_1
    sta SCREEN+$28*3,y
    jmp __b24_4
    // render_logo::@24_4
  __b24_4:
    // [91] (byte~) render_logo::$82 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 4 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_2
    axs #-[$28*4]
    stx.z __82
    // [92] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$82 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __82
    ldy.z screen_idx_1
    sta SCREEN+$28*4,y
    jmp __b24_5
    // render_logo::@24_5
  __b24_5:
    // [93] (byte~) render_logo::$85 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 5 -- vbuz1=vbuz2_plus_vbuc1 
    lax.z logo_idx_2
    axs #-[$28*5]
    stx.z __85
    // [94] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$85 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda.z __85
    ldy.z screen_idx_1
    sta SCREEN+$28*5,y
    jmp __b10
    // render_logo::@10
  __b10:
    // [95] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#21 -- vbuz1=_inc_vbuz1 
    inc.z screen_idx_1
    // [96] (byte) render_logo::logo_idx#4 ← ++ (byte) render_logo::logo_idx#11 -- vbuz1=_inc_vbuz1 
    inc.z logo_idx_2
    // [73] phi from render_logo::@10 to render_logo::@8 [phi:render_logo::@10->render_logo::@8]
  __b8_from___b10:
    // [73] phi (byte) render_logo::screen_idx#21 = (byte) render_logo::screen_idx#5 [phi:render_logo::@10->render_logo::@8#0] -- register_copy 
    // [73] phi (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#4 [phi:render_logo::@10->render_logo::@8#1] -- register_copy 
    jmp __b8
}
  // sin16s_gen2
// Generate signed word sinus table - with values in the range min-max.
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen2(signed word* zp($f) sintab)
sin16s_gen2: {
    .const min = -$140
    .const max = $140
    .label ampl = max-min
    .label __6 = $62
    .label __9 = $66
    .label step = $56
    .label sintab = $f
    // u[4.28]
    // Iterate over the table
    .label x = $b
    .label i = 9
    // [98] call div32u16u 
    // [187] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u]
  div32u16u_from_sin16s_gen2:
    jsr div32u16u
    // [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 
    lda.z div32u16u.return
    sta.z div32u16u.return_1
    lda.z div32u16u.return+1
    sta.z div32u16u.return_1+1
    lda.z div32u16u.return+2
    sta.z div32u16u.return_1+2
    lda.z div32u16u.return+3
    sta.z div32u16u.return_1+3
    jmp __b3
    // sin16s_gen2::@3
  __b3:
    // [100] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 -- vduz1=vduz2 
    lda.z div32u16u.return_1
    sta.z step
    lda.z div32u16u.return_1+1
    sta.z step+1
    lda.z div32u16u.return_1+2
    sta.z step+2
    lda.z div32u16u.return_1+3
    sta.z step+3
    // [101] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1]
  __b1_from___b3:
    // [101] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) xsin [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 
    lda #<xsin
    sta.z sintab
    lda #>xsin
    sta.z sintab+1
    // [101] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 
    lda #<0
    sta.z x
    lda #>0
    sta.z x+1
    lda #<0>>$10
    sta.z x+2
    lda #>0>>$10
    sta.z x+3
    // [101] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 
    lda #<0
    sta.z i
    lda #>0
    sta.z i+1
    jmp __b1
  // u[4.28]
    // sin16s_gen2::@1
  __b1:
    // [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z i+1
    cmp #>XSIN_SIZE
    bcc __b2
    bne !+
    lda.z i
    cmp #<XSIN_SIZE
    bcc __b2
  !:
    jmp __breturn
    // sin16s_gen2::@return
  __breturn:
    // [103] return 
    rts
    // sin16s_gen2::@2
  __b2:
    // [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 
    lda.z x
    sta.z sin16s.x
    lda.z x+1
    sta.z sin16s.x+1
    lda.z x+2
    sta.z sin16s.x+2
    lda.z x+3
    sta.z sin16s.x+3
    // [105] call sin16s 
    jsr sin16s
    // [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 
    lda.z sin16s.return_1
    sta.z sin16s.return
    lda.z sin16s.return_1+1
    sta.z sin16s.return+1
    jmp __b4
    // sin16s_gen2::@4
  __b4:
    // [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 
    lda.z sin16s.return
    sta.z mul16s.a
    lda.z sin16s.return+1
    sta.z mul16s.a+1
    // [108] call mul16s 
    jsr mul16s
    // [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 
    lda.z mul16s.return
    sta.z mul16s.return_1
    lda.z mul16s.return+1
    sta.z mul16s.return_1+1
    lda.z mul16s.return+2
    sta.z mul16s.return_1+2
    lda.z mul16s.return+3
    sta.z mul16s.return_1+3
    jmp __b5
    // sin16s_gen2::@5
  __b5:
    // [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 
    lda.z mul16s.return_1
    sta.z __6
    lda.z mul16s.return_1+1
    sta.z __6+1
    lda.z mul16s.return_1+2
    sta.z __6+2
    lda.z mul16s.return_1+3
    sta.z __6+3
    // [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 
    lda.z __6+2
    sta.z __9
    lda.z __6+3
    sta.z __9+1
    // [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 
    ldy #0
    lda.z __9
    sta (sintab),y
    iny
    lda.z __9+1
    sta (sintab),y
    // [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 
    lda #SIZEOF_SIGNED_WORD
    clc
    adc.z sintab
    sta.z sintab
    bcc !+
    inc.z sintab+1
  !:
    // [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 
    lda.z x
    clc
    adc.z step
    sta.z x
    lda.z x+1
    adc.z step+1
    sta.z x+1
    lda.z x+2
    adc.z step+2
    sta.z x+2
    lda.z x+3
    adc.z step+3
    sta.z x+3
    // [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 
    inc.z i
    bne !+
    inc.z i+1
  !:
    // [101] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1]
  __b1_from___b5:
    // [101] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy 
    // [101] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy 
    // [101] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy 
    jmp __b1
}
  // mul16s
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zp($5c) a)
mul16s: {
    .label __9 = $6c
    .label __16 = $6e
    .label m = $11
    .label return = $70
    .label a = $5c
    .label return_1 = $5e
    // [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 -- vwuz1=vwuz2 
    lda.z a
    sta.z mul16u.a
    lda.z a+1
    sta.z mul16u.a+1
    // [117] call mul16u 
    // [127] phi from mul16s to mul16u [phi:mul16s->mul16u]
  mul16u_from_mul16s:
    // [127] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy 
    // [127] phi (word) mul16u::b#2 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 
    lda #<sin16s_gen2.ampl
    sta.z mul16u.b
    lda #>sin16s_gen2.ampl
    sta.z mul16u.b+1
    jsr mul16u
    // [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 
    lda.z mul16u.res
    sta.z mul16u.return
    lda.z mul16u.res+1
    sta.z mul16u.return+1
    lda.z mul16u.res+2
    sta.z mul16u.return+2
    lda.z mul16u.res+3
    sta.z mul16u.return+3
    jmp __b4
    // mul16s::@4
  __b4:
    // [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2 -- vduz1=vduz2 
    lda.z mul16u.return
    sta.z m
    lda.z mul16u.return+1
    sta.z m+1
    lda.z mul16u.return+2
    sta.z m+2
    lda.z mul16u.return+3
    sta.z m+3
    // [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 -- vwsz1_ge_0_then_la1 
    lda.z a+1
    bpl __b1_from___b4
    jmp __b3
    // mul16s::@3
  __b3:
    // [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 -- vwuz1=_hi_vduz2 
    lda.z m+2
    sta.z __9
    lda.z m+3
    sta.z __9+1
    // [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 -- vwuz1=vwuz2_minus_vwuc1 
    lda.z __9
    sec
    sbc #<sin16s_gen2.ampl
    sta.z __16
    lda.z __9+1
    sbc #>sin16s_gen2.ampl
    sta.z __16+1
    // [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 -- vduz1=vduz1_sethi_vwuz2 
    lda.z __16
    sta.z m+2
    lda.z __16+1
    sta.z m+3
    // [124] phi from mul16s::@3 mul16s::@4 to mul16s::@1 [phi:mul16s::@3/mul16s::@4->mul16s::@1]
  __b1_from___b3:
  __b1_from___b4:
    // [124] phi (dword) mul16s::m#4 = (dword) mul16s::m#1 [phi:mul16s::@3/mul16s::@4->mul16s::@1#0] -- register_copy 
    jmp __b1
    // mul16s::@1
  __b1:
    jmp __b2
    // mul16s::@2
  __b2:
    // [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 -- vdsz1=vdsz2 
    lda.z m
    sta.z return
    lda.z m+1
    sta.z return+1
    lda.z m+2
    sta.z return+2
    lda.z m+3
    sta.z return+3
    jmp __breturn
    // mul16s::@return
  __breturn:
    // [126] return 
    rts
}
  // mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zp($17) a, word zp($15) b)
mul16u: {
    .label __1 = $74
    .label mb = $1d
    .label a = $17
    .label res = $19
    .label return = $68
    .label b = $15
    .label return_1 = $95
    // [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 
    lda.z b
    sta.z mb
    lda.z b+1
    sta.z mb+1
    lda #0
    sta.z mb+2
    sta.z mb+3
    // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
  __b1_from_mul16u:
    // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy 
    // [129] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 
    lda #<0
    sta.z res
    lda #>0
    sta.z res+1
    lda #<0>>$10
    sta.z res+2
    lda #>0>>$10
    sta.z res+3
    // [129] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy 
    jmp __b1
    // mul16u::@1
  __b1:
    // [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 
    lda.z a
    bne __b2
    lda.z a+1
    bne __b2
    jmp __breturn
    // mul16u::@return
  __breturn:
    // [131] return 
    rts
    // mul16u::@2
  __b2:
    // [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuz1=vwuz2_band_vbuc1 
    lda #1
    and.z a
    sta.z __1
    // [133] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuz1_eq_0_then_la1 
    lda.z __1
    cmp #0
    beq __b3_from___b2
    jmp __b4
    // mul16u::@4
  __b4:
    // [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 
    lda.z res
    clc
    adc.z mb
    sta.z res
    lda.z res+1
    adc.z mb+1
    sta.z res+1
    lda.z res+2
    adc.z mb+2
    sta.z res+2
    lda.z res+3
    adc.z mb+3
    sta.z res+3
    // [135] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3]
  __b3_from___b2:
  __b3_from___b4:
    // [135] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy 
    jmp __b3
    // mul16u::@3
  __b3:
    // [136] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z a+1
    ror.z a
    // [137] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 
    asl.z mb
    rol.z mb+1
    rol.z mb+2
    rol.z mb+3
    // [129] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1]
  __b1_from___b3:
    // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy 
    // [129] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy 
    // [129] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy 
    jmp __b1
}
  // 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 zp($22) x)
sin16s: {
    .label __4 = $75
    .label x = $22
    .label return = $5a
    .label x1 = $79
    .label x2 = $7d
    .label x3 = $81
    .label x3_6 = $85
    .label usinx = $87
    .label x4 = $8b
    .label x5 = $8f
    .label x5_128 = $91
    .label usinx_1 = $93
    .label return_1 = $26
    .label sinx = $26
    // Move x1 into the range 0-PI/2 using sinus mirror symmetries
    .label isUpper = $21
    // [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 
    lda.z x+3
    cmp #>PI_u4f28>>$10
    bcc __b1_from_sin16s
    bne !+
    lda.z x+2
    cmp #<PI_u4f28>>$10
    bcc __b1_from_sin16s
    bne !+
    lda.z x+1
    cmp #>PI_u4f28
    bcc __b1_from_sin16s
    bne !+
    lda.z x
    cmp #<PI_u4f28
    bcc __b1_from_sin16s
  !:
    jmp __b4
    // sin16s::@4
  __b4:
    // [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 
    lda.z x
    sec
    sbc #<PI_u4f28
    sta.z x
    lda.z x+1
    sbc #>PI_u4f28
    sta.z x+1
    lda.z x+2
    sbc #<PI_u4f28>>$10
    sta.z x+2
    lda.z x+3
    sbc #>PI_u4f28>>$10
    sta.z x+3
    // [140] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
  __b1_from___b4:
    // [140] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #1
    sta.z isUpper
    // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy 
    jmp __b1
    // [140] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
  __b1_from_sin16s:
    // [140] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z isUpper
    // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy 
    jmp __b1
    // sin16s::@1
  __b1:
    // [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 
    lda.z x+3
    cmp #>PI_HALF_u4f28>>$10
    bcc __b2_from___b1
    bne !+
    lda.z x+2
    cmp #<PI_HALF_u4f28>>$10
    bcc __b2_from___b1
    bne !+
    lda.z x+1
    cmp #>PI_HALF_u4f28
    bcc __b2_from___b1
    bne !+
    lda.z x
    cmp #<PI_HALF_u4f28
    bcc __b2_from___b1
  !:
    jmp __b5
    // sin16s::@5
  __b5:
    // [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 
    lda #<PI_u4f28
    sec
    sbc.z x
    sta.z x
    lda #>PI_u4f28
    sbc.z x+1
    sta.z x+1
    lda #<PI_u4f28>>$10
    sbc.z x+2
    sta.z x+2
    lda #>PI_u4f28>>$10
    sbc.z x+3
    sta.z x+3
    // [143] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2]
  __b2_from___b1:
  __b2_from___b5:
    // [143] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy 
    jmp __b2
    // sin16s::@2
  __b2:
    // [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 
    lda.z x
    asl
    sta.z __4
    lda.z x+1
    rol
    sta.z __4+1
    lda.z x+2
    rol
    sta.z __4+2
    lda.z x+3
    rol
    sta.z __4+3
    asl.z __4
    rol.z __4+1
    rol.z __4+2
    rol.z __4+3
    asl.z __4
    rol.z __4+1
    rol.z __4+2
    rol.z __4+3
    // [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 
    lda.z __4+2
    sta.z x1
    lda.z __4+3
    sta.z x1+1
    // [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v1
    lda.z x1+1
    sta.z mulu16_sel.v1+1
    // [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [148] call mulu16_sel 
    // [178] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel]
  mulu16_sel_from___b2:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #0
    sta.z mulu16_sel.select
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return_5
    sta.z mulu16_sel.return
    lda.z mulu16_sel.return_5+1
    sta.z mulu16_sel.return+1
    jmp __b7
    // sin16s::@7
  __b7:
    // [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return
    sta.z x2
    lda.z mulu16_sel.return+1
    sta.z x2+1
    // [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 
    lda.z x2
    sta.z mulu16_sel.v1
    lda.z x2+1
    sta.z mulu16_sel.v1+1
    // [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [153] call mulu16_sel 
    // [178] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel]
  mulu16_sel_from___b7:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #1
    sta.z mulu16_sel.select
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return_5
    sta.z mulu16_sel.return_1
    lda.z mulu16_sel.return_5+1
    sta.z mulu16_sel.return_1+1
    jmp __b8
    // sin16s::@8
  __b8:
    // [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return_1
    sta.z x3
    lda.z mulu16_sel.return_1+1
    sta.z x3+1
    // [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 
    lda.z x3
    sta.z mulu16_sel.v1
    lda.z x3+1
    sta.z mulu16_sel.v1+1
    // [157] call mulu16_sel 
    // [178] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel]
  mulu16_sel_from___b8:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #1
    sta.z mulu16_sel.select
    // [178] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 
    lda #<$10000/6
    sta.z mulu16_sel.v2
    lda #>$10000/6
    sta.z mulu16_sel.v2+1
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return_5
    sta.z mulu16_sel.return_2
    lda.z mulu16_sel.return_5+1
    sta.z mulu16_sel.return_2+1
    jmp __b9
    // sin16s::@9
  __b9:
    // [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return_2
    sta.z x3_6
    lda.z mulu16_sel.return_2+1
    sta.z x3_6+1
    // [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 
    lda.z x1
    sec
    sbc.z x3_6
    sta.z usinx
    lda.z x1+1
    sbc.z x3_6+1
    sta.z usinx+1
    // [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 
    lda.z x3
    sta.z mulu16_sel.v1
    lda.z x3+1
    sta.z mulu16_sel.v1+1
    // [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [163] call mulu16_sel 
    // [178] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel]
  mulu16_sel_from___b9:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #0
    sta.z mulu16_sel.select
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return_5
    sta.z mulu16_sel.return_3
    lda.z mulu16_sel.return_5+1
    sta.z mulu16_sel.return_3+1
    jmp __b10
    // sin16s::@10
  __b10:
    // [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return_3
    sta.z x4
    lda.z mulu16_sel.return_3+1
    sta.z x4+1
    // [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 
    lda.z x4
    sta.z mulu16_sel.v1
    lda.z x4+1
    sta.z mulu16_sel.v1+1
    // [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [168] call mulu16_sel 
    // [178] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel]
  mulu16_sel_from___b10:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #0
    sta.z mulu16_sel.select
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return_5
    sta.z mulu16_sel.return_4
    lda.z mulu16_sel.return_5+1
    sta.z mulu16_sel.return_4+1
    jmp __b11
    // sin16s::@11
  __b11:
    // [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return_4
    sta.z x5
    lda.z mulu16_sel.return_4+1
    sta.z x5+1
    // [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz2_ror_4 
    lda.z x5+1
    lsr
    sta.z x5_128+1
    lda.z x5
    ror
    sta.z x5_128
    lsr.z x5_128+1
    ror.z x5_128
    lsr.z x5_128+1
    ror.z x5_128
    lsr.z x5_128+1
    ror.z x5_128
    // [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 
    lda.z usinx
    clc
    adc.z x5_128
    sta.z usinx_1
    lda.z usinx+1
    adc.z x5_128+1
    sta.z usinx_1+1
    // [173] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1 
    lda.z isUpper
    cmp #0
    beq __b12
    jmp __b6
    // sin16s::@6
  __b6:
    // [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 
    sec
    lda #0
    sbc.z usinx_1
    sta.z sinx
    lda #0
    sbc.z usinx_1+1
    sta.z sinx+1
    // [175] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3]
  __b3_from___b12:
  __b3_from___b6:
    // [175] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy 
    jmp __b3
    // sin16s::@3
  __b3:
    jmp __breturn
    // sin16s::@return
  __breturn:
    // [176] return 
    rts
    // sin16s::@12
  __b12:
    // [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 
    lda.z usinx_1
    sta.z return_1
    lda.z usinx_1+1
    sta.z return_1+1
    jmp __b3_from___b12
}
  // 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 zp($28) v1, word zp($2a) v2, byte zp($2c) select)
mulu16_sel: {
    .label __0 = $99
    .label __1 = $9d
    .label v1 = $28
    .label v2 = $2a
    .label return = $7b
    .label return_1 = $7f
    .label return_2 = $83
    .label return_3 = $89
    .label return_4 = $8d
    .label select = $2c
    .label return_5 = $a1
    // [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 
    lda.z v1
    sta.z mul16u.a
    lda.z v1+1
    sta.z mul16u.a+1
    // [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 
    lda.z v2
    sta.z mul16u.b
    lda.z v2+1
    sta.z mul16u.b+1
    // [181] call mul16u 
    // [127] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u]
  mul16u_from_mulu16_sel:
    // [127] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy 
    // [127] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy 
    jsr mul16u
    // [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 
    lda.z mul16u.res
    sta.z mul16u.return_1
    lda.z mul16u.res+1
    sta.z mul16u.return_1+1
    lda.z mul16u.res+2
    sta.z mul16u.return_1+2
    lda.z mul16u.res+3
    sta.z mul16u.return_1+3
    jmp __b1
    // mulu16_sel::@1
  __b1:
    // [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 
    lda.z mul16u.return_1
    sta.z __0
    lda.z mul16u.return_1+1
    sta.z __0+1
    lda.z mul16u.return_1+2
    sta.z __0+2
    lda.z mul16u.return_1+3
    sta.z __0+3
    // [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 
    lda.z __0
    sta.z __1
    lda.z __0+1
    sta.z __1+1
    lda.z __0+2
    sta.z __1+2
    lda.z __0+3
    sta.z __1+3
    ldx.z select
    beq !e+
  !:
    asl.z __1
    rol.z __1+1
    rol.z __1+2
    rol.z __1+3
    dex
    bne !-
  !e:
    // [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 
    lda.z __1+2
    sta.z return_5
    lda.z __1+3
    sta.z return_5+1
    jmp __breturn
    // mulu16_sel::@return
  __breturn:
    // [186] return 
    rts
}
  // 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 = $a5
    .label quotient_lo = $a9
    .label return = $ab
    .label return_1 = $52
    // [188] call divr16u 
    // [197] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
  divr16u_from_div32u16u:
    // [197] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28>>$10
    sta.z divr16u.dividend
    lda #>PI2_u4f28>>$10
    sta.z divr16u.dividend+1
    // [197] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 
    lda #<0
    sta.z divr16u.rem
    lda #>0
    sta.z divr16u.rem+1
    jsr divr16u
    // [189] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 
    lda.z divr16u.return
    sta.z divr16u.return_1
    lda.z divr16u.return+1
    sta.z divr16u.return_1+1
    jmp __b1
    // div32u16u::@1
  __b1:
    // [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 
    lda.z divr16u.return_1
    sta.z quotient_hi
    lda.z divr16u.return_1+1
    sta.z quotient_hi+1
    // [191] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 
    lda.z rem16u
    sta.z divr16u.rem
    lda.z rem16u+1
    sta.z divr16u.rem+1
    // [192] call divr16u 
    // [197] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u]
  divr16u_from___b1:
    // [197] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28&$ffff
    sta.z divr16u.dividend
    lda #>PI2_u4f28&$ffff
    sta.z divr16u.dividend+1
    // [197] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy 
    jsr divr16u
    // [193] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 
    lda.z divr16u.return
    sta.z divr16u.return_2
    lda.z divr16u.return+1
    sta.z divr16u.return_2+1
    jmp __b2
    // div32u16u::@2
  __b2:
    // [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 
    lda.z divr16u.return_2
    sta.z quotient_lo
    lda.z divr16u.return_2+1
    sta.z quotient_lo+1
    // [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 
    lda.z quotient_hi
    sta.z return+2
    lda.z quotient_hi+1
    sta.z return+3
    lda.z quotient_lo
    sta.z return
    lda.z quotient_lo+1
    sta.z return+1
    jmp __breturn
    // div32u16u::@return
  __breturn:
    // [196] return 
    rts
}
  // 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 zp($2f) dividend, word zp($2d) rem)
divr16u: {
    .label __1 = $af
    .label __2 = $b0
    .label rem = $2d
    .label dividend = $2f
    .label quotient = $31
    .label i = $33
    .label return = $31
    .label return_1 = $a3
    .label return_2 = $a7
    // [198] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
  __b1_from_divr16u:
    // [198] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z i
    // [198] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z quotient
    lda #>0
    sta.z quotient+1
    // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy 
    // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy 
    jmp __b1
    // [198] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
  __b1_from___b3:
    // [198] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
    // [198] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
    // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
    // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
    jmp __b1
    // divr16u::@1
  __b1:
    // [199] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z rem
    rol.z rem+1
    // [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 
    lda.z dividend+1
    sta.z __1
    // [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuz1=vbuz2_band_vbuc1 
    lda #$80
    and.z __1
    sta.z __2
    // [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 
    lda.z __2
    cmp #0
    beq __b2_from___b1
    jmp __b4
    // divr16u::@4
  __b4:
    // [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora.z rem
    sta.z rem
    // [204] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
  __b2_from___b1:
  __b2_from___b4:
    // [204] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
    jmp __b2
    // divr16u::@2
  __b2:
    // [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z dividend
    rol.z dividend+1
    // [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z quotient
    rol.z quotient+1
    // [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 
    lda.z rem+1
    cmp #>XSIN_SIZE
    bcc __b3_from___b2
    bne !+
    lda.z rem
    cmp #<XSIN_SIZE
    bcc __b3_from___b2
  !:
    jmp __b5
    // divr16u::@5
  __b5:
    // [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc.z quotient
    bne !+
    inc.z quotient+1
  !:
    // [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 
    lda.z rem
    sec
    sbc #<XSIN_SIZE
    sta.z rem
    lda.z rem+1
    sbc #>XSIN_SIZE
    sta.z rem+1
    // [210] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
  __b3_from___b2:
  __b3_from___b5:
    // [210] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
    // [210] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
    jmp __b3
    // divr16u::@3
  __b3:
    // [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 
    inc.z i
    // [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$10
    cmp.z i
    bne __b1_from___b3
    jmp __b6
    // divr16u::@6
  __b6:
    // [213] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 
    lda.z rem
    sta.z rem16u
    lda.z rem+1
    sta.z rem16u+1
    jmp __breturn
    // divr16u::@return
  __breturn:
    // [214] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zp($34) str, byte zp($36) c)
memset: {
    .label end = $b3
    .label dst = $37
    .label str = $34
    .label c = $36
    jmp __b1
    // memset::@1
  __b1:
    // [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 
    lda.z str
    clc
    adc #<$3e8
    sta.z end
    lda.z str+1
    adc #>$3e8
    sta.z end+1
    // [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 -- pbuz1=pbuz2 
    lda.z str
    sta.z dst
    lda.z str+1
    sta.z dst+1
    // [218] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
  __b2_from___b1:
  __b2_from___b3:
    // [218] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy 
    jmp __b2
    // memset::@2
  __b2:
    // [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 
    lda.z dst+1
    cmp.z end+1
    bne __b3
    lda.z dst
    cmp.z end
    bne __b3
    jmp __breturn
    // memset::@return
  __breturn:
    // [220] return 
    rts
    // memset::@3
  __b3:
    // [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuz2 
    lda.z c
    ldy #0
    sta (dst),y
    // [222] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp __b2_from___b3
}
  // File Data
  .align $100
  xsin: .fill 2*XSIN_SIZE, 0
.pc = LOGO "LOGO"
  .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
    .for (var y=0; y<6	; y++)
        .for (var x=0;x<40; x++)
            .for(var cp=0; cp<8; cp++)
                .byte logoPic.getMulticolorByte(x,cp+y*8)


REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] *((const byte*) BORDERCOL) ← (const byte) WHITE [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [7] *((const byte*) BGCOL2) ← (const byte) DARK_GREY [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [8] *((const byte*) BGCOL) ← *((const byte*) BGCOL2) [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) BGCOL3) ← (const byte) BLACK [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) D016) ← (const byte) VIC_MCM [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [27] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@2 [ xsin_idx#11 ] ( main:3::loop:23 [ xsin_idx#11 ] ) always clobbers reg byte a 
Statement [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 [ xsin_idx#11 loop::$7 ] ( main:3::loop:23 [ xsin_idx#11 loop::$7 ] ) always clobbers reg byte a 
Statement [30] (signed word*~) loop::$2 ← (const signed word*) xsin + (word~) loop::$7 [ xsin_idx#11 loop::$2 ] ( main:3::loop:23 [ xsin_idx#11 loop::$2 ] ) always clobbers reg byte a 
Statement [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) [ xsin_idx#11 loop::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 loop::xpos#0 ] ) always clobbers reg byte a reg byte y 
Statement [32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0 [ xsin_idx#11 render_logo::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 render_logo::xpos#0 ] ) always clobbers reg byte a 
Statement [35] if((word) xsin_idx#3!=(const word) XSIN_SIZE) goto loop::@6 [ xsin_idx#3 ] ( main:3::loop:23 [ xsin_idx#3 ] ) always clobbers reg byte a 
Statement [39] (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#0 [ render_logo::xpos#0 render_logo::$0 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::$0 ] ) always clobbers reg byte a 
Statement [41] (byte~) render_logo::$2 ← (const byte) VIC_MCM | (byte~) render_logo::$1 [ render_logo::xpos#0 render_logo::$2 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::$2 ] ) always clobbers reg byte a 
Statement [43] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte) 3 [ render_logo::xpos#0 render_logo::$3 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::$3 ] ) always clobbers reg byte a 
Statement [44] (signed byte) render_logo::x_char#0 ← (signed byte)(signed word~) render_logo::$3 [ render_logo::xpos#0 render_logo::x_char#0 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::x_char#0 ] ) always clobbers reg byte a 
Statement [45] if((signed word) render_logo::xpos#0<(signed byte) 0) goto render_logo::@1 [ render_logo::x_char#0 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:70 [ render_logo::x_char#0 ]
Statement [64] *((const byte*) SCREEN + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
Statement [65] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [66] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [67] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [68] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [69] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [71] (signed byte) render_logo::logo_idx#1 ← - (signed byte) render_logo::x_char#0 [ render_logo::logo_idx#1 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::logo_idx#1 ] ) always clobbers reg byte a 
Statement [77] *((const byte*) SCREEN + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
Statement [78] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [79] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [80] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [81] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [82] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:21 [ div32u16u::return#2 ] ) always clobbers reg byte a 
Statement [100] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 ] ) always clobbers reg byte a 
Statement [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a 
Statement [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a 
Statement [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ) always clobbers reg byte a 
Statement [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a 
Statement [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a 
Statement [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a 
Statement [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y 
Statement [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a 
Statement [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a 
Statement [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a 
Statement [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a 
Statement [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a 
Statement [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 ] ) always clobbers reg byte a 
Statement [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a 
Statement [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a 
Statement [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a 
Statement [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a 
Statement [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:33 [ sin16s::isUpper#2 ]
Removing always clobbered register reg byte a as potential for zp[1]:44 [ mulu16_sel::select#5 ]
Statement [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a 
Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a 
Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a 
Statement [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a 
Statement [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a 
Statement [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a 
Statement [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a 
Statement [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a 
Statement [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a 
Statement [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a 
Statement [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a 
Statement [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a 
Statement [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a 
Statement [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a 
Statement [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a 
Statement [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a 
Statement [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a 
Statement [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a 
Statement [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a 
Statement [160] (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:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a 
Statement [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a 
Statement [162] (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:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a 
Statement [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a 
Statement [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a 
Statement [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a 
Statement [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a 
Statement [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a 
Statement [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a 
Statement [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a 
Statement [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a 
Statement [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a 
Statement [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a 
Statement [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a 
Statement [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a 
Statement [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a 
Statement [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a 
Statement [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a 
Statement [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a 
Statement [189] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a 
Statement [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [191] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a 
Statement [193] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a 
Statement [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a 
Statement [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::return#0 ] ) always clobbers reg byte a 
Statement [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ 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[1]:51 [ divr16u::i#2 divr16u::i#1 ]
Statement [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a 
Statement [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a 
Statement [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a 
Statement [213] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::memset:13 [ memset::str#3 memset::c#4 memset::end#0 ] main:3::memset:15 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:54 [ memset::c#4 ]
Statement [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#4 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a 
Statement [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a 
Statement [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:54 [ memset::c#4 ]
Statement [6] *((const byte*) BORDERCOL) ← (const byte) WHITE [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [7] *((const byte*) BGCOL2) ← (const byte) DARK_GREY [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [8] *((const byte*) BGCOL) ← *((const byte*) BGCOL2) [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) BGCOL3) ← (const byte) BLACK [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) D016) ← (const byte) VIC_MCM [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [27] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@2 [ xsin_idx#11 ] ( main:3::loop:23 [ xsin_idx#11 ] ) always clobbers reg byte a 
Statement [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 [ xsin_idx#11 loop::$7 ] ( main:3::loop:23 [ xsin_idx#11 loop::$7 ] ) always clobbers reg byte a 
Statement [30] (signed word*~) loop::$2 ← (const signed word*) xsin + (word~) loop::$7 [ xsin_idx#11 loop::$2 ] ( main:3::loop:23 [ xsin_idx#11 loop::$2 ] ) always clobbers reg byte a 
Statement [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) [ xsin_idx#11 loop::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 loop::xpos#0 ] ) always clobbers reg byte a reg byte y 
Statement [32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0 [ xsin_idx#11 render_logo::xpos#0 ] ( main:3::loop:23 [ xsin_idx#11 render_logo::xpos#0 ] ) always clobbers reg byte a 
Statement [35] if((word) xsin_idx#3!=(const word) XSIN_SIZE) goto loop::@6 [ xsin_idx#3 ] ( main:3::loop:23 [ xsin_idx#3 ] ) always clobbers reg byte a 
Statement [39] (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#0 [ render_logo::xpos#0 render_logo::$0 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::$0 ] ) always clobbers reg byte a 
Statement [41] (byte~) render_logo::$2 ← (const byte) VIC_MCM | (byte~) render_logo::$1 [ render_logo::xpos#0 render_logo::$2 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::$2 ] ) always clobbers reg byte a 
Statement [43] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte) 3 [ render_logo::xpos#0 render_logo::$3 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::$3 ] ) always clobbers reg byte a 
Statement [44] (signed byte) render_logo::x_char#0 ← (signed byte)(signed word~) render_logo::$3 [ render_logo::xpos#0 render_logo::x_char#0 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::xpos#0 render_logo::x_char#0 ] ) always clobbers reg byte a 
Statement [45] if((signed word) render_logo::xpos#0<(signed byte) 0) goto render_logo::@1 [ render_logo::x_char#0 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 ] ) always clobbers reg byte a 
Statement [64] *((const byte*) SCREEN + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [65] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [66] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [67] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [68] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [69] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#18) ← (byte) 0 [ render_logo::x_char#0 render_logo::screen_idx#18 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#18 ] ) always clobbers reg byte a 
Statement [71] (signed byte) render_logo::logo_idx#1 ← - (signed byte) render_logo::x_char#0 [ render_logo::logo_idx#1 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::logo_idx#1 ] ) always clobbers reg byte a 
Statement [77] *((const byte*) SCREEN + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [78] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [79] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [80] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [81] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [82] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#15) ← (byte) 0 [ render_logo::screen_idx#15 ] ( main:3::loop:23::render_logo:33 [ xsin_idx#11 render_logo::screen_idx#15 ] ) always clobbers reg byte a 
Statement [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:21 [ div32u16u::return#2 ] ) always clobbers reg byte a 
Statement [100] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 ] ) always clobbers reg byte a 
Statement [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE) goto sin16s_gen2::@2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a 
Statement [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#0 ] ) always clobbers reg byte a 
Statement [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 ] ) always clobbers reg byte a 
Statement [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#2 ] ) always clobbers reg byte a 
Statement [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$6 ] ) always clobbers reg byte a 
Statement [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::$9 ] ) always clobbers reg byte a 
Statement [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 ] ) always clobbers reg byte a reg byte y 
Statement [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a 
Statement [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#1 sin16s_gen2::sintab#0 ] ) always clobbers reg byte a 
Statement [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#1 ] ) always clobbers reg byte a 
Statement [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a 
Statement [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a 
Statement [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 ] ) always clobbers reg byte a 
Statement [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$9 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$9 ] ) always clobbers reg byte a 
Statement [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a 
Statement [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::m#1 ] ) always clobbers reg byte a 
Statement [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:108 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::return#0 ] ) always clobbers reg byte a 
Statement [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a 
Statement [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ) always clobbers reg byte a 
Statement [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ) always clobbers reg byte a 
Statement [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 [ mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ( main:3::sin16s_gen2:21::mul16s:108::mul16u:117 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168::mul16u:181 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] ) always clobbers reg byte a 
Statement [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a 
Statement [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a 
Statement [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a 
Statement [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a 
Statement [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a 
Statement [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a 
Statement [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a 
Statement [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a 
Statement [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a 
Statement [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a 
Statement [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a 
Statement [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a 
Statement [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a 
Statement [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a 
Statement [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a 
Statement [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a 
Statement [160] (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:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a 
Statement [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a 
Statement [162] (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:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a 
Statement [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a 
Statement [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a 
Statement [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a 
Statement [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a 
Statement [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 [ sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a 
Statement [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a 
Statement [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a 
Statement [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 [ sin16s::isUpper#2 sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a 
Statement [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::sinx#1 ] ) always clobbers reg byte a 
Statement [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:105 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::return#5 ] ) always clobbers reg byte a 
Statement [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 [ mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a 
Statement [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 [ mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a 
Statement [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a 
Statement [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a 
Statement [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a 
Statement [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:148 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:153 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:157 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:163 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:105::mulu16_sel:168 [ sin16s_gen2::step#0 sin16s_gen2::i#2 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a 
Statement [189] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a 
Statement [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [191] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a 
Statement [193] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a 
Statement [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a 
Statement [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:98 [ div32u16u::return#0 ] ) always clobbers reg byte a 
Statement [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a 
Statement [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a 
Statement [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a 
Statement [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a 
Statement [213] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:98::divr16u:188 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:98::divr16u:192 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 [ memset::str#3 memset::c#4 memset::end#0 ] ( main:3::memset:13 [ memset::str#3 memset::c#4 memset::end#0 ] main:3::memset:15 [ memset::str#3 memset::c#4 memset::end#0 ] ) always clobbers reg byte a 
Statement [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3 [ memset::c#4 memset::end#0 memset::dst#4 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#4 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#4 ] ) always clobbers reg byte a 
Statement [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a 
Statement [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 [ memset::c#4 memset::end#0 memset::dst#2 ] ( main:3::memset:13 [ memset::c#4 memset::end#0 memset::dst#2 ] main:3::memset:15 [ memset::c#4 memset::end#0 memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Potential registers zp[1]:2 [ main::ch#2 main::ch#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] : zp[2]:3 , 
Potential registers zp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] : zp[1]:5 , reg byte x , reg byte y , 
Potential registers zp[1]:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] : zp[1]:8 , reg byte x , reg byte y , 
Potential registers zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp[2]:9 , 
Potential registers zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp[4]:11 , 
Potential registers zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp[2]:15 , 
Potential registers zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] : zp[4]:17 , 
Potential registers zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] : zp[2]:21 , 
Potential registers zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] : zp[2]:23 , 
Potential registers zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp[4]:25 , 
Potential registers zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp[4]:29 , 
Potential registers zp[1]:33 [ sin16s::isUpper#2 ] : zp[1]:33 , reg byte x , reg byte y , 
Potential registers zp[4]:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp[4]:34 , 
Potential registers zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp[2]:38 , 
Potential registers zp[2]:40 [ 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[2]:40 , 
Potential registers zp[2]:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] : zp[2]:42 , 
Potential registers zp[1]:44 [ mulu16_sel::select#5 ] : zp[1]:44 , reg byte x , reg byte y , 
Potential registers zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp[2]:45 , 
Potential registers zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp[2]:47 , 
Potential registers zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp[2]:49 , 
Potential registers zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] : zp[1]:51 , reg byte x , reg byte y , 
Potential registers zp[2]:52 [ memset::str#3 ] : zp[2]:52 , 
Potential registers zp[1]:54 [ memset::c#4 ] : zp[1]:54 , reg byte x , 
Potential registers zp[2]:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:55 , 
Potential registers zp[2]:57 [ loop::$7 ] : zp[2]:57 , 
Potential registers zp[2]:59 [ loop::$2 ] : zp[2]:59 , 
Potential registers zp[2]:61 [ loop::xpos#0 ] : zp[2]:61 , 
Potential registers zp[2]:63 [ render_logo::xpos#0 ] : zp[2]:63 , 
Potential registers zp[1]:65 [ render_logo::$0 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:66 [ render_logo::$1 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:67 [ render_logo::$2 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:68 [ render_logo::$3 ] : zp[2]:68 , 
Potential registers zp[1]:70 [ render_logo::x_char#0 ] : zp[1]:70 , reg byte x , reg byte y , 
Potential registers zp[1]:71 [ render_logo::$33 ] : zp[1]:71 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:72 [ render_logo::$36 ] : zp[1]:72 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:73 [ render_logo::$39 ] : zp[1]:73 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:74 [ render_logo::$42 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:75 [ render_logo::$45 ] : zp[1]:75 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:76 [ render_logo::logo_idx#1 ] : zp[1]:76 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:77 [ render_logo::$73 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:78 [ render_logo::$76 ] : zp[1]:78 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:79 [ render_logo::$79 ] : zp[1]:79 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:80 [ render_logo::$82 ] : zp[1]:80 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:81 [ render_logo::$85 ] : zp[1]:81 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[4]:82 [ div32u16u::return#2 ] : zp[4]:82 , 
Potential registers zp[4]:86 [ sin16s_gen2::step#0 ] : zp[4]:86 , 
Potential registers zp[2]:90 [ sin16s::return#0 ] : zp[2]:90 , 
Potential registers zp[2]:92 [ mul16s::a#0 ] : zp[2]:92 , 
Potential registers zp[4]:94 [ mul16s::return#2 ] : zp[4]:94 , 
Potential registers zp[4]:98 [ sin16s_gen2::$6 ] : zp[4]:98 , 
Potential registers zp[2]:102 [ sin16s_gen2::$9 ] : zp[2]:102 , 
Potential registers zp[4]:104 [ mul16u::return#2 ] : zp[4]:104 , 
Potential registers zp[2]:108 [ mul16s::$9 ] : zp[2]:108 , 
Potential registers zp[2]:110 [ mul16s::$16 ] : zp[2]:110 , 
Potential registers zp[4]:112 [ mul16s::return#0 ] : zp[4]:112 , 
Potential registers zp[1]:116 [ mul16u::$1 ] : zp[1]:116 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[4]:117 [ sin16s::$4 ] : zp[4]:117 , 
Potential registers zp[2]:121 [ sin16s::x1#0 ] : zp[2]:121 , 
Potential registers zp[2]:123 [ mulu16_sel::return#0 ] : zp[2]:123 , 
Potential registers zp[2]:125 [ sin16s::x2#0 ] : zp[2]:125 , 
Potential registers zp[2]:127 [ mulu16_sel::return#1 ] : zp[2]:127 , 
Potential registers zp[2]:129 [ sin16s::x3#0 ] : zp[2]:129 , 
Potential registers zp[2]:131 [ mulu16_sel::return#2 ] : zp[2]:131 , 
Potential registers zp[2]:133 [ sin16s::x3_6#0 ] : zp[2]:133 , 
Potential registers zp[2]:135 [ sin16s::usinx#0 ] : zp[2]:135 , 
Potential registers zp[2]:137 [ mulu16_sel::return#10 ] : zp[2]:137 , 
Potential registers zp[2]:139 [ sin16s::x4#0 ] : zp[2]:139 , 
Potential registers zp[2]:141 [ mulu16_sel::return#11 ] : zp[2]:141 , 
Potential registers zp[2]:143 [ sin16s::x5#0 ] : zp[2]:143 , 
Potential registers zp[2]:145 [ sin16s::x5_128#0 ] : zp[2]:145 , 
Potential registers zp[2]:147 [ sin16s::usinx#1 ] : zp[2]:147 , 
Potential registers zp[4]:149 [ mul16u::return#3 ] : zp[4]:149 , 
Potential registers zp[4]:153 [ mulu16_sel::$0 ] : zp[4]:153 , 
Potential registers zp[4]:157 [ mulu16_sel::$1 ] : zp[4]:157 , 
Potential registers zp[2]:161 [ mulu16_sel::return#12 ] : zp[2]:161 , 
Potential registers zp[2]:163 [ divr16u::return#2 ] : zp[2]:163 , 
Potential registers zp[2]:165 [ div32u16u::quotient_hi#0 ] : zp[2]:165 , 
Potential registers zp[2]:167 [ divr16u::return#3 ] : zp[2]:167 , 
Potential registers zp[2]:169 [ div32u16u::quotient_lo#0 ] : zp[2]:169 , 
Potential registers zp[4]:171 [ div32u16u::return#0 ] : zp[4]:171 , 
Potential registers zp[1]:175 [ divr16u::$1 ] : zp[1]:175 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:176 [ divr16u::$2 ] : zp[1]:176 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:177 [ rem16u#1 ] : zp[2]:177 , 
Potential registers zp[2]:179 [ memset::end#0 ] : zp[2]:179 , 

REGISTER UPLIFT SCOPES
Uplift Scope [render_logo] 506.94: zp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] 499.17: zp[1]:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] 271.07: zp[1]:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] 259.71: zp[1]:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] 202: zp[1]:71 [ render_logo::$33 ] 202: zp[1]:72 [ render_logo::$36 ] 202: zp[1]:73 [ render_logo::$39 ] 202: zp[1]:74 [ render_logo::$42 ] 202: zp[1]:75 [ render_logo::$45 ] 202: zp[1]:77 [ render_logo::$73 ] 202: zp[1]:78 [ render_logo::$76 ] 202: zp[1]:79 [ render_logo::$79 ] 202: zp[1]:80 [ render_logo::$82 ] 202: zp[1]:81 [ render_logo::$85 ] 4: zp[1]:65 [ render_logo::$0 ] 4: zp[1]:66 [ render_logo::$1 ] 4: zp[1]:67 [ render_logo::$2 ] 2.14: zp[2]:63 [ render_logo::xpos#0 ] 2: zp[2]:68 [ render_logo::$3 ] 2: zp[1]:76 [ render_logo::logo_idx#1 ] 0.36: zp[1]:70 [ render_logo::x_char#0 ] 
Uplift Scope [mul16u] 346.86: zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp[1]:116 [ mul16u::$1 ] 177.67: zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] 6: zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] 4: zp[4]:104 [ mul16u::return#2 ] 4: zp[4]:149 [ mul16u::return#3 ] 
Uplift Scope [divr16u] 106.92: zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 35.54: zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp[1]:175 [ divr16u::$1 ] 22: zp[1]:176 [ divr16u::$2 ] 18.19: zp[1]:51 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp[2]:163 [ divr16u::return#2 ] 4: zp[2]:167 [ divr16u::return#3 ] 
Uplift Scope [sin16s] 27.5: zp[4]:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp[2]:90 [ sin16s::return#0 ] 13: zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp[4]:117 [ sin16s::$4 ] 4: zp[2]:125 [ sin16s::x2#0 ] 4: zp[2]:133 [ sin16s::x3_6#0 ] 4: zp[2]:139 [ sin16s::x4#0 ] 4: zp[2]:143 [ sin16s::x5#0 ] 4: zp[2]:145 [ sin16s::x5_128#0 ] 1: zp[2]:129 [ sin16s::x3#0 ] 1: zp[2]:147 [ sin16s::usinx#1 ] 0.64: zp[2]:121 [ sin16s::x1#0 ] 0.33: zp[2]:135 [ sin16s::usinx#0 ] 0.06: zp[1]:33 [ sin16s::isUpper#2 ] 
Uplift Scope [sin16s_gen2] 24.54: zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 22: zp[4]:98 [ sin16s_gen2::$6 ] 13.75: zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 11: zp[2]:102 [ sin16s_gen2::$9 ] 10.33: zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.87: zp[4]:86 [ sin16s_gen2::step#0 ] 
Uplift Scope [mulu16_sel] 24: zp[2]:40 [ 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[2]:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp[2]:123 [ mulu16_sel::return#0 ] 4: zp[2]:127 [ mulu16_sel::return#1 ] 4: zp[2]:131 [ mulu16_sel::return#2 ] 4: zp[2]:137 [ mulu16_sel::return#10 ] 4: zp[2]:141 [ mulu16_sel::return#11 ] 4: zp[4]:153 [ mulu16_sel::$0 ] 4: zp[4]:157 [ mulu16_sel::$1 ] 1.71: zp[2]:161 [ mulu16_sel::return#12 ] 0.33: zp[1]:44 [ mulu16_sel::select#5 ] 
Uplift Scope [loop] 22: zp[2]:57 [ loop::$7 ] 22: zp[2]:59 [ loop::$2 ] 22: zp[2]:61 [ loop::xpos#0 ] 
Uplift Scope [mul16s] 22: zp[4]:94 [ mul16s::return#2 ] 10: zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] 4.33: zp[4]:112 [ mul16s::return#0 ] 4: zp[2]:108 [ mul16s::$9 ] 4: zp[2]:110 [ mul16s::$16 ] 2.6: zp[2]:92 [ mul16s::a#0 ] 
Uplift Scope [memset] 41.33: zp[2]:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 2.17: zp[2]:179 [ memset::end#0 ] 1.57: zp[1]:54 [ memset::c#4 ] 0: zp[2]:52 [ memset::str#3 ] 
Uplift Scope [main] 38.5: zp[1]:2 [ main::ch#2 main::ch#1 ] 
Uplift Scope [] 26.12: zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] 0.8: zp[2]:177 [ rem16u#1 ] 
Uplift Scope [div32u16u] 4: zp[4]:82 [ div32u16u::return#2 ] 4: zp[2]:169 [ div32u16u::quotient_lo#0 ] 1.33: zp[4]:171 [ div32u16u::return#0 ] 0.8: zp[2]:165 [ div32u16u::quotient_hi#0 ] 

Uplifting [mul16u] best 75504 combination zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] zp[4]:104 [ mul16u::return#2 ] zp[4]:149 [ mul16u::return#3 ] 
Uplifting [divr16u] best 75294 combination zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:163 [ divr16u::return#2 ] zp[2]:167 [ divr16u::return#3 ] 
Uplifting [sin16s] best 75285 combination zp[4]:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:90 [ sin16s::return#0 ] zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:117 [ sin16s::$4 ] zp[2]:125 [ sin16s::x2#0 ] zp[2]:133 [ sin16s::x3_6#0 ] zp[2]:139 [ sin16s::x4#0 ] zp[2]:143 [ sin16s::x5#0 ] zp[2]:145 [ sin16s::x5_128#0 ] zp[2]:129 [ sin16s::x3#0 ] zp[2]:147 [ sin16s::usinx#1 ] zp[2]:121 [ sin16s::x1#0 ] zp[2]:135 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ] 
Uplifting [sin16s_gen2] best 75285 combination zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp[4]:98 [ sin16s_gen2::$6 ] zp[4]:11 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp[2]:102 [ sin16s_gen2::$9 ] zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp[4]:86 [ sin16s_gen2::step#0 ] 
Uplifting [mulu16_sel] best 75269 combination zp[2]:40 [ 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[2]:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:123 [ mulu16_sel::return#0 ] zp[2]:127 [ mulu16_sel::return#1 ] zp[2]:131 [ mulu16_sel::return#2 ] zp[2]:137 [ mulu16_sel::return#10 ] zp[2]:141 [ mulu16_sel::return#11 ] zp[4]:153 [ mulu16_sel::$0 ] zp[4]:157 [ mulu16_sel::$1 ] zp[2]:161 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] 
Uplifting [loop] best 75269 combination zp[2]:57 [ loop::$7 ] zp[2]:59 [ loop::$2 ] zp[2]:61 [ loop::xpos#0 ] 
Uplifting [mul16s] best 75269 combination zp[4]:94 [ mul16s::return#2 ] zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp[4]:112 [ mul16s::return#0 ] zp[2]:108 [ mul16s::$9 ] zp[2]:110 [ mul16s::$16 ] zp[2]:92 [ mul16s::a#0 ] 
Uplifting [memset] best 75253 combination zp[2]:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:179 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:52 [ memset::str#3 ] 
Uplifting [main] best 75133 combination reg byte x [ main::ch#2 main::ch#1 ] 
Uplifting [] best 75133 combination zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] zp[2]:177 [ rem16u#1 ] 
Uplifting [div32u16u] best 75133 combination zp[4]:82 [ div32u16u::return#2 ] zp[2]:169 [ div32u16u::quotient_lo#0 ] zp[4]:171 [ div32u16u::return#0 ] zp[2]:165 [ div32u16u::quotient_hi#0 ] 
Attempting to uplift remaining variables inzp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
Uplifting [render_logo] best 70033 combination reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] 
Attempting to uplift remaining variables inzp[1]:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
Uplifting [render_logo] best 65233 combination reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] 
Attempting to uplift remaining variables inzp[1]:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
Uplifting [render_logo] best 65233 combination zp[1]:7 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ] 
Attempting to uplift remaining variables inzp[1]:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
Uplifting [render_logo] best 65233 combination zp[1]:6 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ] 
Attempting to uplift remaining variables inzp[1]:71 [ render_logo::$33 ]
Uplifting [render_logo] best 64833 combination reg byte a [ render_logo::$33 ] 
Attempting to uplift remaining variables inzp[1]:72 [ render_logo::$36 ]
Uplifting [render_logo] best 64433 combination reg byte a [ render_logo::$36 ] 
Attempting to uplift remaining variables inzp[1]:73 [ render_logo::$39 ]
Uplifting [render_logo] best 64033 combination reg byte a [ render_logo::$39 ] 
Attempting to uplift remaining variables inzp[1]:74 [ render_logo::$42 ]
Uplifting [render_logo] best 63633 combination reg byte a [ render_logo::$42 ] 
Attempting to uplift remaining variables inzp[1]:75 [ render_logo::$45 ]
Uplifting [render_logo] best 63233 combination reg byte a [ render_logo::$45 ] 
Attempting to uplift remaining variables inzp[1]:77 [ render_logo::$73 ]
Uplifting [render_logo] best 62833 combination reg byte a [ render_logo::$73 ] 
Attempting to uplift remaining variables inzp[1]:78 [ render_logo::$76 ]
Uplifting [render_logo] best 62433 combination reg byte a [ render_logo::$76 ] 
Attempting to uplift remaining variables inzp[1]:79 [ render_logo::$79 ]
Uplifting [render_logo] best 62033 combination reg byte a [ render_logo::$79 ] 
Attempting to uplift remaining variables inzp[1]:80 [ render_logo::$82 ]
Uplifting [render_logo] best 61633 combination reg byte a [ render_logo::$82 ] 
Attempting to uplift remaining variables inzp[1]:81 [ render_logo::$85 ]
Uplifting [render_logo] best 61233 combination reg byte a [ render_logo::$85 ] 
Attempting to uplift remaining variables inzp[1]:65 [ render_logo::$0 ]
Uplifting [render_logo] best 61227 combination reg byte a [ render_logo::$0 ] 
Attempting to uplift remaining variables inzp[1]:66 [ render_logo::$1 ]
Uplifting [render_logo] best 61221 combination reg byte a [ render_logo::$1 ] 
Attempting to uplift remaining variables inzp[1]:67 [ render_logo::$2 ]
Uplifting [render_logo] best 61215 combination reg byte a [ render_logo::$2 ] 
Attempting to uplift remaining variables inzp[1]:76 [ render_logo::logo_idx#1 ]
Uplifting [render_logo] best 61209 combination reg byte a [ render_logo::logo_idx#1 ] 
Attempting to uplift remaining variables inzp[1]:70 [ render_logo::x_char#0 ]
Uplifting [render_logo] best 61209 combination zp[1]:70 [ render_logo::x_char#0 ] 
Coalescing zero page register [ zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:147 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register [ zp[2]:40 [ 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[2]:129 [ sin16s::x3#0 ] ] - score: 2
Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:177 [ rem16u#1 ] ] - score: 2
Coalescing zero page register [ zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] ] with [ zp[4]:104 [ mul16u::return#2 ] ] - score: 1
Coalescing zero page register [ zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 ] ] with [ zp[4]:112 [ mul16s::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] ] with [ zp[2]:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ] - score: 1
Coalescing zero page register [ zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:149 [ mul16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:90 [ sin16s::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:40 [ 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[2]:125 [ sin16s::x2#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:40 [ 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[2]:139 [ sin16s::x4#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp[2]:163 [ divr16u::return#2 ] ] - score: 1
Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp[2]:167 [ divr16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp[2]:52 [ memset::str#3 ] ] with [ zp[2]:55 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:57 [ loop::$7 ] ] with [ zp[2]:59 [ loop::$2 ] ] - score: 1
Coalescing zero page register [ zp[2]:61 [ loop::xpos#0 ] ] with [ zp[2]:63 [ render_logo::xpos#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:82 [ div32u16u::return#2 ] ] with [ zp[4]:86 [ sin16s_gen2::step#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:82 [ div32u16u::return#2 sin16s_gen2::step#0 ] ] with [ zp[4]:171 [ div32u16u::return#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:94 [ mul16s::return#2 ] ] with [ zp[4]:98 [ sin16s_gen2::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:108 [ mul16s::$9 ] ] with [ zp[2]:110 [ mul16s::$16 ] ] - score: 1
Coalescing zero page register [ zp[2]:123 [ mulu16_sel::return#0 ] ] with [ zp[2]:161 [ mulu16_sel::return#12 ] ] - score: 1
Coalescing zero page register [ zp[2]:131 [ mulu16_sel::return#2 ] ] with [ zp[2]:133 [ sin16s::x3_6#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:141 [ mulu16_sel::return#11 ] ] with [ zp[2]:143 [ sin16s::x5#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:153 [ mulu16_sel::$0 ] ] with [ zp[4]:157 [ mulu16_sel::$1 ] ] - score: 1
Coalescing zero page register [ zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 ] ] with [ zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1
Coalescing zero page register [ zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] with [ zp[4]:94 [ mul16s::return#2 sin16s_gen2::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp[2]:92 [ mul16s::a#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 ] ] with [ zp[2]:135 [ sin16s::usinx#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:40 [ 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[2]:127 [ mulu16_sel::return#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:40 [ 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[2]:137 [ mulu16_sel::return#10 ] ] - score: 1
Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp[2]:169 [ div32u16u::quotient_lo#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:57 [ loop::$7 loop::$2 ] ] with [ zp[2]:61 [ loop::xpos#0 render_logo::xpos#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:123 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp[2]:131 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:123 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp[2]:141 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 ] ] with [ zp[4]:153 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1
Coalescing zero page register [ zp[2]:123 [ 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[2]:145 [ sin16s::x5_128#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp[2]:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ]
Coalescing zero page register [ zp[4]:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ] ]
Coalescing zero page register [ zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:15 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ]
Coalescing zero page register [ zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:21 [ mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ]
Coalescing zero page register [ zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] ]
Coalescing zero page register [ zp[2]:52 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ] ]
Coalescing zero page register [ zp[2]:57 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 ] ] with [ zp[2]:40 [ 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[2]:102 [ sin16s_gen2::$9 ] ] with [ zp[2]:68 [ render_logo::$3 ] ]
Coalescing zero page register [ zp[4]:117 [ sin16s::$4 ] ] with [ zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] ]
Coalescing zero page register [ zp[2]:121 [ sin16s::x1#0 ] ] with [ zp[2]:108 [ mul16s::$9 mul16s::$16 ] ]
Coalescing zero page register [ zp[2]:165 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:123 [ 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 ] ]
Coalescing zero page register [ zp[2]:102 [ sin16s_gen2::$9 render_logo::$3 ] ] with [ zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] ]
Coalescing zero page register [ zp[2]:179 [ memset::end#0 ] ] with [ zp[2]:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ]
Allocated (was zp[1]:6) zp[1]:2 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
Allocated (was zp[1]:7) zp[1]:3 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
Allocated (was zp[4]:11) zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
Allocated (was zp[4]:34) zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ]
Allocated (was zp[2]:45) zp[2]:12 [ 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 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
Allocated (was zp[2]:49) zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
Allocated (was zp[2]:52) zp[2]:16 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
Allocated (was zp[2]:57) zp[2]:18 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 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 ]
Allocated (was zp[1]:70) zp[1]:20 [ render_logo::x_char#0 ]
Allocated (was zp[4]:82) zp[4]:21 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
Allocated (was zp[2]:102) zp[2]:25 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
Allocated (was zp[4]:117) zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
Allocated (was zp[2]:121) zp[2]:31 [ sin16s::x1#0 mul16s::$9 mul16s::$16 ]
Allocated (was zp[2]:165) zp[2]:33 [ div32u16u::quotient_hi#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[2]:179) zp[2]:35 [ memset::end#0 sin16s_gen2::i#2 sin16s_gen2::i#1 xsin_idx#11 xsin_idx#19 xsin_idx#3 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label RASTER = $d012
  .label BORDERCOL = $d020
  .label BGCOL = $d021
  .label BGCOL2 = $d022
  .label BGCOL3 = $d023
  .label D016 = $d016
  .const VIC_MCM = $10
  .label D018 = $d018
  // Color Ram
  .label COLS = $d800
  // The colors of the C64
  .const BLACK = 0
  .const WHITE = 1
  .const DARK_GREY = $b
  // 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
  .const XSIN_SIZE = $200
  .const SIZEOF_SIGNED_WORD = 2
  .label SCREEN = $400
  .label LOGO = $2000
  // Remainder after unsigned 16-bit division
  .label rem16u = $c
  .label xsin_idx = $23
  // @begin
__bbegin:
  jmp __b1
  // @1
__b1:
  // kickasm(location (const byte*) LOGO) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))     .for (var y=0; y<6	; y++)         .for (var x=0;x<40; x++)             .for(var cp=0; cp<8; cp++)                 .byte logoPic.getMulticolorByte(x,cp+y*8)  }}
  // [2] phi from @1 to @2 [phi:@1->@2]
__b2_from___b1:
  jmp __b2
  // @2
__b2:
  // [3] call main 
  jsr main
  // [4] phi from @2 to @end [phi:@2->@end]
__bend_from___b2:
  jmp __bend
  // @end
__bend:
  // main
main: {
    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LOGO)/4&$f
    // asm { sei  }
    sei
    // [6] *((const byte*) BORDERCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta BORDERCOL
    // [7] *((const byte*) BGCOL2) ← (const byte) DARK_GREY -- _deref_pbuc1=vbuc2 
    lda #DARK_GREY
    sta BGCOL2
    // [8] *((const byte*) BGCOL) ← *((const byte*) BGCOL2) -- _deref_pbuc1=_deref_pbuc2 
    lda BGCOL2
    sta BGCOL
    // [9] *((const byte*) BGCOL3) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 
    lda #BLACK
    sta BGCOL3
    // [10] phi from main to main::toD0181 [phi:main->main::toD0181]
  toD0181_from_main:
    jmp toD0181
    // main::toD0181
  toD0181:
    jmp __b3
    // main::@3
  __b3:
    // [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // [12] *((const byte*) D016) ← (const byte) VIC_MCM -- _deref_pbuc1=vbuc2 
    lda #VIC_MCM
    sta D016
    // [13] call memset 
    // [215] phi from main::@3 to memset [phi:main::@3->memset]
  memset_from___b3:
    // [215] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 
    ldx #BLACK
    // [215] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 
    lda #<SCREEN
    sta.z memset.str
    lda #>SCREEN
    sta.z memset.str+1
    jsr memset
    // [14] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  __b4_from___b3:
    jmp __b4
    // main::@4
  __b4:
    // [15] call memset 
    // [215] phi from main::@4 to memset [phi:main::@4->memset]
  memset_from___b4:
    // [215] phi (byte) memset::c#4 = (const byte) WHITE|(byte) 8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 
    ldx #WHITE|8
    // [215] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 
    lda #<COLS
    sta.z memset.str
    lda #>COLS
    sta.z memset.str+1
    jsr memset
    // [16] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
  __b1_from___b4:
    // [16] phi (byte) main::ch#2 = (byte) 0 [phi:main::@4->main::@1#0] -- vbuxx=vbuc1 
    ldx #0
    jmp __b1
    // [16] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  __b1_from___b1:
    // [16] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@1->main::@1#0] -- register_copy 
    jmp __b1
    // main::@1
  __b1:
    // [17] *((const byte*) SCREEN + (byte) main::ch#2) ← (byte) main::ch#2 -- pbuc1_derefidx_vbuxx=vbuxx 
    txa
    sta SCREEN,x
    // [18] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuxx=_inc_vbuxx 
    inx
    // [19] if((byte) main::ch#1!=(byte) $f0) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$f0
    bne __b1_from___b1
    // [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  __b2_from___b1:
    jmp __b2
    // main::@2
  __b2:
    // [21] call sin16s_gen2 
    // [97] phi from main::@2 to sin16s_gen2 [phi:main::@2->sin16s_gen2]
  sin16s_gen2_from___b2:
    jsr sin16s_gen2
    // [22] phi from main::@2 to main::@5 [phi:main::@2->main::@5]
  __b5_from___b2:
    jmp __b5
    // main::@5
  __b5:
    // [23] call loop 
    // [25] phi from main::@5 to loop [phi:main::@5->loop]
  loop_from___b5:
    jsr loop
    jmp __breturn
    // main::@return
  __breturn:
    // [24] return 
    rts
}
  // loop
loop: {
    .label __2 = $12
    .label __7 = $12
    .label xpos = $12
    // [26] phi from loop to loop::@1 [phi:loop->loop::@1]
  __b1_from_loop:
    // [26] phi (word) xsin_idx#11 = (word) 0 [phi:loop->loop::@1#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z xsin_idx
    lda #>0
    sta.z xsin_idx+1
    jmp __b1
    // loop::@1
  __b1:
    jmp __b2
  // Wait for the raster to reach the bottom of the screen
    // loop::@2
  __b2:
    // [27] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne __b2
    jmp __b3
    // loop::@3
  __b3:
    // [28] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
    // [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 -- vwuz1=vwuz2_rol_1 
    lda.z xsin_idx
    asl
    sta.z __7
    lda.z xsin_idx+1
    rol
    sta.z __7+1
    // [30] (signed word*~) loop::$2 ← (const signed word*) xsin + (word~) loop::$7 -- pwsz1=pwsc1_plus_vwuz1 
    clc
    lda.z __2
    adc #<xsin
    sta.z __2
    lda.z __2+1
    adc #>xsin
    sta.z __2+1
    // [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) -- vwsz1=_deref_pwsz1 
    ldy #0
    lda (xpos),y
    pha
    iny
    lda (xpos),y
    sta.z xpos+1
    pla
    sta.z xpos
    // [32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
    // [33] call render_logo 
    jsr render_logo
    jmp __b5
    // loop::@5
  __b5:
    // [34] (word) xsin_idx#3 ← ++ (word) xsin_idx#11 -- vwuz1=_inc_vwuz1 
    inc.z xsin_idx
    bne !+
    inc.z xsin_idx+1
  !:
    // [35] if((word) xsin_idx#3!=(const word) XSIN_SIZE) goto loop::@6 -- vwuz1_neq_vwuc1_then_la1 
    lda.z xsin_idx+1
    cmp #>XSIN_SIZE
    bne __b6_from___b5
    lda.z xsin_idx
    cmp #<XSIN_SIZE
    bne __b6_from___b5
    // [37] phi from loop::@5 to loop::@4 [phi:loop::@5->loop::@4]
  __b4_from___b5:
    // [37] phi (word) xsin_idx#19 = (byte) 0 [phi:loop::@5->loop::@4#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z xsin_idx
    lda #>0
    sta.z xsin_idx+1
    jmp __b4
    // [36] phi from loop::@5 to loop::@6 [phi:loop::@5->loop::@6]
  __b6_from___b5:
    jmp __b6
    // loop::@6
  __b6:
    // [37] phi from loop::@6 to loop::@4 [phi:loop::@6->loop::@4]
  __b4_from___b6:
    // [37] phi (word) xsin_idx#19 = (word) xsin_idx#3 [phi:loop::@6->loop::@4#0] -- register_copy 
    jmp __b4
    // loop::@4
  __b4:
    // [38] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // [26] phi from loop::@4 to loop::@1 [phi:loop::@4->loop::@1]
  __b1_from___b4:
    // [26] phi (word) xsin_idx#11 = (word) xsin_idx#19 [phi:loop::@4->loop::@1#0] -- register_copy 
    jmp __b1
}
  // render_logo
// render_logo(signed word zp($12) xpos)
render_logo: {
    .label __3 = $19
    .label xpos = $12
    .label x_char = $14
    .label logo_idx = 2
    .label logo_idx_1 = 3
    // [39] (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#0 -- vbuaa=_byte_vwsz1 
    lda.z xpos
    // [40] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte) 7 -- vbuaa=vbuaa_band_vbuc1 
    and #7
    // [41] (byte~) render_logo::$2 ← (const byte) VIC_MCM | (byte~) render_logo::$1 -- vbuaa=vbuc1_bor_vbuaa 
    ora #VIC_MCM
    // [42] *((const byte*) D016) ← (byte~) render_logo::$2 -- _deref_pbuc1=vbuaa 
    sta D016
    // [43] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte) 3 -- vwsz1=vwsz2_ror_3 
    lda.z xpos+1
    cmp #$80
    ror
    sta.z __3+1
    lda.z xpos
    ror
    sta.z __3
    lda.z __3+1
    cmp #$80
    ror.z __3+1
    ror.z __3
    lda.z __3+1
    cmp #$80
    ror.z __3+1
    ror.z __3
    // [44] (signed byte) render_logo::x_char#0 ← (signed byte)(signed word~) render_logo::$3 -- vbsz1=_sbyte_vwsz2 
    lda.z __3
    sta.z x_char
    // [45] if((signed word) render_logo::xpos#0<(signed byte) 0) goto render_logo::@1 -- vwsz1_lt_0_then_la1 
    lda.z xpos+1
    bmi __b1
    // [46] phi from render_logo to render_logo::@2 [phi:render_logo->render_logo::@2]
  __b2_from_render_logo:
    // [46] phi (byte) render_logo::screen_idx#18 = (byte) 0 [phi:render_logo->render_logo::@2#0] -- vbuyy=vbuc1 
    ldy #0
    jmp __b2
    // render_logo::@2
  __b2:
    // [47] if((byte) render_logo::screen_idx#18!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@3 -- vbuyy_neq_vbuz1_then_la1 
    cpy.z x_char
    bne __b3
    // [48] phi from render_logo::@2 to render_logo::@5 [phi:render_logo::@2->render_logo::@5]
  __b5_from___b2:
    // [48] phi (byte) render_logo::logo_idx#10 = (byte) 0 [phi:render_logo::@2->render_logo::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z logo_idx
    // [48] phi (byte) render_logo::screen_idx#10 = (byte) render_logo::screen_idx#18 [phi:render_logo::@2->render_logo::@5#1] -- register_copy 
    jmp __b5
    // render_logo::@5
  __b5:
    // [49] if((byte) render_logo::screen_idx#10!=(byte) $28) goto render_logo::@6 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne __b6
    jmp __breturn
    // render_logo::@return
  __breturn:
    // [50] return 
    rts
    // render_logo::@6
  __b6:
    // [51] *((const byte*) SCREEN + (byte) render_logo::screen_idx#10) ← (byte) render_logo::logo_idx#10 -- pbuc1_derefidx_vbuyy=vbuz1 
    lda.z logo_idx
    sta SCREEN,y
    jmp __b15_1
    // render_logo::@15_1
  __b15_1:
    // [52] (byte~) render_logo::$33 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 1 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*1
    clc
    adc.z logo_idx
    // [53] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$33 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*1,y
    jmp __b15_2
    // render_logo::@15_2
  __b15_2:
    // [54] (byte~) render_logo::$36 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 2 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*2
    clc
    adc.z logo_idx
    // [55] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$36 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*2,y
    jmp __b15_3
    // render_logo::@15_3
  __b15_3:
    // [56] (byte~) render_logo::$39 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 3 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*3
    clc
    adc.z logo_idx
    // [57] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$39 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*3,y
    jmp __b15_4
    // render_logo::@15_4
  __b15_4:
    // [58] (byte~) render_logo::$42 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 4 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*4
    clc
    adc.z logo_idx
    // [59] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$42 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*4,y
    jmp __b15_5
    // render_logo::@15_5
  __b15_5:
    // [60] (byte~) render_logo::$45 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 5 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*5
    clc
    adc.z logo_idx
    // [61] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$45 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*5,y
    jmp __b7
    // render_logo::@7
  __b7:
    // [62] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#10 -- vbuyy=_inc_vbuyy 
    iny
    // [63] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10 -- vbuz1=_inc_vbuz1 
    inc.z logo_idx
    // [48] phi from render_logo::@7 to render_logo::@5 [phi:render_logo::@7->render_logo::@5]
  __b5_from___b7:
    // [48] phi (byte) render_logo::logo_idx#10 = (byte) render_logo::logo_idx#3 [phi:render_logo::@7->render_logo::@5#0] -- register_copy 
    // [48] phi (byte) render_logo::screen_idx#10 = (byte) render_logo::screen_idx#4 [phi:render_logo::@7->render_logo::@5#1] -- register_copy 
    jmp __b5
    // render_logo::@3
  __b3:
    // [64] *((const byte*) SCREEN + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN,y
    jmp __b7_1
    // render_logo::@7_1
  __b7_1:
    // [65] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*1,y
    jmp __b7_2
    // render_logo::@7_2
  __b7_2:
    // [66] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*2,y
    jmp __b7_3
    // render_logo::@7_3
  __b7_3:
    // [67] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*3,y
    jmp __b7_4
    // render_logo::@7_4
  __b7_4:
    // [68] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*4,y
    jmp __b7_5
    // render_logo::@7_5
  __b7_5:
    // [69] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*5,y
    jmp __b4
    // render_logo::@4
  __b4:
    // [70] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#18 -- vbuyy=_inc_vbuyy 
    iny
    // [46] phi from render_logo::@4 to render_logo::@2 [phi:render_logo::@4->render_logo::@2]
  __b2_from___b4:
    // [46] phi (byte) render_logo::screen_idx#18 = (byte) render_logo::screen_idx#3 [phi:render_logo::@4->render_logo::@2#0] -- register_copy 
    jmp __b2
    // render_logo::@1
  __b1:
    // [71] (signed byte) render_logo::logo_idx#1 ← - (signed byte) render_logo::x_char#0 -- vbsaa=_neg_vbsz1 
    lda.z x_char
    eor #$ff
    clc
    adc #1
    // [72] (byte) render_logo::logo_idx#14 ← (byte)(signed byte) render_logo::logo_idx#1 -- vbuz1=vbuaa 
    sta.z logo_idx_1
    // [73] phi from render_logo::@1 to render_logo::@8 [phi:render_logo::@1->render_logo::@8]
  __b8_from___b1:
    // [73] phi (byte) render_logo::screen_idx#21 = (byte) 0 [phi:render_logo::@1->render_logo::@8#0] -- vbuyy=vbuc1 
    ldy #0
    // [73] phi (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#14 [phi:render_logo::@1->render_logo::@8#1] -- register_copy 
    jmp __b8
    // render_logo::@8
  __b8:
    // [74] if((byte) render_logo::logo_idx#11!=(byte) $28) goto render_logo::@9 -- vbuz1_neq_vbuc1_then_la1 
    lda #$28
    cmp.z logo_idx_1
    bne __b9
    // [75] phi from render_logo::@13 render_logo::@8 to render_logo::@11 [phi:render_logo::@13/render_logo::@8->render_logo::@11]
  __b11_from___b13:
  __b11_from___b8:
    // [75] phi (byte) render_logo::screen_idx#15 = (byte) render_logo::screen_idx#6 [phi:render_logo::@13/render_logo::@8->render_logo::@11#0] -- register_copy 
    jmp __b11
    // render_logo::@11
  __b11:
    // [76] if((byte) render_logo::screen_idx#15!=(byte) $28) goto render_logo::@12 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne __b12
    jmp __breturn
    // render_logo::@12
  __b12:
    // [77] *((const byte*) SCREEN + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN,y
    jmp __b32_1
    // render_logo::@32_1
  __b32_1:
    // [78] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*1,y
    jmp __b32_2
    // render_logo::@32_2
  __b32_2:
    // [79] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*2,y
    jmp __b32_3
    // render_logo::@32_3
  __b32_3:
    // [80] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*3,y
    jmp __b32_4
    // render_logo::@32_4
  __b32_4:
    // [81] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*4,y
    jmp __b32_5
    // render_logo::@32_5
  __b32_5:
    // [82] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN+$28*5,y
    jmp __b13
    // render_logo::@13
  __b13:
    // [83] (byte) render_logo::screen_idx#6 ← ++ (byte) render_logo::screen_idx#15 -- vbuyy=_inc_vbuyy 
    iny
    jmp __b11_from___b13
    // render_logo::@9
  __b9:
    // [84] *((const byte*) SCREEN + (byte) render_logo::screen_idx#21) ← (byte) render_logo::logo_idx#11 -- pbuc1_derefidx_vbuyy=vbuz1 
    lda.z logo_idx_1
    sta SCREEN,y
    jmp __b24_1
    // render_logo::@24_1
  __b24_1:
    // [85] (byte~) render_logo::$73 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 1 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*1
    clc
    adc.z logo_idx_1
    // [86] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$73 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*1,y
    jmp __b24_2
    // render_logo::@24_2
  __b24_2:
    // [87] (byte~) render_logo::$76 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 2 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*2
    clc
    adc.z logo_idx_1
    // [88] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$76 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*2,y
    jmp __b24_3
    // render_logo::@24_3
  __b24_3:
    // [89] (byte~) render_logo::$79 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 3 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*3
    clc
    adc.z logo_idx_1
    // [90] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$79 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*3,y
    jmp __b24_4
    // render_logo::@24_4
  __b24_4:
    // [91] (byte~) render_logo::$82 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 4 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*4
    clc
    adc.z logo_idx_1
    // [92] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$82 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*4,y
    jmp __b24_5
    // render_logo::@24_5
  __b24_5:
    // [93] (byte~) render_logo::$85 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 5 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*5
    clc
    adc.z logo_idx_1
    // [94] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$85 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*5,y
    jmp __b10
    // render_logo::@10
  __b10:
    // [95] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#21 -- vbuyy=_inc_vbuyy 
    iny
    // [96] (byte) render_logo::logo_idx#4 ← ++ (byte) render_logo::logo_idx#11 -- vbuz1=_inc_vbuz1 
    inc.z logo_idx_1
    // [73] phi from render_logo::@10 to render_logo::@8 [phi:render_logo::@10->render_logo::@8]
  __b8_from___b10:
    // [73] phi (byte) render_logo::screen_idx#21 = (byte) render_logo::screen_idx#5 [phi:render_logo::@10->render_logo::@8#0] -- register_copy 
    // [73] phi (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#4 [phi:render_logo::@10->render_logo::@8#1] -- register_copy 
    jmp __b8
}
  // sin16s_gen2
// Generate signed word sinus table - with values in the range min-max.
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen2(signed word* zp($c) sintab)
sin16s_gen2: {
    .const min = -$140
    .const max = $140
    .label ampl = max-min
    .label __6 = 8
    .label __9 = $19
    .label step = $15
    .label sintab = $c
    // u[4.28]
    // Iterate over the table
    .label x = 4
    .label i = $23
    // [98] call div32u16u 
    // [187] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u]
  div32u16u_from_sin16s_gen2:
    jsr div32u16u
    // [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
    jmp __b3
    // sin16s_gen2::@3
  __b3:
    // [100] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2
    // [101] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1]
  __b1_from___b3:
    // [101] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) xsin [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 
    lda #<xsin
    sta.z sintab
    lda #>xsin
    sta.z sintab+1
    // [101] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 
    lda #<0
    sta.z x
    lda #>0
    sta.z x+1
    lda #<0>>$10
    sta.z x+2
    lda #>0>>$10
    sta.z x+3
    // [101] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 
    lda #<0
    sta.z i
    lda #>0
    sta.z i+1
    jmp __b1
  // u[4.28]
    // sin16s_gen2::@1
  __b1:
    // [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z i+1
    cmp #>XSIN_SIZE
    bcc __b2
    bne !+
    lda.z i
    cmp #<XSIN_SIZE
    bcc __b2
  !:
    jmp __breturn
    // sin16s_gen2::@return
  __breturn:
    // [103] return 
    rts
    // sin16s_gen2::@2
  __b2:
    // [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 
    lda.z x
    sta.z sin16s.x
    lda.z x+1
    sta.z sin16s.x+1
    lda.z x+2
    sta.z sin16s.x+2
    lda.z x+3
    sta.z sin16s.x+3
    // [105] call sin16s 
    jsr sin16s
    // [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
    jmp __b4
    // sin16s_gen2::@4
  __b4:
    // [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0
    // [108] call mul16s 
    jsr mul16s
    // [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0
    jmp __b5
    // sin16s_gen2::@5
  __b5:
    // [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2
    // [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 
    lda.z __6+2
    sta.z __9
    lda.z __6+3
    sta.z __9+1
    // [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 
    ldy #0
    lda.z __9
    sta (sintab),y
    iny
    lda.z __9+1
    sta (sintab),y
    // [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 
    lda #SIZEOF_SIGNED_WORD
    clc
    adc.z sintab
    sta.z sintab
    bcc !+
    inc.z sintab+1
  !:
    // [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 
    lda.z x
    clc
    adc.z step
    sta.z x
    lda.z x+1
    adc.z step+1
    sta.z x+1
    lda.z x+2
    adc.z step+2
    sta.z x+2
    lda.z x+3
    adc.z step+3
    sta.z x+3
    // [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 
    inc.z i
    bne !+
    inc.z i+1
  !:
    // [101] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1]
  __b1_from___b5:
    // [101] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy 
    // [101] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy 
    // [101] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy 
    jmp __b1
}
  // mul16s
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zp($10) a)
mul16s: {
    .label __9 = $1f
    .label __16 = $1f
    .label m = 8
    .label return = 8
    .label a = $10
    // [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 -- vwuz1=vwuz2 
    lda.z a
    sta.z mul16u.a
    lda.z a+1
    sta.z mul16u.a+1
    // [117] call mul16u 
    // [127] phi from mul16s to mul16u [phi:mul16s->mul16u]
  mul16u_from_mul16s:
    // [127] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy 
    // [127] phi (word) mul16u::b#2 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 
    lda #<sin16s_gen2.ampl
    sta.z mul16u.b
    lda #>sin16s_gen2.ampl
    sta.z mul16u.b+1
    jsr mul16u
    // [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2
    jmp __b4
    // mul16s::@4
  __b4:
    // [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2
    // [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 -- vwsz1_ge_0_then_la1 
    lda.z a+1
    bpl __b1_from___b4
    jmp __b3
    // mul16s::@3
  __b3:
    // [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 -- vwuz1=_hi_vduz2 
    lda.z m+2
    sta.z __9
    lda.z m+3
    sta.z __9+1
    // [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda.z __16
    sec
    sbc #<sin16s_gen2.ampl
    sta.z __16
    lda.z __16+1
    sbc #>sin16s_gen2.ampl
    sta.z __16+1
    // [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 -- vduz1=vduz1_sethi_vwuz2 
    lda.z __16
    sta.z m+2
    lda.z __16+1
    sta.z m+3
    // [124] phi from mul16s::@3 mul16s::@4 to mul16s::@1 [phi:mul16s::@3/mul16s::@4->mul16s::@1]
  __b1_from___b3:
  __b1_from___b4:
    // [124] phi (dword) mul16s::m#4 = (dword) mul16s::m#1 [phi:mul16s::@3/mul16s::@4->mul16s::@1#0] -- register_copy 
    jmp __b1
    // mul16s::@1
  __b1:
    jmp __b2
    // mul16s::@2
  __b2:
    // [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4
    jmp __breturn
    // mul16s::@return
  __breturn:
    // [126] return 
    rts
}
  // mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zp($e) a, word zp($19) b)
mul16u: {
    .label mb = $1b
    .label a = $e
    .label res = 8
    .label return = 8
    .label b = $19
    // [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 
    lda.z b
    sta.z mb
    lda.z b+1
    sta.z mb+1
    lda #0
    sta.z mb+2
    sta.z mb+3
    // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
  __b1_from_mul16u:
    // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy 
    // [129] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 
    lda #<0
    sta.z res
    lda #>0
    sta.z res+1
    lda #<0>>$10
    sta.z res+2
    lda #>0>>$10
    sta.z res+3
    // [129] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy 
    jmp __b1
    // mul16u::@1
  __b1:
    // [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 
    lda.z a
    bne __b2
    lda.z a+1
    bne __b2
    jmp __breturn
    // mul16u::@return
  __breturn:
    // [131] return 
    rts
    // mul16u::@2
  __b2:
    // [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 
    lda #1
    and.z a
    // [133] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq __b3_from___b2
    jmp __b4
    // mul16u::@4
  __b4:
    // [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 
    lda.z res
    clc
    adc.z mb
    sta.z res
    lda.z res+1
    adc.z mb+1
    sta.z res+1
    lda.z res+2
    adc.z mb+2
    sta.z res+2
    lda.z res+3
    adc.z mb+3
    sta.z res+3
    // [135] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3]
  __b3_from___b2:
  __b3_from___b4:
    // [135] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy 
    jmp __b3
    // mul16u::@3
  __b3:
    // [136] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z a+1
    ror.z a
    // [137] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 
    asl.z mb
    rol.z mb+1
    rol.z mb+2
    rol.z mb+3
    // [129] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1]
  __b1_from___b3:
    // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy 
    // [129] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy 
    // [129] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy 
    jmp __b1
}
  // 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 zp(8) x)
sin16s: {
    .label __4 = $1b
    .label x = 8
    .label return = $10
    .label x1 = $1f
    .label x2 = $12
    .label x3 = $12
    .label x3_6 = $21
    .label usinx = $10
    .label x4 = $12
    .label x5 = $21
    .label x5_128 = $21
    .label sinx = $10
    // [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 
    lda.z x+3
    cmp #>PI_u4f28>>$10
    bcc __b1_from_sin16s
    bne !+
    lda.z x+2
    cmp #<PI_u4f28>>$10
    bcc __b1_from_sin16s
    bne !+
    lda.z x+1
    cmp #>PI_u4f28
    bcc __b1_from_sin16s
    bne !+
    lda.z x
    cmp #<PI_u4f28
    bcc __b1_from_sin16s
  !:
    jmp __b4
    // sin16s::@4
  __b4:
    // [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 
    lda.z x
    sec
    sbc #<PI_u4f28
    sta.z x
    lda.z x+1
    sbc #>PI_u4f28
    sta.z x+1
    lda.z x+2
    sbc #<PI_u4f28>>$10
    sta.z x+2
    lda.z x+3
    sbc #>PI_u4f28>>$10
    sta.z x+3
    // [140] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
  __b1_from___b4:
    // [140] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 
    ldy #1
    // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy 
    jmp __b1
    // [140] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
  __b1_from_sin16s:
    // [140] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 
    ldy #0
    // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy 
    jmp __b1
    // sin16s::@1
  __b1:
    // [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 
    lda.z x+3
    cmp #>PI_HALF_u4f28>>$10
    bcc __b2_from___b1
    bne !+
    lda.z x+2
    cmp #<PI_HALF_u4f28>>$10
    bcc __b2_from___b1
    bne !+
    lda.z x+1
    cmp #>PI_HALF_u4f28
    bcc __b2_from___b1
    bne !+
    lda.z x
    cmp #<PI_HALF_u4f28
    bcc __b2_from___b1
  !:
    jmp __b5
    // sin16s::@5
  __b5:
    // [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 
    lda #<PI_u4f28
    sec
    sbc.z x
    sta.z x
    lda #>PI_u4f28
    sbc.z x+1
    sta.z x+1
    lda #<PI_u4f28>>$10
    sbc.z x+2
    sta.z x+2
    lda #>PI_u4f28>>$10
    sbc.z x+3
    sta.z x+3
    // [143] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2]
  __b2_from___b1:
  __b2_from___b5:
    // [143] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy 
    jmp __b2
    // sin16s::@2
  __b2:
    // [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 
    lda.z x
    asl
    sta.z __4
    lda.z x+1
    rol
    sta.z __4+1
    lda.z x+2
    rol
    sta.z __4+2
    lda.z x+3
    rol
    sta.z __4+3
    asl.z __4
    rol.z __4+1
    rol.z __4+2
    rol.z __4+3
    asl.z __4
    rol.z __4+1
    rol.z __4+2
    rol.z __4+3
    // [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 
    lda.z __4+2
    sta.z x1
    lda.z __4+3
    sta.z x1+1
    // [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v1
    lda.z x1+1
    sta.z mulu16_sel.v1+1
    // [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [148] call mulu16_sel 
    // [178] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel]
  mulu16_sel_from___b2:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
    jmp __b7
    // sin16s::@7
  __b7:
    // [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return
    sta.z x2
    lda.z mulu16_sel.return+1
    sta.z x2+1
    // [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
    // [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [153] call mulu16_sel 
    // [178] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel]
  mulu16_sel_from___b7:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return
    sta.z mulu16_sel.return_1
    lda.z mulu16_sel.return+1
    sta.z mulu16_sel.return_1+1
    jmp __b8
    // sin16s::@8
  __b8:
    // [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
    // [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
    // [157] call mulu16_sel 
    // [178] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel]
  mulu16_sel_from___b8:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
    // [178] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 
    lda #<$10000/6
    sta.z mulu16_sel.v2
    lda #>$10000/6
    sta.z mulu16_sel.v2+1
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
    jmp __b9
    // sin16s::@9
  __b9:
    // [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
    // [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 
    lda.z x1
    sec
    sbc.z x3_6
    sta.z usinx
    lda.z x1+1
    sbc.z x3_6+1
    sta.z usinx+1
    // [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
    // [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [163] call mulu16_sel 
    // [178] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel]
  mulu16_sel_from___b9:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return
    sta.z mulu16_sel.return_1
    lda.z mulu16_sel.return+1
    sta.z mulu16_sel.return_1+1
    jmp __b10
    // sin16s::@10
  __b10:
    // [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
    // [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
    // [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [168] call mulu16_sel 
    // [178] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel]
  mulu16_sel_from___b10:
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
    jmp __b11
    // sin16s::@11
  __b11:
    // [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
    // [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 
    lsr.z x5_128+1
    ror.z x5_128
    lsr.z x5_128+1
    ror.z x5_128
    lsr.z x5_128+1
    ror.z x5_128
    lsr.z x5_128+1
    ror.z x5_128
    // [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda.z usinx
    clc
    adc.z x5_128
    sta.z usinx
    lda.z usinx+1
    adc.z x5_128+1
    sta.z usinx+1
    // [173] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 
    cpy #0
    beq __b12
    jmp __b6
    // sin16s::@6
  __b6:
    // [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 
    sec
    lda #0
    sbc.z sinx
    sta.z sinx
    lda #0
    sbc.z sinx+1
    sta.z sinx+1
    // [175] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3]
  __b3_from___b12:
  __b3_from___b6:
    // [175] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy 
    jmp __b3
    // sin16s::@3
  __b3:
    jmp __breturn
    // sin16s::@return
  __breturn:
    // [176] return 
    rts
    // sin16s::@12
  __b12:
    // [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
    jmp __b3_from___b12
}
  // 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 zp($12) v1, word zp($19) v2, byte register(X) select)
mulu16_sel: {
    .label __0 = 8
    .label __1 = 8
    .label v1 = $12
    .label v2 = $19
    .label return = $21
    .label return_1 = $12
    // [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 
    lda.z v1
    sta.z mul16u.a
    lda.z v1+1
    sta.z mul16u.a+1
    // [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
    // [181] call mul16u 
    // [127] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u]
  mul16u_from_mulu16_sel:
    // [127] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy 
    // [127] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy 
    jsr mul16u
    // [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2
    jmp __b1
    // mulu16_sel::@1
  __b1:
    // [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
    // [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx 
    cpx #0
    beq !e+
  !:
    asl.z __1
    rol.z __1+1
    rol.z __1+2
    rol.z __1+3
    dex
    bne !-
  !e:
    // [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 
    lda.z __1+2
    sta.z return
    lda.z __1+3
    sta.z return+1
    jmp __breturn
    // mulu16_sel::@return
  __breturn:
    // [186] return 
    rts
}
  // 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 = $21
    .label quotient_lo = $e
    .label return = $15
    // [188] call divr16u 
    // [197] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
  divr16u_from_div32u16u:
    // [197] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28>>$10
    sta.z divr16u.dividend
    lda #>PI2_u4f28>>$10
    sta.z divr16u.dividend+1
    // [197] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 
    lda #<0
    sta.z divr16u.rem
    lda #>0
    sta.z divr16u.rem+1
    jsr divr16u
    // [189] (word) divr16u::return#2 ← (word) divr16u::return#0
    jmp __b1
    // div32u16u::@1
  __b1:
    // [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 
    lda.z divr16u.return
    sta.z quotient_hi
    lda.z divr16u.return+1
    sta.z quotient_hi+1
    // [191] (word) divr16u::rem#4 ← (word) rem16u#1
    // [192] call divr16u 
    // [197] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u]
  divr16u_from___b1:
    // [197] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28&$ffff
    sta.z divr16u.dividend
    lda #>PI2_u4f28&$ffff
    sta.z divr16u.dividend+1
    // [197] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy 
    jsr divr16u
    // [193] (word) divr16u::return#3 ← (word) divr16u::return#0
    jmp __b2
    // div32u16u::@2
  __b2:
    // [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
    // [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 
    lda.z quotient_hi
    sta.z return+2
    lda.z quotient_hi+1
    sta.z return+3
    lda.z quotient_lo
    sta.z return
    lda.z quotient_lo+1
    sta.z return+1
    jmp __breturn
    // div32u16u::@return
  __breturn:
    // [196] return 
    rts
}
  // 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 zp($19) dividend, word zp($c) rem)
divr16u: {
    .label rem = $c
    .label dividend = $19
    .label quotient = $e
    .label return = $e
    // [198] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
  __b1_from_divr16u:
    // [198] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [198] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z quotient
    lda #>0
    sta.z quotient+1
    // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy 
    // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy 
    jmp __b1
    // [198] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
  __b1_from___b3:
    // [198] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
    // [198] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
    // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
    // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
    jmp __b1
    // divr16u::@1
  __b1:
    // [199] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z rem
    rol.z rem+1
    // [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 
    lda.z dividend+1
    // [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 
    and #$80
    // [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq __b2_from___b1
    jmp __b4
    // divr16u::@4
  __b4:
    // [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora.z rem
    sta.z rem
    // [204] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
  __b2_from___b1:
  __b2_from___b4:
    // [204] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
    jmp __b2
    // divr16u::@2
  __b2:
    // [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z dividend
    rol.z dividend+1
    // [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z quotient
    rol.z quotient+1
    // [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 
    lda.z rem+1
    cmp #>XSIN_SIZE
    bcc __b3_from___b2
    bne !+
    lda.z rem
    cmp #<XSIN_SIZE
    bcc __b3_from___b2
  !:
    jmp __b5
    // divr16u::@5
  __b5:
    // [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc.z quotient
    bne !+
    inc.z quotient+1
  !:
    // [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 
    lda.z rem
    sec
    sbc #<XSIN_SIZE
    sta.z rem
    lda.z rem+1
    sbc #>XSIN_SIZE
    sta.z rem+1
    // [210] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
  __b3_from___b2:
  __b3_from___b5:
    // [210] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
    // [210] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
    jmp __b3
    // divr16u::@3
  __b3:
    // [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne __b1_from___b3
    jmp __b6
    // divr16u::@6
  __b6:
    // [213] (word) rem16u#1 ← (word) divr16u::rem#11
    jmp __breturn
    // divr16u::@return
  __breturn:
    // [214] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zp($10) str, byte register(X) c)
memset: {
    .label end = $23
    .label dst = $10
    .label str = $10
    jmp __b1
    // memset::@1
  __b1:
    // [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 
    lda.z str
    clc
    adc #<$3e8
    sta.z end
    lda.z str+1
    adc #>$3e8
    sta.z end+1
    // [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
    // [218] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
  __b2_from___b1:
  __b2_from___b3:
    // [218] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy 
    jmp __b2
    // memset::@2
  __b2:
    // [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 
    lda.z dst+1
    cmp.z end+1
    bne __b3
    lda.z dst
    cmp.z end
    bne __b3
    jmp __breturn
    // memset::@return
  __breturn:
    // [220] return 
    rts
    // memset::@3
  __b3:
    // [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx 
    txa
    ldy #0
    sta (dst),y
    // [222] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp __b2_from___b3
}
  // File Data
  .align $100
  xsin: .fill 2*XSIN_SIZE, 0
.pc = LOGO "LOGO"
  .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
    .for (var y=0; y<6	; y++)
        .for (var x=0;x<40; x++)
            .for(var cp=0; cp<8; cp++)
                .byte logoPic.getMulticolorByte(x,cp+y*8)


ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __bend
Removing instruction jmp toD0181
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b5
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __b4
Removing instruction jmp __b2
Removing instruction jmp __b5
Removing instruction jmp __breturn
Removing instruction jmp __b15_1
Removing instruction jmp __b15_2
Removing instruction jmp __b15_3
Removing instruction jmp __b15_4
Removing instruction jmp __b15_5
Removing instruction jmp __b7
Removing instruction jmp __b7_1
Removing instruction jmp __b7_2
Removing instruction jmp __b7_3
Removing instruction jmp __b7_4
Removing instruction jmp __b7_5
Removing instruction jmp __b4
Removing instruction jmp __b8
Removing instruction jmp __b11
Removing instruction jmp __b32_1
Removing instruction jmp __b32_2
Removing instruction jmp __b32_3
Removing instruction jmp __b32_4
Removing instruction jmp __b32_5
Removing instruction jmp __b13
Removing instruction jmp __b24_1
Removing instruction jmp __b24_2
Removing instruction jmp __b24_3
Removing instruction jmp __b24_4
Removing instruction jmp __b24_5
Removing instruction jmp __b10
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b4
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b4
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b1
Removing instruction jmp __b5
Removing instruction jmp __b2
Removing instruction jmp __b7
Removing instruction jmp __b8
Removing instruction jmp __b9
Removing instruction jmp __b10
Removing instruction jmp __b11
Removing instruction jmp __b6
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b4
Removing instruction jmp __b2
Removing instruction jmp __b5
Removing instruction jmp __b3
Removing instruction jmp __b6
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda BGCOL2
Removing instruction lda #>0
Removing instruction lda #>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 __bbegin with __b2
Replacing label __b1_from___b1 with __b1
Replacing label __b6_from___b5 with __b4
Replacing label __b6_from___b5 with __b4
Replacing label __b11_from___b13 with __b11
Replacing label __b1_from___b4 with __b2
Replacing label __b3_from___b2 with __b3
Replacing label __b2_from___b1 with __b2
Replacing label __b2_from___b1 with __b2
Replacing label __b2_from___b1 with __b2
Replacing label __b2_from___b1 with __b2
Replacing label __b3_from___b12 with __b3
Replacing label __b2_from___b1 with __b2
Replacing label __b3_from___b2 with __b3
Replacing label __b3_from___b2 with __b3
Replacing label __b1_from___b3 with __b1
Replacing label __b2_from___b3 with __b2
Removing instruction __bbegin:
Removing instruction __b1:
Removing instruction __b2_from___b1:
Removing instruction __bend_from___b2:
Removing instruction toD0181_from_main:
Removing instruction toD0181:
Removing instruction __b4_from___b3:
Removing instruction memset_from___b4:
Removing instruction __b1_from___b1:
Removing instruction __b2_from___b1:
Removing instruction sin16s_gen2_from___b2:
Removing instruction __b5_from___b2:
Removing instruction loop_from___b5:
Removing instruction __b6_from___b5:
Removing instruction __b6:
Removing instruction __b4_from___b6:
Removing instruction __b11_from___b13:
Removing instruction __b11_from___b8:
Removing instruction __b1_from___b3:
Removing instruction __b1_from___b3:
Removing instruction __b1_from___b4:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __b3_from___b2:
Removing instruction __b3_from___b4:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b5:
Removing instruction mulu16_sel_from___b8:
Removing instruction __b3_from___b12:
Removing instruction __b3_from___b6:
Removing instruction __breturn:
Removing instruction __b1_from___b3:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b4:
Removing instruction __b3_from___b2:
Removing instruction __b3_from___b5:
Removing instruction __breturn:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b3:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __bend:
Removing instruction __b3:
Removing instruction memset_from___b3:
Removing instruction __b4:
Removing instruction __b1_from___b4:
Removing instruction __b2:
Removing instruction __b5:
Removing instruction __breturn:
Removing instruction __b1_from_loop:
Removing instruction __b3:
Removing instruction __b5:
Removing instruction __b4_from___b5:
Removing instruction __b1_from___b4:
Removing instruction __b2_from_render_logo:
Removing instruction __b5_from___b2:
Removing instruction __b15_1:
Removing instruction __b15_2:
Removing instruction __b15_3:
Removing instruction __b15_4:
Removing instruction __b15_5:
Removing instruction __b7:
Removing instruction __b5_from___b7:
Removing instruction __b7_1:
Removing instruction __b7_2:
Removing instruction __b7_3:
Removing instruction __b7_4:
Removing instruction __b7_5:
Removing instruction __b4:
Removing instruction __b2_from___b4:
Removing instruction __b8_from___b1:
Removing instruction __b32_1:
Removing instruction __b32_2:
Removing instruction __b32_3:
Removing instruction __b32_4:
Removing instruction __b32_5:
Removing instruction __b13:
Removing instruction __b24_1:
Removing instruction __b24_2:
Removing instruction __b24_3:
Removing instruction __b24_4:
Removing instruction __b24_5:
Removing instruction __b10:
Removing instruction __b8_from___b10:
Removing instruction div32u16u_from_sin16s_gen2:
Removing instruction __b3:
Removing instruction __breturn:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __b1_from___b5:
Removing instruction mul16u_from_mul16s:
Removing instruction __b4:
Removing instruction __b3:
Removing instruction __b1_from_mul16u:
Removing instruction __breturn:
Removing instruction __b4:
Removing instruction __b1_from___b3:
Removing instruction __b4:
Removing instruction __b1_from___b4:
Removing instruction __b5:
Removing instruction mulu16_sel_from___b2:
Removing instruction __b7:
Removing instruction mulu16_sel_from___b7:
Removing instruction __b8:
Removing instruction __b9:
Removing instruction mulu16_sel_from___b9:
Removing instruction __b10:
Removing instruction mulu16_sel_from___b10:
Removing instruction __b11:
Removing instruction __b6:
Removing instruction mul16u_from_mulu16_sel:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction divr16u_from_div32u16u:
Removing instruction __b1:
Removing instruction divr16u_from___b1:
Removing instruction __b2:
Removing instruction __breturn:
Removing instruction __b1_from_divr16u:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __b6:
Removing instruction __b1:
Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Replacing jump to rts with rts in jmp __breturn
Skipping double jump to __b3 in beq __b12
Replacing jump to rts with rts in jmp __b3
Succesful ASM optimization Pass5DoubleJumpElimination
Relabelling long label __b1_from_sin16s to b1
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp __b1
Removing instruction jmp __b4
Removing instruction jmp __b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #<0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction __b2:
Removing instruction __breturn:
Removing instruction __b12:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction rts
Succesful ASM optimization Pass5UnreachableCodeElimination

FINAL SYMBOL TABLE
(label) @1
(label) @2
(label) @begin
(label) @end
(const byte*) BGCOL = (byte*) 53281
(const byte*) BGCOL2 = (byte*) 53282
(const byte*) BGCOL3 = (byte*) 53283
(const byte) BLACK = (byte) 0
(const byte*) BORDERCOL = (byte*) 53280
(const byte*) COLS = (byte*) 55296
(const byte*) D016 = (byte*) 53270
(const byte*) D018 = (byte*) 53272
(const byte) DARK_GREY = (byte) $b
(const byte*) LOGO = (byte*) 8192
(const dword) PI2_u4f28 = (dword) $6487ed51
(const dword) PI_HALF_u4f28 = (dword) $1921fb54
(const dword) PI_u4f28 = (dword) $3243f6a9
(const byte*) RASTER = (byte*) 53266
(const byte*) SCREEN = (byte*) 1024
(const byte) SIZEOF_SIGNED_WORD = (byte) 2
(const byte) VIC_MCM = (byte) $10
(const byte) WHITE = (byte) 1
(const word) XSIN_SIZE = (word) $200
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(label) div32u16u::@1
(label) div32u16u::@2
(label) div32u16u::@return
(dword) div32u16u::dividend
(word) div32u16u::divisor
(dword) div32u16u::quotient
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:33 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:14 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp[4]:21 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:21 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[2]:25 2.75
(word) divr16u::dividend#3 dividend zp[2]:25 5.0
(word) divr16u::dividend#5 dividend zp[2]:25 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[2]:14 16.5
(word) divr16u::quotient#2 quotient zp[2]:14 11.0
(word) divr16u::quotient#3 quotient zp[2]:14 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp[2]:12 8.25
(word) divr16u::rem#1 rem zp[2]:12 22.0
(word) divr16u::rem#10 rem zp[2]:12 4.0
(word) divr16u::rem#11 rem zp[2]:12 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:12 22.0
(word) divr16u::rem#4 rem zp[2]:12 4.0
(word) divr16u::rem#5 rem zp[2]:12 24.0
(word) divr16u::rem#6 rem zp[2]:12 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp[2]:14 5.285714285714286
(word) divr16u::return#2 return zp[2]:14 4.0
(word) divr16u::return#3 return zp[2]:14 4.0
(void()) loop()
(signed word*~) loop::$2 zp[2]:18 22.0
(word~) loop::$7 zp[2]:18 22.0
(label) loop::@1
(label) loop::@2
(label) loop::@3
(label) loop::@4
(label) loop::@5
(label) loop::@6
(signed word) loop::xpos
(signed word) loop::xpos#0 xpos zp[2]:18 22.0
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@return
(byte) main::ch
(byte) main::ch#1 reg byte x 16.5
(byte) main::ch#2 reg byte x 22.0
(label) main::toD0181
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) LOGO/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@2
(label) memset::@3
(label) memset::@return
(byte) memset::c
(byte) memset::c#4 reg byte x 1.5714285714285714
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:16 22.0
(byte*) memset::dst#2 dst zp[2]:16 15.333333333333332
(byte*) memset::dst#4 dst zp[2]:16 4.0
(byte*) memset::end
(byte*) memset::end#0 end zp[2]:35 2.1666666666666665
(word) memset::num
(void*) memset::return
(void*) memset::str
(void*) memset::str#3 str zp[2]:16
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 zp[2]:31 4.0
(word~) mul16s::$9 zp[2]:31 4.0
(label) mul16s::@1
(label) mul16s::@2
(label) mul16s::@3
(label) mul16s::@4
(label) mul16s::@return
(signed word) mul16s::a
(signed word) mul16s::a#0 a zp[2]:16 2.6
(signed word) mul16s::b
(dword) mul16s::m
(dword) mul16s::m#0 m zp[4]:8 2.0
(dword) mul16s::m#1 m zp[4]:8 4.0
(dword) mul16s::m#4 m zp[4]:8 4.0
(signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp[4]:8 4.333333333333333
(signed dword) mul16s::return#2 return zp[4]:8 22.0
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte~) mul16u::$1 reg byte a 202.0
(label) mul16u::@1
(label) mul16u::@2
(label) mul16u::@3
(label) mul16u::@4
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp[2]:14 101.0
(word) mul16u::a#1 a zp[2]:14 4.0
(word) mul16u::a#2 a zp[2]:14 2.0
(word) mul16u::a#3 a zp[2]:14 67.66666666666666
(word) mul16u::a#6 a zp[2]:14 3.0
(word) mul16u::b
(word) mul16u::b#1 b zp[2]:25 4.0
(word) mul16u::b#2 b zp[2]:25 2.0
(dword) mul16u::mb
(dword) mul16u::mb#0 mb zp[4]:27 4.0
(dword) mul16u::mb#1 mb zp[4]:27 202.0
(dword) mul16u::mb#2 mb zp[4]:27 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp[4]:8 202.0
(dword) mul16u::res#2 res zp[4]:8 43.85714285714286
(dword) mul16u::res#6 res zp[4]:8 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp[4]:8 4.0
(dword) mul16u::return#3 return zp[4]:8 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 zp[4]:8 4.0
(dword~) mulu16_sel::$1 zp[4]:8 4.0
(label) mulu16_sel::@1
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp[2]:33 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:18 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:18 4.0
(word) mulu16_sel::return#11 return zp[2]:33 4.0
(word) mulu16_sel::return#12 return zp[2]:33 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:33 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[2]:18 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:18 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:18 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp[2]:25 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:25 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:25 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:25 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:25 5.0
(word) rem16u
(word) rem16u#1 rem16u zp[2]:12 0.8
(void()) render_logo((signed word) render_logo::xpos)
(byte~) render_logo::$0 reg byte a 4.0
(byte~) render_logo::$1 reg byte a 4.0
(byte~) render_logo::$2 reg byte a 4.0
(signed word~) render_logo::$3 zp[2]:25 2.0
(byte~) render_logo::$33 reg byte a 202.0
(byte~) render_logo::$36 reg byte a 202.0
(byte~) render_logo::$39 reg byte a 202.0
(byte~) render_logo::$42 reg byte a 202.0
(byte~) render_logo::$45 reg byte a 202.0
(byte~) render_logo::$73 reg byte a 202.0
(byte~) render_logo::$76 reg byte a 202.0
(byte~) render_logo::$79 reg byte a 202.0
(byte~) render_logo::$82 reg byte a 202.0
(byte~) render_logo::$85 reg byte a 202.0
(label) render_logo::@1
(label) render_logo::@10
(label) render_logo::@11
(label) render_logo::@12
(label) render_logo::@13
(label) render_logo::@15_1
(label) render_logo::@15_2
(label) render_logo::@15_3
(label) render_logo::@15_4
(label) render_logo::@15_5
(label) render_logo::@2
(label) render_logo::@24_1
(label) render_logo::@24_2
(label) render_logo::@24_3
(label) render_logo::@24_4
(label) render_logo::@24_5
(label) render_logo::@3
(label) render_logo::@32_1
(label) render_logo::@32_2
(label) render_logo::@32_3
(label) render_logo::@32_4
(label) render_logo::@32_5
(label) render_logo::@4
(label) render_logo::@5
(label) render_logo::@6
(label) render_logo::@7
(label) render_logo::@7_1
(label) render_logo::@7_2
(label) render_logo::@7_3
(label) render_logo::@7_4
(label) render_logo::@7_5
(label) render_logo::@8
(label) render_logo::@9
(label) render_logo::@return
(byte) render_logo::line
(byte) render_logo::logo_idx
(signed byte) render_logo::logo_idx#1 reg byte a 2.0
(byte) render_logo::logo_idx#10 logo_idx zp[1]:2 57.714285714285715
(byte) render_logo::logo_idx#11 logo_idx_1 zp[1]:3 65.07142857142857
(byte) render_logo::logo_idx#14 logo_idx_1 zp[1]:3 4.0
(byte) render_logo::logo_idx#3 logo_idx zp[1]:2 202.0
(byte) render_logo::logo_idx#4 logo_idx_1 zp[1]:3 202.0
(byte) render_logo::logo_start
(byte) render_logo::screen_idx
(byte) render_logo::screen_idx#10 reg byte y 77.6923076923077
(byte) render_logo::screen_idx#15 reg byte y 126.25
(byte) render_logo::screen_idx#18 reg byte y 126.25
(byte) render_logo::screen_idx#21 reg byte y 69.92307692307692
(byte) render_logo::screen_idx#3 reg byte y 202.0
(byte) render_logo::screen_idx#4 reg byte y 101.0
(byte) render_logo::screen_idx#5 reg byte y 101.0
(byte) render_logo::screen_idx#6 reg byte y 202.0
(signed byte) render_logo::x_char
(signed byte) render_logo::x_char#0 x_char zp[1]:20 0.36363636363636365
(signed word) render_logo::xpos
(signed word) render_logo::xpos#0 xpos zp[2]:18 2.142857142857143
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 zp[4]:27 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
(label) sin16s::@12
(label) sin16s::@2
(label) sin16s::@3
(label) sin16s::@4
(label) sin16s::@5
(label) sin16s::@6
(label) sin16s::@7
(label) sin16s::@8
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 reg byte y 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp[2]:16 22.0
(signed word) sin16s::return#1 return zp[2]:16 5.0
(signed word) sin16s::return#5 return zp[2]:16 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp[2]:16 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp[2]:16 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:16 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp[4]:8 8.5
(dword) sin16s::x#1 x zp[4]:8 4.0
(dword) sin16s::x#2 x zp[4]:8 4.0
(dword) sin16s::x#4 x zp[4]:8 5.0
(dword) sin16s::x#6 x zp[4]:8 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp[2]:31 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp[2]:18 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp[2]:18 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp[2]:33 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp[2]:18 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp[2]:33 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp[2]:33 4.0
(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
(signed dword~) sin16s_gen2::$6 zp[4]:8 22.0
(word~) sin16s_gen2::$9 zp[2]:25 11.0
(label) sin16s_gen2::@1
(label) sin16s_gen2::@2
(label) sin16s_gen2::@3
(label) sin16s_gen2::@4
(label) sin16s_gen2::@5
(label) sin16s_gen2::@return
(signed word) sin16s_gen2::ampl
(const signed word) sin16s_gen2::ampl#0 ampl = (const signed word) sin16s_gen2::max#0-(const signed word) sin16s_gen2::min#0
(word) sin16s_gen2::i
(word) sin16s_gen2::i#1 i zp[2]:35 22.0
(word) sin16s_gen2::i#2 i zp[2]:35 2.5384615384615383
(signed word) sin16s_gen2::max
(const signed word) sin16s_gen2::max#0 max = (signed word) $140
(signed word) sin16s_gen2::min
(const signed word) sin16s_gen2::min#0 min = (signed word) -$140
(signed word) sin16s_gen2::offs
(signed word*) sin16s_gen2::sintab
(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:12 7.333333333333333
(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:12 3.0
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 step zp[4]:21 0.8666666666666666
(word) sin16s_gen2::wavelength
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#1 x zp[4]:4 11.0
(dword) sin16s_gen2::x#2 x zp[4]:4 2.75
(const signed word*) xsin[(const word) XSIN_SIZE]  = { fill( XSIN_SIZE, 0) }
(word) xsin_idx
(word) xsin_idx#11 xsin_idx zp[2]:35 4.125
(word) xsin_idx#19 xsin_idx zp[2]:35 11.0
(word) xsin_idx#3 xsin_idx zp[2]:35 11.0

reg byte x [ main::ch#2 main::ch#1 ]
reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
zp[1]:2 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
zp[1]:3 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ]
reg byte x [ mulu16_sel::select#5 ]
zp[2]:12 [ 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 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp[2]:16 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
reg byte x [ memset::c#4 ]
zp[2]:18 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 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 ]
reg byte a [ render_logo::$0 ]
reg byte a [ render_logo::$1 ]
reg byte a [ render_logo::$2 ]
zp[1]:20 [ render_logo::x_char#0 ]
reg byte a [ render_logo::$33 ]
reg byte a [ render_logo::$36 ]
reg byte a [ render_logo::$39 ]
reg byte a [ render_logo::$42 ]
reg byte a [ render_logo::$45 ]
reg byte a [ render_logo::logo_idx#1 ]
reg byte a [ render_logo::$73 ]
reg byte a [ render_logo::$76 ]
reg byte a [ render_logo::$79 ]
reg byte a [ render_logo::$82 ]
reg byte a [ render_logo::$85 ]
zp[4]:21 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp[2]:25 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
reg byte a [ mul16u::$1 ]
zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp[2]:31 [ sin16s::x1#0 mul16s::$9 mul16s::$16 ]
zp[2]:33 [ div32u16u::quotient_hi#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 a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]
zp[2]:35 [ memset::end#0 sin16s_gen2::i#2 sin16s_gen2::i#1 xsin_idx#11 xsin_idx#19 xsin_idx#3 ]


FINAL ASSEMBLER
Score: 46731

  // File Comments
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
  // Global Constants & labels
  .label RASTER = $d012
  .label BORDERCOL = $d020
  .label BGCOL = $d021
  .label BGCOL2 = $d022
  .label BGCOL3 = $d023
  .label D016 = $d016
  .const VIC_MCM = $10
  .label D018 = $d018
  // Color Ram
  .label COLS = $d800
  // The colors of the C64
  .const BLACK = 0
  .const WHITE = 1
  .const DARK_GREY = $b
  // 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
  .const XSIN_SIZE = $200
  .const SIZEOF_SIGNED_WORD = 2
  .label SCREEN = $400
  .label LOGO = $2000
  // Remainder after unsigned 16-bit division
  .label rem16u = $c
  .label xsin_idx = $23
  // @begin
  // @1
  // kickasm
  // kickasm(location (const byte*) LOGO) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))     .for (var y=0; y<6	; y++)         .for (var x=0;x<40; x++)             .for(var cp=0; cp<8; cp++)                 .byte logoPic.getMulticolorByte(x,cp+y*8)  }}
  // [2] phi from @1 to @2 [phi:@1->@2]
  // @2
  // [3] call main 
  // [4] phi from @2 to @end [phi:@2->@end]
  // @end
  // main
main: {
    .const toD0181_return = (>(SCREEN&$3fff)*4)|(>LOGO)/4&$f
    // asm
    // asm { sei  }
    sei
    // *BORDERCOL = WHITE
    // [6] *((const byte*) BORDERCOL) ← (const byte) WHITE -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta BORDERCOL
    // *BGCOL2 = DARK_GREY
    // [7] *((const byte*) BGCOL2) ← (const byte) DARK_GREY -- _deref_pbuc1=vbuc2 
    lda #DARK_GREY
    sta BGCOL2
    // *BGCOL = *BGCOL2 = DARK_GREY
    // [8] *((const byte*) BGCOL) ← *((const byte*) BGCOL2) -- _deref_pbuc1=_deref_pbuc2 
    sta BGCOL
    // *BGCOL3 = BLACK
    // [9] *((const byte*) BGCOL3) ← (const byte) BLACK -- _deref_pbuc1=vbuc2 
    lda #BLACK
    sta BGCOL3
    // [10] phi from main to main::toD0181 [phi:main->main::toD0181]
    // main::toD0181
    // main::@3
    // *D018 = toD018(SCREEN, LOGO)
    // [11] *((const byte*) D018) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
    // *D016 = VIC_MCM
    // [12] *((const byte*) D016) ← (const byte) VIC_MCM -- _deref_pbuc1=vbuc2 
    lda #VIC_MCM
    sta D016
    // memset(SCREEN, BLACK, 1000)
    // [13] call memset 
    // [215] phi from main::@3 to memset [phi:main::@3->memset]
    // [215] phi (byte) memset::c#4 = (const byte) BLACK [phi:main::@3->memset#0] -- vbuxx=vbuc1 
    ldx #BLACK
    // [215] phi (void*) memset::str#3 = (void*)(const byte*) SCREEN [phi:main::@3->memset#1] -- pvoz1=pvoc1 
    lda #<SCREEN
    sta.z memset.str
    lda #>SCREEN
    sta.z memset.str+1
    jsr memset
    // [14] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
    // main::@4
    // memset(COLS, WHITE|8, 1000)
    // [15] call memset 
    // [215] phi from main::@4 to memset [phi:main::@4->memset]
    // [215] phi (byte) memset::c#4 = (const byte) WHITE|(byte) 8 [phi:main::@4->memset#0] -- vbuxx=vbuc1 
    ldx #WHITE|8
    // [215] phi (void*) memset::str#3 = (void*)(const byte*) COLS [phi:main::@4->memset#1] -- pvoz1=pvoc1 
    lda #<COLS
    sta.z memset.str
    lda #>COLS
    sta.z memset.str+1
    jsr memset
    // [16] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
    // [16] phi (byte) main::ch#2 = (byte) 0 [phi:main::@4->main::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [16] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
    // [16] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@1->main::@1#0] -- register_copy 
    // main::@1
  __b1:
    // SCREEN[ch] = ch
    // [17] *((const byte*) SCREEN + (byte) main::ch#2) ← (byte) main::ch#2 -- pbuc1_derefidx_vbuxx=vbuxx 
    txa
    sta SCREEN,x
    // for(byte ch: 0..239)
    // [18] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuxx=_inc_vbuxx 
    inx
    // [19] if((byte) main::ch#1!=(byte) $f0) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$f0
    bne __b1
    // [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
    // main::@2
    // sin16s_gen2(xsin, XSIN_SIZE, -320, 320)
    // [21] call sin16s_gen2 
    // [97] phi from main::@2 to sin16s_gen2 [phi:main::@2->sin16s_gen2]
    jsr sin16s_gen2
    // [22] phi from main::@2 to main::@5 [phi:main::@2->main::@5]
    // main::@5
    // loop()
    // [23] call loop 
    // [25] phi from main::@5 to loop [phi:main::@5->loop]
    jsr loop
    // main::@return
    // }
    // [24] return 
    rts
}
  // loop
loop: {
    .label __2 = $12
    .label __7 = $12
    .label xpos = $12
    // [26] phi from loop to loop::@1 [phi:loop->loop::@1]
    // [26] phi (word) xsin_idx#11 = (word) 0 [phi:loop->loop::@1#0] -- vwuz1=vwuc1 
    lda #<0
    sta.z xsin_idx
    sta.z xsin_idx+1
    // loop::@1
  __b1:
  // Wait for the raster to reach the bottom of the screen
    // loop::@2
  __b2:
    // while(*RASTER!=$ff)
    // [27] if(*((const byte*) RASTER)!=(byte) $ff) goto loop::@2 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$ff
    cmp RASTER
    bne __b2
    // loop::@3
    // (*BORDERCOL)++;
    // [28] *((const byte*) BORDERCOL) ← ++ *((const byte*) BORDERCOL) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
    // xsin+xsin_idx
    // [29] (word~) loop::$7 ← (word) xsin_idx#11 << (byte) 1 -- vwuz1=vwuz2_rol_1 
    lda.z xsin_idx
    asl
    sta.z __7
    lda.z xsin_idx+1
    rol
    sta.z __7+1
    // [30] (signed word*~) loop::$2 ← (const signed word*) xsin + (word~) loop::$7 -- pwsz1=pwsc1_plus_vwuz1 
    clc
    lda.z __2
    adc #<xsin
    sta.z __2
    lda.z __2+1
    adc #>xsin
    sta.z __2+1
    // xpos = *(xsin+xsin_idx)
    // [31] (signed word) loop::xpos#0 ← *((signed word*~) loop::$2) -- vwsz1=_deref_pwsz1 
    ldy #0
    lda (xpos),y
    pha
    iny
    lda (xpos),y
    sta.z xpos+1
    pla
    sta.z xpos
    // render_logo(xpos)
    // [32] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
    // [33] call render_logo 
    jsr render_logo
    // loop::@5
    // if(++xsin_idx==XSIN_SIZE)
    // [34] (word) xsin_idx#3 ← ++ (word) xsin_idx#11 -- vwuz1=_inc_vwuz1 
    inc.z xsin_idx
    bne !+
    inc.z xsin_idx+1
  !:
    // [35] if((word) xsin_idx#3!=(const word) XSIN_SIZE) goto loop::@6 -- vwuz1_neq_vwuc1_then_la1 
    lda.z xsin_idx+1
    cmp #>XSIN_SIZE
    bne __b4
    lda.z xsin_idx
    cmp #<XSIN_SIZE
    bne __b4
    // [37] phi from loop::@5 to loop::@4 [phi:loop::@5->loop::@4]
    // [37] phi (word) xsin_idx#19 = (byte) 0 [phi:loop::@5->loop::@4#0] -- vwuz1=vbuc1 
    lda #<0
    sta.z xsin_idx
    sta.z xsin_idx+1
    // [36] phi from loop::@5 to loop::@6 [phi:loop::@5->loop::@6]
    // loop::@6
    // [37] phi from loop::@6 to loop::@4 [phi:loop::@6->loop::@4]
    // [37] phi (word) xsin_idx#19 = (word) xsin_idx#3 [phi:loop::@6->loop::@4#0] -- register_copy 
    // loop::@4
  __b4:
    // (*BORDERCOL)--;
    // [38] *((const byte*) BORDERCOL) ← -- *((const byte*) BORDERCOL) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
    // [26] phi from loop::@4 to loop::@1 [phi:loop::@4->loop::@1]
    // [26] phi (word) xsin_idx#11 = (word) xsin_idx#19 [phi:loop::@4->loop::@1#0] -- register_copy 
    jmp __b1
}
  // render_logo
// render_logo(signed word zp($12) xpos)
render_logo: {
    .label __3 = $19
    .label xpos = $12
    .label x_char = $14
    .label logo_idx = 2
    .label logo_idx_1 = 3
    // (byte)xpos
    // [39] (byte~) render_logo::$0 ← (byte)(signed word) render_logo::xpos#0 -- vbuaa=_byte_vwsz1 
    lda.z xpos
    // (byte)xpos&7
    // [40] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte) 7 -- vbuaa=vbuaa_band_vbuc1 
    and #7
    // VIC_MCM|((byte)xpos&7)
    // [41] (byte~) render_logo::$2 ← (const byte) VIC_MCM | (byte~) render_logo::$1 -- vbuaa=vbuc1_bor_vbuaa 
    ora #VIC_MCM
    // *D016 = VIC_MCM|((byte)xpos&7)
    // [42] *((const byte*) D016) ← (byte~) render_logo::$2 -- _deref_pbuc1=vbuaa 
    sta D016
    // xpos/8
    // [43] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte) 3 -- vwsz1=vwsz2_ror_3 
    lda.z xpos+1
    cmp #$80
    ror
    sta.z __3+1
    lda.z xpos
    ror
    sta.z __3
    lda.z __3+1
    cmp #$80
    ror.z __3+1
    ror.z __3
    lda.z __3+1
    cmp #$80
    ror.z __3+1
    ror.z __3
    // x_char = (signed byte)(xpos/8)
    // [44] (signed byte) render_logo::x_char#0 ← (signed byte)(signed word~) render_logo::$3 -- vbsz1=_sbyte_vwsz2 
    lda.z __3
    sta.z x_char
    // if(xpos<0)
    // [45] if((signed word) render_logo::xpos#0<(signed byte) 0) goto render_logo::@1 -- vwsz1_lt_0_then_la1 
    lda.z xpos+1
    bmi __b1
    // [46] phi from render_logo to render_logo::@2 [phi:render_logo->render_logo::@2]
    // [46] phi (byte) render_logo::screen_idx#18 = (byte) 0 [phi:render_logo->render_logo::@2#0] -- vbuyy=vbuc1 
    ldy #0
    // render_logo::@2
  __b2:
    // while(screen_idx!=logo_start)
    // [47] if((byte) render_logo::screen_idx#18!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@3 -- vbuyy_neq_vbuz1_then_la1 
    cpy.z x_char
    bne __b3
    // [48] phi from render_logo::@2 to render_logo::@5 [phi:render_logo::@2->render_logo::@5]
    // [48] phi (byte) render_logo::logo_idx#10 = (byte) 0 [phi:render_logo::@2->render_logo::@5#0] -- vbuz1=vbuc1 
    lda #0
    sta.z logo_idx
    // [48] phi (byte) render_logo::screen_idx#10 = (byte) render_logo::screen_idx#18 [phi:render_logo::@2->render_logo::@5#1] -- register_copy 
    // render_logo::@5
  __b5:
    // while(screen_idx!=40)
    // [49] if((byte) render_logo::screen_idx#10!=(byte) $28) goto render_logo::@6 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne __b6
    // render_logo::@return
    // }
    // [50] return 
    rts
    // render_logo::@6
  __b6:
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [51] *((const byte*) SCREEN + (byte) render_logo::screen_idx#10) ← (byte) render_logo::logo_idx#10 -- pbuc1_derefidx_vbuyy=vbuz1 
    lda.z logo_idx
    sta SCREEN,y
    // render_logo::@15_1
    // logo_idx+40*line
    // [52] (byte~) render_logo::$33 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 1 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*1
    clc
    adc.z logo_idx
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [53] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$33 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*1,y
    // render_logo::@15_2
    // logo_idx+40*line
    // [54] (byte~) render_logo::$36 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 2 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*2
    clc
    adc.z logo_idx
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [55] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$36 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*2,y
    // render_logo::@15_3
    // logo_idx+40*line
    // [56] (byte~) render_logo::$39 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 3 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*3
    clc
    adc.z logo_idx
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [57] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$39 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*3,y
    // render_logo::@15_4
    // logo_idx+40*line
    // [58] (byte~) render_logo::$42 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 4 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*4
    clc
    adc.z logo_idx
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [59] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$42 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*4,y
    // render_logo::@15_5
    // logo_idx+40*line
    // [60] (byte~) render_logo::$45 ← (byte) render_logo::logo_idx#10 + (byte) $28*(byte) 5 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*5
    clc
    adc.z logo_idx
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [61] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#10) ← (byte~) render_logo::$45 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*5,y
    // render_logo::@7
    // screen_idx++;
    // [62] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#10 -- vbuyy=_inc_vbuyy 
    iny
    // logo_idx++;
    // [63] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10 -- vbuz1=_inc_vbuz1 
    inc.z logo_idx
    // [48] phi from render_logo::@7 to render_logo::@5 [phi:render_logo::@7->render_logo::@5]
    // [48] phi (byte) render_logo::logo_idx#10 = (byte) render_logo::logo_idx#3 [phi:render_logo::@7->render_logo::@5#0] -- register_copy 
    // [48] phi (byte) render_logo::screen_idx#10 = (byte) render_logo::screen_idx#4 [phi:render_logo::@7->render_logo::@5#1] -- register_copy 
    jmp __b5
    // render_logo::@3
  __b3:
    // (SCREEN+40*line)[screen_idx] = $00
    // [64] *((const byte*) SCREEN + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN,y
    // render_logo::@7_1
    // [65] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*1,y
    // render_logo::@7_2
    // [66] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*2,y
    // render_logo::@7_3
    // [67] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*3,y
    // render_logo::@7_4
    // [68] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*4,y
    // render_logo::@7_5
    // [69] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#18) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*5,y
    // render_logo::@4
    // screen_idx++;
    // [70] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#18 -- vbuyy=_inc_vbuyy 
    iny
    // [46] phi from render_logo::@4 to render_logo::@2 [phi:render_logo::@4->render_logo::@2]
    // [46] phi (byte) render_logo::screen_idx#18 = (byte) render_logo::screen_idx#3 [phi:render_logo::@4->render_logo::@2#0] -- register_copy 
    jmp __b2
    // render_logo::@1
  __b1:
    // -x_char
    // [71] (signed byte) render_logo::logo_idx#1 ← - (signed byte) render_logo::x_char#0 -- vbsaa=_neg_vbsz1 
    lda.z x_char
    eor #$ff
    clc
    adc #1
    // [72] (byte) render_logo::logo_idx#14 ← (byte)(signed byte) render_logo::logo_idx#1 -- vbuz1=vbuaa 
    sta.z logo_idx_1
    // [73] phi from render_logo::@1 to render_logo::@8 [phi:render_logo::@1->render_logo::@8]
    // [73] phi (byte) render_logo::screen_idx#21 = (byte) 0 [phi:render_logo::@1->render_logo::@8#0] -- vbuyy=vbuc1 
    ldy #0
    // [73] phi (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#14 [phi:render_logo::@1->render_logo::@8#1] -- register_copy 
    // render_logo::@8
  __b8:
    // while(logo_idx!=40)
    // [74] if((byte) render_logo::logo_idx#11!=(byte) $28) goto render_logo::@9 -- vbuz1_neq_vbuc1_then_la1 
    lda #$28
    cmp.z logo_idx_1
    bne __b9
    // [75] phi from render_logo::@13 render_logo::@8 to render_logo::@11 [phi:render_logo::@13/render_logo::@8->render_logo::@11]
    // [75] phi (byte) render_logo::screen_idx#15 = (byte) render_logo::screen_idx#6 [phi:render_logo::@13/render_logo::@8->render_logo::@11#0] -- register_copy 
    // render_logo::@11
  __b11:
    // while(screen_idx!=40)
    // [76] if((byte) render_logo::screen_idx#15!=(byte) $28) goto render_logo::@12 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne __b12
    rts
    // render_logo::@12
  __b12:
    // (SCREEN+40*line)[screen_idx] = $00
    // [77] *((const byte*) SCREEN + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    lda #0
    sta SCREEN,y
    // render_logo::@32_1
    // [78] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*1,y
    // render_logo::@32_2
    // [79] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*2,y
    // render_logo::@32_3
    // [80] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*3,y
    // render_logo::@32_4
    // [81] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*4,y
    // render_logo::@32_5
    // [82] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#15) ← (byte) 0 -- pbuc1_derefidx_vbuyy=vbuc2 
    sta SCREEN+$28*5,y
    // render_logo::@13
    // screen_idx++;
    // [83] (byte) render_logo::screen_idx#6 ← ++ (byte) render_logo::screen_idx#15 -- vbuyy=_inc_vbuyy 
    iny
    jmp __b11
    // render_logo::@9
  __b9:
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [84] *((const byte*) SCREEN + (byte) render_logo::screen_idx#21) ← (byte) render_logo::logo_idx#11 -- pbuc1_derefidx_vbuyy=vbuz1 
    lda.z logo_idx_1
    sta SCREEN,y
    // render_logo::@24_1
    // logo_idx+40*line
    // [85] (byte~) render_logo::$73 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 1 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*1
    clc
    adc.z logo_idx_1
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [86] *((const byte*) SCREEN+(byte) $28*(byte) 1 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$73 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*1,y
    // render_logo::@24_2
    // logo_idx+40*line
    // [87] (byte~) render_logo::$76 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 2 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*2
    clc
    adc.z logo_idx_1
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [88] *((const byte*) SCREEN+(byte) $28*(byte) 2 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$76 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*2,y
    // render_logo::@24_3
    // logo_idx+40*line
    // [89] (byte~) render_logo::$79 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 3 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*3
    clc
    adc.z logo_idx_1
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [90] *((const byte*) SCREEN+(byte) $28*(byte) 3 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$79 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*3,y
    // render_logo::@24_4
    // logo_idx+40*line
    // [91] (byte~) render_logo::$82 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 4 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*4
    clc
    adc.z logo_idx_1
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [92] *((const byte*) SCREEN+(byte) $28*(byte) 4 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$82 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*4,y
    // render_logo::@24_5
    // logo_idx+40*line
    // [93] (byte~) render_logo::$85 ← (byte) render_logo::logo_idx#11 + (byte) $28*(byte) 5 -- vbuaa=vbuz1_plus_vbuc1 
    lda #$28*5
    clc
    adc.z logo_idx_1
    // (SCREEN+40*line)[screen_idx] = logo_idx+40*line
    // [94] *((const byte*) SCREEN+(byte) $28*(byte) 5 + (byte) render_logo::screen_idx#21) ← (byte~) render_logo::$85 -- pbuc1_derefidx_vbuyy=vbuaa 
    sta SCREEN+$28*5,y
    // render_logo::@10
    // screen_idx++;
    // [95] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#21 -- vbuyy=_inc_vbuyy 
    iny
    // logo_idx++;
    // [96] (byte) render_logo::logo_idx#4 ← ++ (byte) render_logo::logo_idx#11 -- vbuz1=_inc_vbuz1 
    inc.z logo_idx_1
    // [73] phi from render_logo::@10 to render_logo::@8 [phi:render_logo::@10->render_logo::@8]
    // [73] phi (byte) render_logo::screen_idx#21 = (byte) render_logo::screen_idx#5 [phi:render_logo::@10->render_logo::@8#0] -- register_copy 
    // [73] phi (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#4 [phi:render_logo::@10->render_logo::@8#1] -- register_copy 
    jmp __b8
}
  // sin16s_gen2
// Generate signed word sinus table - with values in the range min-max.
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen2(signed word* zp($c) sintab)
sin16s_gen2: {
    .const min = -$140
    .const max = $140
    .label ampl = max-min
    .label __6 = 8
    .label __9 = $19
    .label step = $15
    .label sintab = $c
    // u[4.28]
    // Iterate over the table
    .label x = 4
    .label i = $23
    // div32u16u(PI2_u4f28, wavelength)
    // [98] call div32u16u 
    // [187] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u]
    jsr div32u16u
    // div32u16u(PI2_u4f28, wavelength)
    // [99] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
    // sin16s_gen2::@3
    // step = div32u16u(PI2_u4f28, wavelength)
    // [100] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2
    // [101] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1]
    // [101] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word*) xsin [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- pwsz1=pwsc1 
    lda #<xsin
    sta.z sintab
    lda #>xsin
    sta.z sintab+1
    // [101] phi (dword) sin16s_gen2::x#2 = (dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- vduz1=vduc1 
    lda #<0
    sta.z x
    sta.z x+1
    lda #<0>>$10
    sta.z x+2
    lda #>0>>$10
    sta.z x+3
    // [101] phi (word) sin16s_gen2::i#2 = (word) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vwuz1=vwuc1 
    lda #<0
    sta.z i
    sta.z i+1
  // u[4.28]
    // sin16s_gen2::@1
  __b1:
    // for( word i=0; i<wavelength; i++)
    // [102] if((word) sin16s_gen2::i#2<(const word) XSIN_SIZE) goto sin16s_gen2::@2 -- vwuz1_lt_vwuc1_then_la1 
    lda.z i+1
    cmp #>XSIN_SIZE
    bcc __b2
    bne !+
    lda.z i
    cmp #<XSIN_SIZE
    bcc __b2
  !:
    // sin16s_gen2::@return
    // }
    // [103] return 
    rts
    // sin16s_gen2::@2
  __b2:
    // sin16s(x)
    // [104] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 
    lda.z x
    sta.z sin16s.x
    lda.z x+1
    sta.z sin16s.x+1
    lda.z x+2
    sta.z sin16s.x+2
    lda.z x+3
    sta.z sin16s.x+3
    // [105] call sin16s 
    jsr sin16s
    // [106] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
    // sin16s_gen2::@4
    // mul16s(sin16s(x), ampl)
    // [107] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0
    // [108] call mul16s 
    jsr mul16s
    // [109] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0
    // sin16s_gen2::@5
    // [110] (signed dword~) sin16s_gen2::$6 ← (signed dword) mul16s::return#2
    // >mul16s(sin16s(x), ampl)
    // [111] (word~) sin16s_gen2::$9 ← > (signed dword~) sin16s_gen2::$6 -- vwuz1=_hi_vdsz2 
    lda.z __6+2
    sta.z __9
    lda.z __6+3
    sta.z __9+1
    // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl)
    // [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word)(word~) sin16s_gen2::$9 -- _deref_pwsz1=vwsz2 
    ldy #0
    lda.z __9
    sta (sintab),y
    iny
    lda.z __9+1
    sta (sintab),y
    // *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl);
    // [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1 
    lda #SIZEOF_SIGNED_WORD
    clc
    adc.z sintab
    sta.z sintab
    bcc !+
    inc.z sintab+1
  !:
    // x = x + step
    // [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 
    lda.z x
    clc
    adc.z step
    sta.z x
    lda.z x+1
    adc.z step+1
    sta.z x+1
    lda.z x+2
    adc.z step+2
    sta.z x+2
    lda.z x+3
    adc.z step+3
    sta.z x+3
    // for( word i=0; i<wavelength; i++)
    // [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 
    inc.z i
    bne !+
    inc.z i+1
  !:
    // [101] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1]
    // [101] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy 
    // [101] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy 
    // [101] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy 
    jmp __b1
}
  // mul16s
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zp($10) a)
mul16s: {
    .label __9 = $1f
    .label __16 = $1f
    .label m = 8
    .label return = 8
    .label a = $10
    // mul16u((word)a, (word) b)
    // [116] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#0 -- vwuz1=vwuz2 
    lda.z a
    sta.z mul16u.a
    lda.z a+1
    sta.z mul16u.a+1
    // [117] call mul16u 
    // [127] phi from mul16s to mul16u [phi:mul16s->mul16u]
    // [127] phi (word) mul16u::a#6 = (word) mul16u::a#1 [phi:mul16s->mul16u#0] -- register_copy 
    // [127] phi (word) mul16u::b#2 = (word)(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 
    lda #<sin16s_gen2.ampl
    sta.z mul16u.b
    lda #>sin16s_gen2.ampl
    sta.z mul16u.b+1
    jsr mul16u
    // mul16u((word)a, (word) b)
    // [118] (dword) mul16u::return#2 ← (dword) mul16u::res#2
    // mul16s::@4
    // m = mul16u((word)a, (word) b)
    // [119] (dword) mul16s::m#0 ← (dword) mul16u::return#2
    // if(a<0)
    // [120] if((signed word) mul16s::a#0>=(signed byte) 0) goto mul16s::@1 -- vwsz1_ge_0_then_la1 
    lda.z a+1
    bpl __b2
    // mul16s::@3
    // >m
    // [121] (word~) mul16s::$9 ← > (dword) mul16s::m#0 -- vwuz1=_hi_vduz2 
    lda.z m+2
    sta.z __9
    lda.z m+3
    sta.z __9+1
    // >m = (>m)-(word)b
    // [122] (word~) mul16s::$16 ← (word~) mul16s::$9 - (word)(const signed word) sin16s_gen2::ampl#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda.z __16
    sec
    sbc #<sin16s_gen2.ampl
    sta.z __16
    lda.z __16+1
    sbc #>sin16s_gen2.ampl
    sta.z __16+1
    // [123] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 -- vduz1=vduz1_sethi_vwuz2 
    lda.z __16
    sta.z m+2
    lda.z __16+1
    sta.z m+3
    // [124] phi from mul16s::@3 mul16s::@4 to mul16s::@1 [phi:mul16s::@3/mul16s::@4->mul16s::@1]
    // [124] phi (dword) mul16s::m#4 = (dword) mul16s::m#1 [phi:mul16s::@3/mul16s::@4->mul16s::@1#0] -- register_copy 
    // mul16s::@1
    // mul16s::@2
  __b2:
    // (signed dword)m
    // [125] (signed dword) mul16s::return#0 ← (signed dword)(dword) mul16s::m#4
    // mul16s::@return
    // }
    // [126] return 
    rts
}
  // mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zp($e) a, word zp($19) b)
mul16u: {
    .label mb = $1b
    .label a = $e
    .label res = 8
    .label return = 8
    .label b = $19
    // mb = b
    // [128] (dword) mul16u::mb#0 ← (dword)(word) mul16u::b#2 -- vduz1=_dword_vwuz2 
    lda.z b
    sta.z mb
    lda.z b+1
    sta.z mb+1
    lda #0
    sta.z mb+2
    sta.z mb+3
    // [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
    // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy 
    // [129] phi (dword) mul16u::res#2 = (dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vduc1 
    sta.z res
    sta.z res+1
    lda #<0>>$10
    sta.z res+2
    lda #>0>>$10
    sta.z res+3
    // [129] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy 
    // mul16u::@1
  __b1:
    // while(a!=0)
    // [130] if((word) mul16u::a#3!=(byte) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 
    lda.z a
    bne __b2
    lda.z a+1
    bne __b2
    // mul16u::@return
    // }
    // [131] return 
    rts
    // mul16u::@2
  __b2:
    // a&1
    // [132] (byte~) mul16u::$1 ← (word) mul16u::a#3 & (byte) 1 -- vbuaa=vwuz1_band_vbuc1 
    lda #1
    and.z a
    // if( (a&1) != 0)
    // [133] if((byte~) mul16u::$1==(byte) 0) goto mul16u::@3 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq __b3
    // mul16u::@4
    // res = res + mb
    // [134] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 
    lda.z res
    clc
    adc.z mb
    sta.z res
    lda.z res+1
    adc.z mb+1
    sta.z res+1
    lda.z res+2
    adc.z mb+2
    sta.z res+2
    lda.z res+3
    adc.z mb+3
    sta.z res+3
    // [135] phi from mul16u::@2 mul16u::@4 to mul16u::@3 [phi:mul16u::@2/mul16u::@4->mul16u::@3]
    // [135] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@4->mul16u::@3#0] -- register_copy 
    // mul16u::@3
  __b3:
    // a = a>>1
    // [136] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte) 1 -- vwuz1=vwuz1_ror_1 
    lsr.z a+1
    ror.z a
    // mb = mb<<1
    // [137] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte) 1 -- vduz1=vduz1_rol_1 
    asl.z mb
    rol.z mb+1
    rol.z mb+2
    rol.z mb+3
    // [129] phi from mul16u::@3 to mul16u::@1 [phi:mul16u::@3->mul16u::@1]
    // [129] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@3->mul16u::@1#0] -- register_copy 
    // [129] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@3->mul16u::@1#1] -- register_copy 
    // [129] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@3->mul16u::@1#2] -- register_copy 
    jmp __b1
}
  // 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 zp(8) x)
sin16s: {
    .label __4 = $1b
    .label x = 8
    .label return = $10
    .label x1 = $1f
    .label x2 = $12
    .label x3 = $12
    .label x3_6 = $21
    .label usinx = $10
    .label x4 = $12
    .label x5 = $21
    .label x5_128 = $21
    .label sinx = $10
    // if(x >= PI_u4f28 )
    // [138] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 
    lda.z x+3
    cmp #>PI_u4f28>>$10
    bcc b1
    bne !+
    lda.z x+2
    cmp #<PI_u4f28>>$10
    bcc b1
    bne !+
    lda.z x+1
    cmp #>PI_u4f28
    bcc b1
    bne !+
    lda.z x
    cmp #<PI_u4f28
    bcc b1
  !:
    // sin16s::@4
    // x = x - PI_u4f28
    // [139] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 -- vduz1=vduz1_minus_vduc1 
    lda.z x
    sec
    sbc #<PI_u4f28
    sta.z x
    lda.z x+1
    sbc #>PI_u4f28
    sta.z x+1
    lda.z x+2
    sbc #<PI_u4f28>>$10
    sta.z x+2
    lda.z x+3
    sbc #>PI_u4f28>>$10
    sta.z x+3
    // [140] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
    // [140] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1 
    ldy #1
    // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy 
    jmp __b1
    // [140] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
  b1:
    // [140] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1 
    ldy #0
    // [140] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy 
    // sin16s::@1
  __b1:
    // if(x >= PI_HALF_u4f28 )
    // [141] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 
    lda.z x+3
    cmp #>PI_HALF_u4f28>>$10
    bcc __b2
    bne !+
    lda.z x+2
    cmp #<PI_HALF_u4f28>>$10
    bcc __b2
    bne !+
    lda.z x+1
    cmp #>PI_HALF_u4f28
    bcc __b2
    bne !+
    lda.z x
    cmp #<PI_HALF_u4f28
    bcc __b2
  !:
    // sin16s::@5
    // x = PI_u4f28 - x
    // [142] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 
    lda #<PI_u4f28
    sec
    sbc.z x
    sta.z x
    lda #>PI_u4f28
    sbc.z x+1
    sta.z x+1
    lda #<PI_u4f28>>$10
    sbc.z x+2
    sta.z x+2
    lda #>PI_u4f28>>$10
    sbc.z x+3
    sta.z x+3
    // [143] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2]
    // [143] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy 
    // sin16s::@2
  __b2:
    // x<<3
    // [144] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3 
    lda.z x
    asl
    sta.z __4
    lda.z x+1
    rol
    sta.z __4+1
    lda.z x+2
    rol
    sta.z __4+2
    lda.z x+3
    rol
    sta.z __4+3
    asl.z __4
    rol.z __4+1
    rol.z __4+2
    rol.z __4+3
    asl.z __4
    rol.z __4+1
    rol.z __4+2
    rol.z __4+3
    // x1 = >x<<3
    // [145] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2 
    lda.z __4+2
    sta.z x1
    lda.z __4+3
    sta.z x1+1
    // mulu16_sel(x1, x1, 0)
    // [146] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v1
    lda.z x1+1
    sta.z mulu16_sel.v1+1
    // [147] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [148] call mulu16_sel 
    // [178] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel]
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // mulu16_sel(x1, x1, 0)
    // [149] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
    // sin16s::@7
    // x2 = mulu16_sel(x1, x1, 0)
    // [150] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return
    sta.z x2
    lda.z mulu16_sel.return+1
    sta.z x2+1
    // mulu16_sel(x2, x1, 1)
    // [151] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
    // [152] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [153] call mulu16_sel 
    // [178] phi from sin16s::@7 to mulu16_sel [phi:sin16s::@7->mulu16_sel]
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@7->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@7->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@7->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // mulu16_sel(x2, x1, 1)
    // [154] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return
    sta.z mulu16_sel.return_1
    lda.z mulu16_sel.return+1
    sta.z mulu16_sel.return_1+1
    // sin16s::@8
    // x3 = mulu16_sel(x2, x1, 1)
    // [155] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
    // mulu16_sel(x3, $10000/6, 1)
    // [156] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
    // [157] call mulu16_sel 
    // [178] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel]
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
    // [178] phi (word) mulu16_sel::v2#5 = (word)(number) $10000/(number) 6 [phi:sin16s::@8->mulu16_sel#1] -- vwuz1=vwuc1 
    lda #<$10000/6
    sta.z mulu16_sel.v2
    lda #>$10000/6
    sta.z mulu16_sel.v2+1
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@8->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // mulu16_sel(x3, $10000/6, 1)
    // [158] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
    // sin16s::@9
    // x3_6 = mulu16_sel(x3, $10000/6, 1)
    // [159] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
    // usinx = x1 - x3_6
    // [160] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 
    lda.z x1
    sec
    sbc.z x3_6
    sta.z usinx
    lda.z x1+1
    sbc.z x3_6+1
    sta.z usinx+1
    // mulu16_sel(x3, x1, 0)
    // [161] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
    // [162] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [163] call mulu16_sel 
    // [178] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel]
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@9->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@9->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // mulu16_sel(x3, x1, 0)
    // [164] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda.z mulu16_sel.return
    sta.z mulu16_sel.return_1
    lda.z mulu16_sel.return+1
    sta.z mulu16_sel.return_1+1
    // sin16s::@10
    // x4 = mulu16_sel(x3, x1, 0)
    // [165] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
    // mulu16_sel(x4, x1, 0)
    // [166] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
    // [167] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda.z x1
    sta.z mulu16_sel.v2
    lda.z x1+1
    sta.z mulu16_sel.v2+1
    // [168] call mulu16_sel 
    // [178] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel]
    // [178] phi (byte) mulu16_sel::select#5 = (byte) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
    // [178] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@10->mulu16_sel#1] -- register_copy 
    // [178] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@10->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
    // mulu16_sel(x4, x1, 0)
    // [169] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
    // sin16s::@11
    // x5 = mulu16_sel(x4, x1, 0)
    // [170] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
    // x5_128 = x5>>4
    // [171] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte) 4 -- vwuz1=vwuz1_ror_4 
    lsr.z x5_128+1
    ror.z x5_128
    lsr.z x5_128+1
    ror.z x5_128
    lsr.z x5_128+1
    ror.z x5_128
    lsr.z x5_128+1
    ror.z x5_128
    // usinx = usinx + x5_128
    // [172] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda.z usinx
    clc
    adc.z x5_128
    sta.z usinx
    lda.z usinx+1
    adc.z x5_128+1
    sta.z usinx+1
    // if(isUpper!=0)
    // [173] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1 
    cpy #0
    beq __b3
    // sin16s::@6
    // sinx = -(signed word)usinx
    // [174] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 
    sec
    lda #0
    sbc.z sinx
    sta.z sinx
    lda #0
    sbc.z sinx+1
    sta.z sinx+1
    // [175] phi from sin16s::@12 sin16s::@6 to sin16s::@3 [phi:sin16s::@12/sin16s::@6->sin16s::@3]
    // [175] phi (signed word) sin16s::return#1 = (signed word) sin16s::return#5 [phi:sin16s::@12/sin16s::@6->sin16s::@3#0] -- register_copy 
    // sin16s::@3
  __b3:
    // sin16s::@return
    // }
    // [176] return 
    rts
    // sin16s::@12
    // [177] (signed word) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
}
  // 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 zp($12) v1, word zp($19) v2, byte register(X) select)
mulu16_sel: {
    .label __0 = 8
    .label __1 = 8
    .label v1 = $12
    .label v2 = $19
    .label return = $21
    .label return_1 = $12
    // mul16u(v1, v2)
    // [179] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 
    lda.z v1
    sta.z mul16u.a
    lda.z v1+1
    sta.z mul16u.a+1
    // [180] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
    // [181] call mul16u 
    // [127] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u]
    // [127] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy 
    // [127] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy 
    jsr mul16u
    // mul16u(v1, v2)
    // [182] (dword) mul16u::return#3 ← (dword) mul16u::res#2
    // mulu16_sel::@1
    // [183] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
    // mul16u(v1, v2)<<select
    // [184] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx 
    cpx #0
    beq !e+
  !:
    asl.z __1
    rol.z __1+1
    rol.z __1+2
    rol.z __1+3
    dex
    bne !-
  !e:
    // >mul16u(v1, v2)<<select
    // [185] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 
    lda.z __1+2
    sta.z return
    lda.z __1+3
    sta.z return+1
    // mulu16_sel::@return
    // }
    // [186] return 
    rts
}
  // 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 = $21
    .label quotient_lo = $e
    .label return = $15
    // divr16u(>dividend, divisor, 0)
    // [188] call divr16u 
    // [197] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
    // [197] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28>>$10
    sta.z divr16u.dividend
    lda #>PI2_u4f28>>$10
    sta.z divr16u.dividend+1
    // [197] phi (word) divr16u::rem#10 = (byte) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 
    lda #<0
    sta.z divr16u.rem
    sta.z divr16u.rem+1
    jsr divr16u
    // divr16u(>dividend, divisor, 0)
    // [189] (word) divr16u::return#2 ← (word) divr16u::return#0
    // div32u16u::@1
    // quotient_hi = divr16u(>dividend, divisor, 0)
    // [190] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 
    lda.z divr16u.return
    sta.z quotient_hi
    lda.z divr16u.return+1
    sta.z quotient_hi+1
    // divr16u(<dividend, divisor, rem16u)
    // [191] (word) divr16u::rem#4 ← (word) rem16u#1
    // [192] call divr16u 
    // [197] phi from div32u16u::@1 to divr16u [phi:div32u16u::@1->divr16u]
    // [197] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28 [phi:div32u16u::@1->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28&$ffff
    sta.z divr16u.dividend
    lda #>PI2_u4f28&$ffff
    sta.z divr16u.dividend+1
    // [197] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@1->divr16u#1] -- register_copy 
    jsr divr16u
    // divr16u(<dividend, divisor, rem16u)
    // [193] (word) divr16u::return#3 ← (word) divr16u::return#0
    // div32u16u::@2
    // quotient_lo = divr16u(<dividend, divisor, rem16u)
    // [194] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
    // quotient = { quotient_hi, quotient_lo}
    // [195] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 
    lda.z quotient_hi
    sta.z return+2
    lda.z quotient_hi+1
    sta.z return+3
    lda.z quotient_lo
    sta.z return
    lda.z quotient_lo+1
    sta.z return+1
    // div32u16u::@return
    // }
    // [196] return 
    rts
}
  // 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 zp($19) dividend, word zp($c) rem)
divr16u: {
    .label rem = $c
    .label dividend = $19
    .label quotient = $e
    .label return = $e
    // [198] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
    // [198] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 
    ldx #0
    // [198] phi (word) divr16u::quotient#3 = (word) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vwuc1 
    txa
    sta.z quotient
    sta.z quotient+1
    // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy 
    // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy 
    // [198] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
    // [198] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
    // [198] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
    // [198] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
    // [198] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
    // divr16u::@1
  __b1:
    // rem = rem << 1
    // [199] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z rem
    rol.z rem+1
    // >dividend
    // [200] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 
    lda.z dividend+1
    // >dividend & $80
    // [201] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 -- vbuaa=vbuaa_band_vbuc1 
    and #$80
    // if( (>dividend & $80) != 0 )
    // [202] if((byte~) divr16u::$2==(byte) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq __b2
    // divr16u::@4
    // rem = rem | 1
    // [203] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte) 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora.z rem
    sta.z rem
    // [204] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
    // [204] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
    // divr16u::@2
  __b2:
    // dividend = dividend << 1
    // [205] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z dividend
    rol.z dividend+1
    // quotient = quotient << 1
    // [206] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte) 1 -- vwuz1=vwuz1_rol_1 
    asl.z quotient
    rol.z quotient+1
    // if(rem>=divisor)
    // [207] if((word) divr16u::rem#6<(const word) XSIN_SIZE) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 
    lda.z rem+1
    cmp #>XSIN_SIZE
    bcc __b3
    bne !+
    lda.z rem
    cmp #<XSIN_SIZE
    bcc __b3
  !:
    // divr16u::@5
    // quotient++;
    // [208] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc.z quotient
    bne !+
    inc.z quotient+1
  !:
    // rem = rem - divisor
    // [209] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE -- vwuz1=vwuz1_minus_vwuc1 
    lda.z rem
    sec
    sbc #<XSIN_SIZE
    sta.z rem
    lda.z rem+1
    sbc #>XSIN_SIZE
    sta.z rem+1
    // [210] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
    // [210] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
    // [210] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
    // divr16u::@3
  __b3:
    // for( byte i : 0..15)
    // [211] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [212] if((byte) divr16u::i#1!=(byte) $10) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne __b1
    // divr16u::@6
    // rem16u = rem
    // [213] (word) rem16u#1 ← (word) divr16u::rem#11
    // divr16u::@return
    // }
    // [214] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zp($10) str, byte register(X) c)
memset: {
    .label end = $23
    .label dst = $10
    .label str = $10
    // memset::@1
    // end = (char*)str + num
    // [216] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) $3e8 -- pbuz1=pbuz2_plus_vwuc1 
    lda.z str
    clc
    adc #<$3e8
    sta.z end
    lda.z str+1
    adc #>$3e8
    sta.z end+1
    // [217] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
    // [218] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
    // [218] phi (byte*) memset::dst#2 = (byte*) memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy 
    // memset::@2
  __b2:
    // for(char* dst = str; dst!=end; dst++)
    // [219] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1 
    lda.z dst+1
    cmp.z end+1
    bne __b3
    lda.z dst
    cmp.z end
    bne __b3
    // memset::@return
    // }
    // [220] return 
    rts
    // memset::@3
  __b3:
    // *dst = c
    // [221] *((byte*) memset::dst#2) ← (byte) memset::c#4 -- _deref_pbuz1=vbuxx 
    txa
    ldy #0
    sta (dst),y
    // for(char* dst = str; dst!=end; dst++)
    // [222] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc.z dst
    bne !+
    inc.z dst+1
  !:
    jmp __b2
}
  // File Data
  .align $100
  xsin: .fill 2*XSIN_SIZE, 0
.pc = LOGO "LOGO"
  .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
    .for (var y=0; y<6	; y++)
        .for (var x=0;x<40; x++)
            .for(var cp=0; cp<8; cp++)
                .byte logoPic.getMulticolorByte(x,cp+y*8)


