Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Inlined call (byte~) main::$0 ← call toD018 (byte*) SCREEN (byte*) LOGO 

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  (byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
  (byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
  (byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
  (byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
  (byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
  (byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
  (word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
  (byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
  (byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
  (byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
  (byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
  (byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
  (byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
  (byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
  (byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
  (byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
  (byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
  (byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
  (byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
  (byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
  (byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
  (byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
  (byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
  (byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
  (byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
  (byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
  (byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
  (byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
  (byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
  (byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
  (byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
  (byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
  (byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
  (byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
  (byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
  (byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
  (byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
  (byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
  (byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
  (byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
  (byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
  (byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
  (byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
  (byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
  (byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
  (byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
  (byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
  (byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
  (byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
  (void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
  (void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
  (byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
  (byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
  (byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
  (byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
  (byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
  (byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
  (byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
  (byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
  (byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
  (byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
  to:@4
@4: scope:[]  from @begin
  (byte) rem8u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:@6
@6: scope:[]  from @4
  (word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:@9
divr16u: scope:[divr16u]  from div32u16u div32u16u::@2
  (word) divr16u::divisor#6 ← phi( div32u16u/(word) divr16u::divisor#0 div32u16u::@2/(word) divr16u::divisor#1 )
  (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 )
  (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 )
  (word) divr16u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) divr16u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:divr16u::@1
divr16u::@1: scope:[divr16u]  from divr16u divr16u::@3
  (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 )
  (word) divr16u::divisor#4 ← phi( divr16u/(word) divr16u::divisor#6 divr16u::@3/(word) divr16u::divisor#7 )
  (word) divr16u::quotient#6 ← phi( divr16u/(word) divr16u::quotient#0 divr16u::@3/(word) divr16u::quotient#8 )
  (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#6 )
  (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
  (word~) divr16u::$0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (word) divr16u::rem#0 ← (word~) divr16u::$0
  (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
  (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
  (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) divr16u::$4 ← ! (bool~) divr16u::$3
  if((bool~) divr16u::$4) goto divr16u::@2
  to:divr16u::@4
divr16u::@2: scope:[divr16u]  from divr16u::@1 divr16u::@4
  (byte) divr16u::i#3 ← phi( divr16u::@1/(byte) divr16u::i#5 divr16u::@4/(byte) divr16u::i#6 )
  (word) divr16u::divisor#2 ← phi( divr16u::@1/(word) divr16u::divisor#4 divr16u::@4/(word) divr16u::divisor#5 )
  (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
  (word) divr16u::quotient#3 ← phi( divr16u::@1/(word) divr16u::quotient#6 divr16u::@4/(word) divr16u::quotient#7 )
  (word) divr16u::dividend#4 ← phi( divr16u::@1/(word) divr16u::dividend#3 divr16u::@4/(word) divr16u::dividend#7 )
  (word~) divr16u::$6 ← (word) divr16u::dividend#4 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (word) divr16u::dividend#0 ← (word~) divr16u::$6
  (word~) divr16u::$7 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (word) divr16u::quotient#1 ← (word~) divr16u::$7
  (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2
  (bool~) divr16u::$9 ← ! (bool~) divr16u::$8
  if((bool~) divr16u::$9) goto divr16u::@3
  to:divr16u::@5
divr16u::@4: scope:[divr16u]  from divr16u::@1
  (byte) divr16u::i#6 ← phi( divr16u::@1/(byte) divr16u::i#5 )
  (word) divr16u::divisor#5 ← phi( divr16u::@1/(word) divr16u::divisor#4 )
  (word) divr16u::quotient#7 ← phi( divr16u::@1/(word) divr16u::quotient#6 )
  (word) divr16u::dividend#7 ← phi( divr16u::@1/(word) divr16u::dividend#3 )
  (word) divr16u::rem#7 ← phi( divr16u::@1/(word) divr16u::rem#0 )
  (word/dword~) divr16u::$5 ← (word) divr16u::rem#7 | (byte/signed byte/word/signed word/dword/signed dword) 1
  (word) divr16u::rem#1 ← (word/dword~) divr16u::$5
  to:divr16u::@2
divr16u::@3: scope:[divr16u]  from divr16u::@2 divr16u::@5
  (word) divr16u::divisor#7 ← phi( divr16u::@2/(word) divr16u::divisor#2 divr16u::@5/(word) divr16u::divisor#3 )
  (word) divr16u::quotient#8 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
  (word) divr16u::dividend#6 ← phi( divr16u::@2/(word) divr16u::dividend#0 divr16u::@5/(word) divr16u::dividend#8 )
  (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
  (byte) divr16u::i#2 ← phi( divr16u::@2/(byte) divr16u::i#3 divr16u::@5/(byte) divr16u::i#4 )
  (byte) divr16u::i#1 ← (byte) divr16u::i#2 + rangenext(0,15)
  (bool~) divr16u::$11 ← (byte) divr16u::i#1 != rangelast(0,15)
  if((bool~) divr16u::$11) goto divr16u::@1
  to:divr16u::@6
divr16u::@5: scope:[divr16u]  from divr16u::@2
  (word) divr16u::dividend#8 ← phi( divr16u::@2/(word) divr16u::dividend#0 )
  (byte) divr16u::i#4 ← phi( divr16u::@2/(byte) divr16u::i#3 )
  (word) divr16u::divisor#3 ← phi( divr16u::@2/(word) divr16u::divisor#2 )
  (word) divr16u::rem#8 ← phi( divr16u::@2/(word) divr16u::rem#6 )
  (word) divr16u::quotient#4 ← phi( divr16u::@2/(word) divr16u::quotient#1 )
  (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#4
  (word~) divr16u::$10 ← (word) divr16u::rem#8 - (word) divr16u::divisor#3
  (word) divr16u::rem#2 ← (word~) divr16u::$10
  to:divr16u::@3
divr16u::@6: scope:[divr16u]  from divr16u::@3
  (word) divr16u::quotient#5 ← phi( divr16u::@3/(word) divr16u::quotient#8 )
  (word) divr16u::rem#9 ← phi( divr16u::@3/(word) divr16u::rem#11 )
  (word) rem16u#1 ← (word) divr16u::rem#9
  (word) divr16u::return#0 ← (word) divr16u::quotient#5
  to:divr16u::@return
divr16u::@return: scope:[divr16u]  from divr16u::@6
  (word) rem16u#11 ← phi( divr16u::@6/(word) rem16u#1 )
  (word) divr16u::return#4 ← phi( divr16u::@6/(word) divr16u::return#0 )
  (word) divr16u::return#1 ← (word) divr16u::return#4
  (word) rem16u#2 ← (word) rem16u#11
  return 
  to:@return
div32u16u: scope:[div32u16u]  from sin16s_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 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call divr16u 
  (word) divr16u::return#2 ← (word) divr16u::return#1
  to:div32u16u::@2
div32u16u::@2: scope:[div32u16u]  from div32u16u
  (word) div32u16u::divisor#2 ← phi( div32u16u/(word) div32u16u::divisor#1 )
  (dword) div32u16u::dividend#2 ← phi( div32u16u/(dword) div32u16u::dividend#1 )
  (word) rem16u#12 ← phi( div32u16u/(word) rem16u#2 )
  (word) divr16u::return#5 ← phi( div32u16u/(word) divr16u::return#2 )
  (word~) div32u16u::$1 ← (word) divr16u::return#5
  (word) rem16u#3 ← (word) rem16u#12
  (word) div32u16u::quotient_hi#0 ← (word~) div32u16u::$1
  (word~) div32u16u::$2 ← < (dword) div32u16u::dividend#2
  (word) divr16u::dividend#2 ← (word~) div32u16u::$2
  (word) divr16u::divisor#1 ← (word) div32u16u::divisor#2
  (word) divr16u::rem#4 ← (word) rem16u#3
  call divr16u 
  (word) divr16u::return#3 ← (word) divr16u::return#1
  to:div32u16u::@3
div32u16u::@3: scope:[div32u16u]  from div32u16u::@2
  (word) div32u16u::quotient_hi#1 ← phi( div32u16u::@2/(word) div32u16u::quotient_hi#0 )
  (word) rem16u#13 ← phi( div32u16u::@2/(word) rem16u#2 )
  (word) divr16u::return#6 ← phi( div32u16u::@2/(word) divr16u::return#3 )
  (word~) div32u16u::$3 ← (word) divr16u::return#6
  (word) rem16u#4 ← (word) rem16u#13
  (word) div32u16u::quotient_lo#0 ← (word~) div32u16u::$3
  (dword) div32u16u::quotient#0 ← { (word) div32u16u::quotient_hi#1, (word) div32u16u::quotient_lo#0 }
  (dword) div32u16u::return#0 ← (dword) div32u16u::quotient#0
  to:div32u16u::@return
div32u16u::@return: scope:[div32u16u]  from div32u16u::@3
  (word) rem16u#14 ← phi( div32u16u::@3/(word) rem16u#4 )
  (dword) div32u16u::return#3 ← phi( div32u16u::@3/(dword) div32u16u::return#0 )
  (dword) div32u16u::return#1 ← (dword) div32u16u::return#3
  (word) rem16u#5 ← (word) rem16u#14
  return 
  to:@return
@9: scope:[]  from @6
  (word) rem16u#36 ← phi( @6/(word) rem16u#0 )
  (signed byte) rem8s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:@10
@10: scope:[]  from @9
  (word) rem16u#34 ← phi( @9/(word) rem16u#36 )
  (signed word) rem16s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:@17
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 ← (byte/signed byte/word/signed word/dword/signed 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 != (byte/signed byte/word/signed word/dword/signed dword) 0
  if((bool~) mul16u::$0) goto mul16u::@2
  to:mul16u::@3
mul16u::@2: scope:[mul16u]  from mul16u::@1
  (dword) mul16u::res#5 ← phi( mul16u::@1/(dword) mul16u::res#4 )
  (dword) mul16u::mb#4 ← phi( mul16u::@1/(dword) mul16u::mb#5 )
  (word) mul16u::a#4 ← phi( mul16u::@1/(word) mul16u::a#3 )
  (byte/word~) mul16u::$1 ← (word) mul16u::a#4 & (byte/signed byte/word/signed word/dword/signed dword) 1
  (bool~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) mul16u::$3 ← ! (bool~) mul16u::$2
  if((bool~) mul16u::$3) goto mul16u::@4
  to:mul16u::@7
mul16u::@3: scope:[mul16u]  from mul16u::@1
  (dword) mul16u::res#2 ← phi( mul16u::@1/(dword) mul16u::res#4 )
  (dword) mul16u::return#0 ← (dword) mul16u::res#2
  to:mul16u::@return
mul16u::@4: scope:[mul16u]  from mul16u::@2 mul16u::@7
  (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#5 mul16u::@7/(dword) mul16u::res#1 )
  (dword) mul16u::mb#2 ← phi( mul16u::@2/(dword) mul16u::mb#4 mul16u::@7/(dword) mul16u::mb#3 )
  (word) mul16u::a#5 ← phi( mul16u::@2/(word) mul16u::a#4 mul16u::@7/(word) mul16u::a#7 )
  (word~) mul16u::$5 ← (word) mul16u::a#5 >> (byte/signed byte/word/signed word/dword/signed dword) 1
  (word) mul16u::a#0 ← (word~) mul16u::$5
  (dword~) mul16u::$6 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
  (dword) mul16u::mb#1 ← (dword~) mul16u::$6
  to:mul16u::@1
mul16u::@7: scope:[mul16u]  from mul16u::@2
  (word) mul16u::a#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
mul16s: scope:[mul16s]  from sin16s_gen2::@4
  (signed word) mul16s::b#1 ← phi( sin16s_gen2::@4/(signed word) mul16s::b#0 )
  (signed word) mul16s::a#1 ← phi( sin16s_gen2::@4/(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 < (byte/signed byte/word/signed word/dword/signed dword) 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::$9 ← (signed word) mul16s::b#2 < (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) mul16s::$10 ← ! (bool~) mul16s::$9
  if((bool~) mul16s::$10) 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::$6 ← > (dword) mul16s::m#3
  (word~) mul16s::$7 ← ((word)) (signed word) mul16s::b#3
  (word~) mul16s::$8 ← (word~) mul16s::$6 - (word~) mul16s::$7
  (word~) mul16s::$16 ← (word~) mul16s::$8
  (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::$15 ← ((signed dword)) (dword) mul16s::m#4
  (signed dword) mul16s::return#0 ← (signed dword~) mul16s::$15
  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::$12 ← > (dword) mul16s::m#5
  (word~) mul16s::$13 ← ((word)) (signed word) mul16s::a#3
  (word~) mul16s::$14 ← (word~) mul16s::$12 - (word~) mul16s::$13
  (word~) mul16s::$17 ← (word~) mul16s::$14
  (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
@17: scope:[]  from @10
  (word) rem16u#32 ← phi( @10/(word) rem16u#34 )
  (dword) PI2_u4f28#0 ← (dword/signed dword) 1686629713
  (dword) PI_u4f28#0 ← (dword/signed dword) 843314857
  (dword) PI_HALF_u4f28#0 ← (dword/signed dword) 421657428
  (word) PI2_u4f12#0 ← (word/signed word/dword/signed dword) 25736
  (word) PI_u4f12#0 ← (word/signed word/dword/signed dword) 12868
  (word) PI_HALF_u4f12#0 ← (word/signed word/dword/signed dword) 6434
  to:@25
sin16s_gen2: scope:[sin16s_gen2]  from main::@2
  (signed word*) sin16s_gen2::sintab#6 ← 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 >> (byte/signed byte/word/signed word/dword/signed dword) 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 ← (dword) PI2_u4f28#0
  (word) div32u16u::divisor#0 ← (word) sin16s_gen2::wavelength#1
  call div32u16u 
  (dword) div32u16u::return#2 ← (dword) div32u16u::return#1
  to:sin16s_gen2::@3
sin16s_gen2::@3: scope:[sin16s_gen2]  from sin16s_gen2
  (word) sin16s_gen2::wavelength#5 ← phi( sin16s_gen2/(word) sin16s_gen2::wavelength#1 )
  (signed word*) sin16s_gen2::sintab#5 ← phi( sin16s_gen2/(signed word*) sin16s_gen2::sintab#6 )
  (signed word) sin16s_gen2::offs#4 ← phi( sin16s_gen2/(signed word) sin16s_gen2::offs#0 )
  (signed word) sin16s_gen2::ampl#3 ← phi( sin16s_gen2/(signed word) sin16s_gen2::ampl#0 )
  (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 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (word) sin16s_gen2::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:sin16s_gen2::@1
sin16s_gen2::@1: scope:[sin16s_gen2]  from sin16s_gen2::@3 sin16s_gen2::@5
  (word) rem16u#29 ← phi( sin16s_gen2::@3/(word) rem16u#6 sin16s_gen2::@5/(word) rem16u#22 )
  (word) sin16s_gen2::wavelength#4 ← phi( sin16s_gen2::@3/(word) sin16s_gen2::wavelength#5 sin16s_gen2::@5/(word) sin16s_gen2::wavelength#2 )
  (word) sin16s_gen2::i#4 ← phi( sin16s_gen2::@3/(word) sin16s_gen2::i#0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 )
  (dword) sin16s_gen2::step#3 ← phi( sin16s_gen2::@3/(dword) sin16s_gen2::step#0 sin16s_gen2::@5/(dword) sin16s_gen2::step#1 )
  (signed word*) sin16s_gen2::sintab#4 ← phi( sin16s_gen2::@3/(signed word*) sin16s_gen2::sintab#5 sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 )
  (signed word) sin16s_gen2::offs#3 ← phi( sin16s_gen2::@3/(signed word) sin16s_gen2::offs#4 sin16s_gen2::@5/(signed word) sin16s_gen2::offs#1 )
  (signed word) sin16s_gen2::ampl#2 ← phi( sin16s_gen2::@3/(signed word) sin16s_gen2::ampl#3 sin16s_gen2::@5/(signed word) sin16s_gen2::ampl#4 )
  (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(dword) sin16s_gen2::x#0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 )
  (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2
  call sin16s 
  (signed word) sin16s::return#0 ← (signed word) sin16s::return#2
  to:sin16s_gen2::@4
sin16s_gen2::@4: scope:[sin16s_gen2]  from sin16s_gen2::@1
  (word) rem16u#26 ← phi( sin16s_gen2::@1/(word) rem16u#29 )
  (word) sin16s_gen2::wavelength#3 ← phi( sin16s_gen2::@1/(word) sin16s_gen2::wavelength#4 )
  (word) sin16s_gen2::i#3 ← phi( sin16s_gen2::@1/(word) sin16s_gen2::i#4 )
  (dword) sin16s_gen2::step#2 ← phi( sin16s_gen2::@1/(dword) sin16s_gen2::step#3 )
  (dword) sin16s_gen2::x#4 ← phi( sin16s_gen2::@1/(dword) sin16s_gen2::x#2 )
  (signed word*) sin16s_gen2::sintab#3 ← phi( sin16s_gen2::@1/(signed word*) sin16s_gen2::sintab#4 )
  (signed word) sin16s_gen2::offs#2 ← phi( sin16s_gen2::@1/(signed word) sin16s_gen2::offs#3 )
  (signed word) sin16s_gen2::ampl#1 ← phi( sin16s_gen2::@1/(signed word) sin16s_gen2::ampl#2 )
  (signed word) sin16s::return#3 ← phi( sin16s_gen2::@1/(signed word) sin16s::return#0 )
  (signed word~) sin16s_gen2::$4 ← (signed word) sin16s::return#3
  (signed word) mul16s::a#0 ← (signed word~) sin16s_gen2::$4
  (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::@5
sin16s_gen2::@5: scope:[sin16s_gen2]  from sin16s_gen2::@4
  (signed word) sin16s_gen2::ampl#4 ← phi( sin16s_gen2::@4/(signed word) sin16s_gen2::ampl#1 )
  (word) rem16u#22 ← phi( sin16s_gen2::@4/(word) rem16u#26 )
  (word) sin16s_gen2::wavelength#2 ← phi( sin16s_gen2::@4/(word) sin16s_gen2::wavelength#3 )
  (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@4/(word) sin16s_gen2::i#3 )
  (dword) sin16s_gen2::step#1 ← phi( sin16s_gen2::@4/(dword) sin16s_gen2::step#2 )
  (dword) sin16s_gen2::x#3 ← phi( sin16s_gen2::@4/(dword) sin16s_gen2::x#4 )
  (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@4/(signed word*) sin16s_gen2::sintab#3 )
  (signed word) sin16s_gen2::offs#1 ← phi( sin16s_gen2::@4/(signed word) sin16s_gen2::offs#2 )
  (signed dword) mul16s::return#4 ← phi( sin16s_gen2::@4/(signed dword) mul16s::return#2 )
  (signed dword~) sin16s_gen2::$5 ← (signed dword) mul16s::return#4
  (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5
  (signed word~) sin16s_gen2::$7 ← ((signed word)) (word~) sin16s_gen2::$6
  (signed word~) sin16s_gen2::$8 ← (signed word) sin16s_gen2::offs#1 + (signed word~) sin16s_gen2::$7
  *((signed word*) sin16s_gen2::sintab#2) ← (signed word~) sin16s_gen2::$8
  (signed word*~) sin16s_gen2::$9 ← (signed word*) sin16s_gen2::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
  (signed word*) sin16s_gen2::sintab#0 ← (signed word*~) sin16s_gen2::$9
  (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#2
  (bool~) sin16s_gen2::$11 ← (word) sin16s_gen2::i#1 < (word) sin16s_gen2::wavelength#2
  if((bool~) sin16s_gen2::$11) goto sin16s_gen2::@1
  to:sin16s_gen2::@return
sin16s_gen2::@return: scope:[sin16s_gen2]  from sin16s_gen2::@5
  (word) rem16u#16 ← phi( sin16s_gen2::@5/(word) rem16u#22 )
  (word) rem16u#7 ← (word) rem16u#16
  return 
  to:@return
sin16s: scope:[sin16s]  from sin16s_gen2::@1
  (dword) sin16s::x#3 ← phi( sin16s_gen2::@1/(dword) sin16s::x#0 )
  (byte) sin16s::isUpper#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (dword) PI_u4f28#0
  (bool~) sin16s::$1 ← ! (bool~) sin16s::$0
  if((bool~) sin16s::$1) goto sin16s::@1
  to:sin16s::@4
sin16s::@1: scope:[sin16s]  from sin16s sin16s::@4
  (byte) sin16s::isUpper#8 ← phi( sin16s/(byte) sin16s::isUpper#0 sin16s::@4/(byte) sin16s::isUpper#1 )
  (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#3 sin16s::@4/(dword) sin16s::x#1 )
  (bool~) sin16s::$3 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0
  (bool~) sin16s::$4 ← ! (bool~) sin16s::$3
  if((bool~) sin16s::$4) goto sin16s::@2
  to:sin16s::@5
sin16s::@4: scope:[sin16s]  from sin16s
  (dword) sin16s::x#5 ← phi( sin16s/(dword) sin16s::x#3 )
  (dword~) sin16s::$2 ← (dword) sin16s::x#5 - (dword) PI_u4f28#0
  (dword) sin16s::x#1 ← (dword~) sin16s::$2
  (byte) sin16s::isUpper#1 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  to:sin16s::@1
sin16s::@2: scope:[sin16s]  from sin16s::@1 sin16s::@5
  (byte) sin16s::isUpper#7 ← phi( sin16s::@1/(byte) sin16s::isUpper#8 sin16s::@5/(byte) sin16s::isUpper#9 )
  (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
  (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
  (word~) sin16s::$7 ← > (dword~) sin16s::$6
  (word) sin16s::x1#0 ← (word~) sin16s::$7
  (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
  (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
  (byte) mulu16_sel::select#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call mulu16_sel 
  (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#6
  to:sin16s::@8
sin16s::@8: scope:[sin16s]  from sin16s::@2
  (byte) sin16s::isUpper#6 ← phi( sin16s::@2/(byte) sin16s::isUpper#7 )
  (word) sin16s::x1#1 ← phi( sin16s::@2/(word) sin16s::x1#0 )
  (word) mulu16_sel::return#7 ← phi( sin16s::@2/(word) mulu16_sel::return#0 )
  (word~) sin16s::$8 ← (word) mulu16_sel::return#7
  (word) sin16s::x2#0 ← (word~) sin16s::$8
  (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
  (word) mulu16_sel::v2#1 ← (word) sin16s::x1#1
  (byte) mulu16_sel::select#1 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  call mulu16_sel 
  (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#6
  to:sin16s::@9
sin16s::@9: scope:[sin16s]  from sin16s::@8
  (byte) sin16s::isUpper#5 ← phi( sin16s::@8/(byte) sin16s::isUpper#6 )
  (word) sin16s::x1#4 ← phi( sin16s::@8/(word) sin16s::x1#1 )
  (word) mulu16_sel::return#8 ← phi( sin16s::@8/(word) mulu16_sel::return#1 )
  (word~) sin16s::$9 ← (word) mulu16_sel::return#8
  (word) sin16s::x3#0 ← (word~) sin16s::$9
  (word/signed word/dword/signed dword~) sin16s::$10 ← (dword/signed dword) 65536 / (byte/signed byte/word/signed word/dword/signed dword) 6
  (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
  (word) mulu16_sel::v2#2 ← (word/signed word/dword/signed dword~) sin16s::$10
  (byte) mulu16_sel::select#2 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  call mulu16_sel 
  (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#6
  to:sin16s::@10
sin16s::@10: scope:[sin16s]  from sin16s::@9
  (byte) sin16s::isUpper#4 ← phi( sin16s::@9/(byte) sin16s::isUpper#5 )
  (word) sin16s::x3#1 ← phi( sin16s::@9/(word) sin16s::x3#0 )
  (word) sin16s::x1#2 ← phi( sin16s::@9/(word) sin16s::x1#4 )
  (word) mulu16_sel::return#9 ← phi( sin16s::@9/(word) mulu16_sel::return#2 )
  (word~) sin16s::$11 ← (word) mulu16_sel::return#9
  (word) sin16s::x3_6#0 ← (word~) sin16s::$11
  (word~) sin16s::$12 ← (word) sin16s::x1#2 - (word) sin16s::x3_6#0
  (word) sin16s::usinx#0 ← (word~) sin16s::$12
  (word) mulu16_sel::v1#3 ← (word) sin16s::x3#1
  (word) mulu16_sel::v2#3 ← (word) sin16s::x1#2
  (byte) mulu16_sel::select#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call mulu16_sel 
  (word) mulu16_sel::return#3 ← (word) mulu16_sel::return#6
  to:sin16s::@11
sin16s::@11: scope:[sin16s]  from sin16s::@10
  (byte) sin16s::isUpper#3 ← phi( sin16s::@10/(byte) sin16s::isUpper#4 )
  (word) sin16s::usinx#4 ← phi( sin16s::@10/(word) sin16s::usinx#0 )
  (word) sin16s::x1#3 ← phi( sin16s::@10/(word) sin16s::x1#2 )
  (word) mulu16_sel::return#10 ← phi( sin16s::@10/(word) mulu16_sel::return#3 )
  (word~) sin16s::$13 ← (word) mulu16_sel::return#10
  (word) sin16s::x4#0 ← (word~) sin16s::$13
  (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
  (word) mulu16_sel::v2#4 ← (word) sin16s::x1#3
  (byte) mulu16_sel::select#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  call mulu16_sel 
  (word) mulu16_sel::return#4 ← (word) mulu16_sel::return#6
  to:sin16s::@12
sin16s::@12: scope:[sin16s]  from sin16s::@11
  (byte) sin16s::isUpper#2 ← phi( sin16s::@11/(byte) sin16s::isUpper#3 )
  (word) sin16s::usinx#2 ← phi( sin16s::@11/(word) sin16s::usinx#4 )
  (word) mulu16_sel::return#11 ← phi( sin16s::@11/(word) mulu16_sel::return#4 )
  (word~) sin16s::$14 ← (word) mulu16_sel::return#11
  (word) sin16s::x5#0 ← (word~) sin16s::$14
  (word~) sin16s::$15 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
  (word) sin16s::x5_128#0 ← (word~) sin16s::$15
  (word~) sin16s::$16 ← (word) sin16s::usinx#2 + (word) sin16s::x5_128#0
  (word) sin16s::usinx#1 ← (word~) sin16s::$16
  (signed word~) sin16s::$17 ← ((signed word)) (word) sin16s::usinx#1
  (signed word) sin16s::sinx#0 ← (signed word~) sin16s::$17
  (bool~) sin16s::$18 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) sin16s::$19 ← ! (bool~) sin16s::$18
  if((bool~) sin16s::$19) goto sin16s::@3
  to:sin16s::@6
sin16s::@5: scope:[sin16s]  from sin16s::@1
  (byte) sin16s::isUpper#9 ← phi( sin16s::@1/(byte) sin16s::isUpper#8 )
  (dword) sin16s::x#7 ← phi( sin16s::@1/(dword) sin16s::x#4 )
  (dword~) sin16s::$5 ← (dword) PI_u4f28#0 - (dword) sin16s::x#7
  (dword) sin16s::x#2 ← (dword~) sin16s::$5
  to:sin16s::@2
sin16s::@3: scope:[sin16s]  from sin16s::@12 sin16s::@6
  (signed word) sin16s::sinx#2 ← phi( sin16s::@12/(signed word) sin16s::sinx#0 sin16s::@6/(signed word) sin16s::sinx#1 )
  (signed word) sin16s::return#1 ← (signed word) sin16s::sinx#2
  to:sin16s::@return
sin16s::@6: scope:[sin16s]  from sin16s::@12
  (word) sin16s::usinx#3 ← phi( sin16s::@12/(word) sin16s::usinx#1 )
  (signed word~) sin16s::$20 ← ((signed word)) (word) sin16s::usinx#3
  (signed word~) sin16s::$21 ← - (signed word~) sin16s::$20
  (signed word) sin16s::sinx#1 ← (signed word~) sin16s::$21
  to:sin16s::@3
sin16s::@return: scope:[sin16s]  from sin16s::@3
  (signed word) sin16s::return#4 ← phi( sin16s::@3/(signed word) sin16s::return#1 )
  (signed word) sin16s::return#2 ← (signed word) sin16s::return#4
  return 
  to:@return
mulu16_sel: scope:[mulu16_sel]  from sin16s::@10 sin16s::@11 sin16s::@2 sin16s::@8 sin16s::@9
  (byte) mulu16_sel::select#6 ← phi( sin16s::@10/(byte) mulu16_sel::select#3 sin16s::@11/(byte) mulu16_sel::select#4 sin16s::@2/(byte) mulu16_sel::select#0 sin16s::@8/(byte) mulu16_sel::select#1 sin16s::@9/(byte) mulu16_sel::select#2 )
  (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(word) mulu16_sel::v2#2 )
  (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
  (word) mul16u::a#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
fill: scope:[fill]  from main::@3 main::@4
  (byte) fill::val#3 ← phi( main::@3/(byte) fill::val#0 main::@4/(byte) fill::val#1 )
  (word) fill::size#2 ← phi( main::@3/(word) fill::size#0 main::@4/(word) fill::size#1 )
  (byte*) fill::start#2 ← phi( main::@3/(byte*) fill::start#0 main::@4/(byte*) fill::start#1 )
  (byte*~) fill::$0 ← (byte*) fill::start#2 + (word) fill::size#2
  (byte*) fill::end#0 ← (byte*~) fill::$0
  (byte*) fill::addr#0 ← (byte*) fill::start#2
  to:fill::@1
fill::@1: scope:[fill]  from fill fill::@1
  (byte*) fill::end#1 ← phi( fill/(byte*) fill::end#0 fill::@1/(byte*) fill::end#1 )
  (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
  (byte) fill::val#2 ← phi( fill/(byte) fill::val#3 fill::@1/(byte) fill::val#2 )
  *((byte*) fill::addr#2) ← (byte) fill::val#2
  (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
  (bool~) fill::$1 ← (byte*) fill::addr#1 != (byte*) fill::end#1
  if((bool~) fill::$1) goto fill::@1
  to:fill::@return
fill::@return: scope:[fill]  from fill::@1
  return 
  to:@return
@25: scope:[]  from @17
  (word) rem16u#31 ← phi( @17/(word) rem16u#32 )
  (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*) LOGO#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
  (byte/word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 6 * (byte/signed byte/word/signed word/dword/signed dword) 40
  (byte/signed word/word/dword/signed dword~) $1 ← (byte/word/signed word/dword/signed dword~) $0 * (byte/signed byte/word/signed word/dword/signed dword) 8
  kickasm(location (byte*) LOGO#0) {{ .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)
 }}
  (word) XSIN_SIZE#0 ← (word/signed word/dword/signed dword) 512
  (signed word[XSIN_SIZE#0]) xsin#0 ← { fill( XSIN_SIZE#0, 0) }
  to:@26
main: scope:[main]  from @28
  (word) xsin_idx#28 ← phi( @28/(word) xsin_idx#16 )
  (word) rem16u#39 ← phi( @28/(word) rem16u#25 )
  (byte*) LOGO#1 ← phi( @28/(byte*) LOGO#2 )
  (byte*) SCREEN#1 ← phi( @28/(byte*) SCREEN#8 )
  asm { sei  }
  *((byte*) BORDERCOL#0) ← (byte) WHITE#0
  *((byte*) BGCOL2#0) ← (byte) DARK_GREY#0
  *((byte*) BGCOL#0) ← *((byte*) BGCOL2#0)
  *((byte*) BGCOL3#0) ← (byte) BLACK#0
  (byte*) main::toD0181_screen#0 ← (byte*) SCREEN#1
  (byte*) main::toD0181_gfx#0 ← (byte*) LOGO#1
  to:main::toD0181
main::toD0181: scope:[main]  from main
  (word) xsin_idx#27 ← phi( main/(word) xsin_idx#28 )
  (word) rem16u#38 ← phi( main/(word) rem16u#39 )
  (byte*) SCREEN#15 ← phi( main/(byte*) SCREEN#1 )
  (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#0 ← ((word)) (byte*) main::toD0181_screen#1
  (word) main::toD0181_$1#0 ← (word) main::toD0181_$0#0 & (word/signed word/dword/signed dword) 16383
  (word) main::toD0181_$2#0 ← (word) main::toD0181_$1#0 << (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) main::toD0181_$3#0 ← > (word) main::toD0181_$2#0
  (word) main::toD0181_$4#0 ← ((word)) (byte*) main::toD0181_gfx#1
  (byte) main::toD0181_$5#0 ← > (word) main::toD0181_$4#0
  (byte) main::toD0181_$6#0 ← (byte) main::toD0181_$5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) main::toD0181_$7#0 ← (byte) main::toD0181_$6#0 & (byte/signed byte/word/signed word/dword/signed dword) 15
  (byte) main::toD0181_$8#0 ← (byte) main::toD0181_$3#0 | (byte) main::toD0181_$7#0
  (byte) main::toD0181_return#0 ← (byte) main::toD0181_$8#0
  to:main::toD0181_@return
main::toD0181_@return: scope:[main]  from main::toD0181
  (word) xsin_idx#26 ← phi( main::toD0181/(word) xsin_idx#27 )
  (word) rem16u#37 ← phi( main::toD0181/(word) rem16u#38 )
  (byte*) SCREEN#9 ← phi( main::toD0181/(byte*) SCREEN#15 )
  (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#25 ← phi( main::toD0181_@return/(word) xsin_idx#26 )
  (word) rem16u#35 ← phi( main::toD0181_@return/(word) rem16u#37 )
  (byte*) SCREEN#2 ← phi( main::toD0181_@return/(byte*) SCREEN#9 )
  (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
  (byte~) main::$0 ← (byte) main::toD0181_return#3
  *((byte*) D018#0) ← (byte~) main::$0
  *((byte*) D016#0) ← (byte) VIC_MCM#0
  (byte*) fill::start#0 ← (byte*) SCREEN#2
  (word) fill::size#0 ← (word/signed word/dword/signed dword) 1000
  (byte) fill::val#0 ← (byte) BLACK#0
  call fill 
  to:main::@4
main::@4: scope:[main]  from main::@3
  (word) xsin_idx#24 ← phi( main::@3/(word) xsin_idx#25 )
  (word) rem16u#33 ← phi( main::@3/(word) rem16u#35 )
  (byte*) SCREEN#16 ← phi( main::@3/(byte*) SCREEN#2 )
  (byte/word/dword~) main::$2 ← (byte) WHITE#0 | (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) fill::start#1 ← (byte*) COLS#0
  (word) fill::size#1 ← (word/signed word/dword/signed dword) 1000
  (byte) fill::val#1 ← (byte/word/dword~) main::$2
  call fill 
  to:main::@5
main::@5: scope:[main]  from main::@4
  (word) xsin_idx#23 ← phi( main::@4/(word) xsin_idx#24 )
  (word) rem16u#30 ← phi( main::@4/(word) rem16u#33 )
  (byte*) SCREEN#10 ← phi( main::@4/(byte*) SCREEN#16 )
  (byte) main::ch#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:main::@1
main::@1: scope:[main]  from main::@1 main::@5
  (word) xsin_idx#22 ← phi( main::@1/(word) xsin_idx#22 main::@5/(word) xsin_idx#23 )
  (word) rem16u#27 ← phi( main::@1/(word) rem16u#27 main::@5/(word) rem16u#30 )
  (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#3 main::@5/(byte*) SCREEN#10 )
  (byte) main::ch#2 ← phi( main::@1/(byte) main::ch#1 main::@5/(byte) main::ch#0 )
  *((byte*) SCREEN#3 + (byte) main::ch#2) ← (byte) main::ch#2
  (byte) main::ch#1 ← (byte) main::ch#2 + rangenext(0,239)
  (bool~) main::$4 ← (byte) main::ch#1 != rangelast(0,239)
  if((bool~) main::$4) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  (byte*) SCREEN#40 ← phi( main::@1/(byte*) SCREEN#3 )
  (word) xsin_idx#17 ← phi( main::@1/(word) xsin_idx#22 )
  (word) rem16u#23 ← phi( main::@1/(word) rem16u#27 )
  (signed word/signed dword~) main::$5 ← - (word/signed word/dword/signed dword) 320
  (signed word*) sin16s_gen2::sintab#1 ← (signed word[XSIN_SIZE#0]) xsin#0
  (word) sin16s_gen2::wavelength#0 ← (word) XSIN_SIZE#0
  (signed word) sin16s_gen2::min#0 ← (signed word/signed dword~) main::$5
  (signed word) sin16s_gen2::max#0 ← (word/signed word/dword/signed dword) 320
  call sin16s_gen2 
  to:main::@6
main::@6: scope:[main]  from main::@2
  (byte*) SCREEN#37 ← phi( main::@2/(byte*) SCREEN#40 )
  (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
@26: scope:[]  from @25
  (word) rem16u#28 ← phi( @25/(word) rem16u#31 )
  (byte*) LOGO#3 ← phi( @25/(byte*) LOGO#0 )
  (byte*) SCREEN#21 ← phi( @25/(byte*) SCREEN#0 )
  (word) xsin_idx#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:@28
loop: scope:[loop]  from main::@6
  (byte*) SCREEN#35 ← phi( main::@6/(byte*) SCREEN#37 )
  (word) xsin_idx#18 ← phi( main::@6/(word) xsin_idx#13 )
  to:loop::@1
loop::@1: scope:[loop]  from loop loop::@7
  (byte*) SCREEN#34 ← phi( loop/(byte*) SCREEN#35 loop::@7/(byte*) SCREEN#36 )
  (word) xsin_idx#15 ← phi( loop/(word) xsin_idx#18 loop::@7/(word) xsin_idx#19 )
  if(true) goto loop::@2
  to:loop::@return
loop::@2: scope:[loop]  from loop::@1
  (byte*) SCREEN#32 ← phi( loop::@1/(byte*) SCREEN#34 )
  (word) xsin_idx#20 ← phi( loop::@1/(word) xsin_idx#15 )
  to:loop::@4
loop::@4: scope:[loop]  from loop::@2 loop::@5
  (byte*) SCREEN#31 ← phi( loop::@2/(byte*) SCREEN#32 loop::@5/(byte*) SCREEN#33 )
  (word) xsin_idx#14 ← phi( loop::@2/(word) xsin_idx#20 loop::@5/(word) xsin_idx#21 )
  (bool~) loop::$0 ← *((byte*) RASTER#0) != (byte/word/signed word/dword/signed dword) 255
  if((bool~) loop::$0) goto loop::@5
  to:loop::@6
loop::@5: scope:[loop]  from loop::@4
  (byte*) SCREEN#33 ← phi( loop::@4/(byte*) SCREEN#31 )
  (word) xsin_idx#21 ← phi( loop::@4/(word) xsin_idx#14 )
  to:loop::@4
loop::@6: scope:[loop]  from loop::@4
  (byte*) SCREEN#30 ← phi( loop::@4/(byte*) SCREEN#31 )
  (word) xsin_idx#9 ← phi( loop::@4/(word) xsin_idx#14 )
  *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0)
  (signed word*~) loop::$1 ← (signed word[XSIN_SIZE#0]) xsin#0 + (word) xsin_idx#9
  (signed word) loop::xpos#0 ← *((signed word*~) loop::$1)
  (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
  call render_logo 
  to:loop::@15
loop::@15: scope:[loop]  from loop::@6
  (byte*) SCREEN#39 ← phi( loop::@6/(byte*) SCREEN#30 )
  (word) xsin_idx#10 ← phi( loop::@6/(word) xsin_idx#9 )
  (word) xsin_idx#3 ← (word) xsin_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 2
  (word/signed dword/dword~) loop::$3 ← (word) XSIN_SIZE#0 * (byte/signed byte/word/signed word/dword/signed dword) 2
  (bool~) loop::$4 ← (word) xsin_idx#3 == (word/signed dword/dword~) loop::$3
  (bool~) loop::$5 ← ! (bool~) loop::$4
  if((bool~) loop::$5) goto loop::@7
  to:loop::@13
loop::@7: scope:[loop]  from loop::@13 loop::@15
  (byte*) SCREEN#36 ← phi( loop::@13/(byte*) SCREEN#38 loop::@15/(byte*) SCREEN#39 )
  (word) xsin_idx#19 ← phi( loop::@13/(word) xsin_idx#4 loop::@15/(word) xsin_idx#3 )
  *((byte*) BORDERCOL#0) ← -- *((byte*) BORDERCOL#0)
  to:loop::@1
loop::@13: scope:[loop]  from loop::@15
  (byte*) SCREEN#38 ← phi( loop::@15/(byte*) SCREEN#39 )
  (word) xsin_idx#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:loop::@7
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
render_logo: scope:[render_logo]  from loop::@6
  (byte*) SCREEN#29 ← phi( loop::@6/(byte*) SCREEN#30 )
  (signed word) render_logo::xpos#1 ← phi( loop::@6/(signed word) render_logo::xpos#0 )
  (byte~) render_logo::$0 ← ((byte)) (signed word) render_logo::xpos#1
  (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte~) render_logo::$2 ← (byte) VIC_MCM#0 | (byte~) render_logo::$1
  *((byte*) D016#0) ← (byte~) render_logo::$2
  (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#1 >> (byte/signed byte/word/signed word/dword/signed dword) 3
  (signed byte~) render_logo::$4 ← ((signed byte)) (signed word~) render_logo::$3
  (signed byte) render_logo::x_char#0 ← (signed byte~) render_logo::$4
  (byte) render_logo::line#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (bool~) render_logo::$5 ← (signed word) render_logo::xpos#1 < (byte/signed byte/word/signed word/dword/signed dword) 0
  if((bool~) render_logo::$5) goto render_logo::@1
  to:render_logo::@19
render_logo::@1: scope:[render_logo]  from render_logo
  (byte*) SCREEN#26 ← phi( render_logo/(byte*) SCREEN#29 )
  (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#0 ← (byte~) render_logo::$18
  (byte) render_logo::screen_idx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@11
render_logo::@19: scope:[render_logo]  from render_logo
  (byte*) SCREEN#22 ← phi( render_logo/(byte*) SCREEN#29 )
  (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#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@2
render_logo::@2: scope:[render_logo]  from render_logo::@19 render_logo::@22
  (byte*) SCREEN#17 ← phi( render_logo::@19/(byte*) SCREEN#22 render_logo::@22/(byte*) SCREEN#23 )
  (byte) render_logo::logo_start#1 ← phi( render_logo::@19/(byte) render_logo::logo_start#0 render_logo::@22/(byte) render_logo::logo_start#2 )
  (byte) render_logo::screen_idx#6 ← phi( render_logo::@19/(byte) render_logo::screen_idx#1 render_logo::@22/(byte) render_logo::screen_idx#2 )
  (bool~) render_logo::$7 ← (byte) render_logo::screen_idx#6 != (byte) render_logo::logo_start#1
  if((bool~) render_logo::$7) goto render_logo::@3
  to:render_logo::@4
render_logo::@3: scope:[render_logo]  from render_logo::@2
  (byte) render_logo::logo_start#4 ← phi( render_logo::@2/(byte) render_logo::logo_start#1 )
  (byte) render_logo::screen_idx#17 ← phi( render_logo::@2/(byte) render_logo::screen_idx#6 )
  (byte*) SCREEN#11 ← phi( render_logo::@2/(byte*) SCREEN#17 )
  (byte) render_logo::line#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@5
render_logo::@4: scope:[render_logo]  from render_logo::@2
  (byte*) SCREEN#25 ← phi( render_logo::@2/(byte*) SCREEN#17 )
  (byte) render_logo::screen_idx#18 ← phi( render_logo::@2/(byte) render_logo::screen_idx#6 )
  (byte) render_logo::logo_idx#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@6
render_logo::@5: scope:[render_logo]  from render_logo::@3 render_logo::@5
  (byte) render_logo::logo_start#3 ← phi( render_logo::@3/(byte) render_logo::logo_start#4 render_logo::@5/(byte) render_logo::logo_start#3 )
  (byte) render_logo::screen_idx#7 ← phi( render_logo::@3/(byte) render_logo::screen_idx#17 render_logo::@5/(byte) render_logo::screen_idx#7 )
  (byte*) SCREEN#4 ← phi( render_logo::@3/(byte*) SCREEN#11 render_logo::@5/(byte*) SCREEN#4 )
  (byte) render_logo::line#9 ← phi( render_logo::@3/(byte) render_logo::line#1 render_logo::@5/(byte) render_logo::line#2 )
  (byte/signed word/word/dword/signed dword~) render_logo::$8 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte) render_logo::line#9
  (byte*~) render_logo::$9 ← (byte*) SCREEN#4 + (byte/signed word/word/dword/signed dword~) render_logo::$8
  *((byte*~) render_logo::$9 + (byte) render_logo::screen_idx#7) ← (byte/signed byte/word/signed word/dword/signed dword) 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::@5
  to:render_logo::@22
render_logo::@22: scope:[render_logo]  from render_logo::@5
  (byte*) SCREEN#23 ← phi( render_logo::@5/(byte*) SCREEN#4 )
  (byte) render_logo::logo_start#2 ← phi( render_logo::@5/(byte) render_logo::logo_start#3 )
  (byte) render_logo::screen_idx#8 ← phi( render_logo::@5/(byte) render_logo::screen_idx#7 )
  (byte) render_logo::screen_idx#2 ← ++ (byte) render_logo::screen_idx#8
  to:render_logo::@2
render_logo::@6: scope:[render_logo]  from render_logo::@26 render_logo::@4
  (byte) render_logo::logo_idx#11 ← phi( render_logo::@26/(byte) render_logo::logo_idx#2 render_logo::@4/(byte) render_logo::logo_idx#1 )
  (byte*) SCREEN#18 ← phi( render_logo::@26/(byte*) SCREEN#24 render_logo::@4/(byte*) SCREEN#25 )
  (byte) render_logo::screen_idx#9 ← phi( render_logo::@26/(byte) render_logo::screen_idx#3 render_logo::@4/(byte) render_logo::screen_idx#18 )
  (bool~) render_logo::$11 ← (byte) render_logo::screen_idx#9 != (byte/signed byte/word/signed word/dword/signed dword) 40
  if((bool~) render_logo::$11) goto render_logo::@7
  to:render_logo::@return
render_logo::@7: scope:[render_logo]  from render_logo::@6
  (byte) render_logo::screen_idx#19 ← phi( render_logo::@6/(byte) render_logo::screen_idx#9 )
  (byte) render_logo::logo_idx#9 ← phi( render_logo::@6/(byte) render_logo::logo_idx#11 )
  (byte*) SCREEN#12 ← phi( render_logo::@6/(byte*) SCREEN#18 )
  (byte) render_logo::line#3 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@9
render_logo::@9: scope:[render_logo]  from render_logo::@7 render_logo::@9
  (byte) render_logo::screen_idx#10 ← phi( render_logo::@7/(byte) render_logo::screen_idx#19 render_logo::@9/(byte) render_logo::screen_idx#10 )
  (byte) render_logo::logo_idx#4 ← phi( render_logo::@7/(byte) render_logo::logo_idx#9 render_logo::@9/(byte) render_logo::logo_idx#4 )
  (byte*) SCREEN#5 ← phi( render_logo::@7/(byte*) SCREEN#12 render_logo::@9/(byte*) SCREEN#5 )
  (byte) render_logo::line#10 ← phi( render_logo::@7/(byte) render_logo::line#3 render_logo::@9/(byte) render_logo::line#4 )
  (byte/signed word/word/dword/signed dword~) render_logo::$12 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte) render_logo::line#10
  (byte*~) render_logo::$13 ← (byte*) SCREEN#5 + (byte/signed word/word/dword/signed dword~) render_logo::$12
  (byte/signed word/word/dword/signed dword~) render_logo::$14 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte) render_logo::line#10
  (byte/signed word/word/dword/signed dword~) render_logo::$15 ← (byte) render_logo::logo_idx#4 + (byte/signed word/word/dword/signed dword~) render_logo::$14
  *((byte*~) render_logo::$13 + (byte) render_logo::screen_idx#10) ← (byte/signed word/word/dword/signed dword~) 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::@9
  to:render_logo::@26
render_logo::@26: scope:[render_logo]  from render_logo::@9
  (byte*) SCREEN#24 ← phi( render_logo::@9/(byte*) SCREEN#5 )
  (byte) render_logo::logo_idx#5 ← phi( render_logo::@9/(byte) render_logo::logo_idx#4 )
  (byte) render_logo::screen_idx#11 ← phi( render_logo::@9/(byte) render_logo::screen_idx#10 )
  (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#11
  (byte) render_logo::logo_idx#2 ← ++ (byte) render_logo::logo_idx#5
  to:render_logo::@6
render_logo::@11: scope:[render_logo]  from render_logo::@1 render_logo::@31
  (byte*) SCREEN#19 ← phi( render_logo::@1/(byte*) SCREEN#26 render_logo::@31/(byte*) SCREEN#27 )
  (byte) render_logo::screen_idx#21 ← phi( render_logo::@1/(byte) render_logo::screen_idx#0 render_logo::@31/(byte) render_logo::screen_idx#4 )
  (byte) render_logo::logo_idx#6 ← phi( render_logo::@1/(byte) render_logo::logo_idx#0 render_logo::@31/(byte) render_logo::logo_idx#3 )
  (bool~) render_logo::$19 ← (byte) render_logo::logo_idx#6 != (byte/signed byte/word/signed word/dword/signed dword) 40
  if((bool~) render_logo::$19) goto render_logo::@12
  to:render_logo::@15
render_logo::@12: scope:[render_logo]  from render_logo::@11
  (byte) render_logo::screen_idx#20 ← phi( render_logo::@11/(byte) render_logo::screen_idx#21 )
  (byte) render_logo::logo_idx#10 ← phi( render_logo::@11/(byte) render_logo::logo_idx#6 )
  (byte*) SCREEN#13 ← phi( render_logo::@11/(byte*) SCREEN#19 )
  (byte) render_logo::line#5 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@14
render_logo::@14: scope:[render_logo]  from render_logo::@12 render_logo::@14
  (byte) render_logo::screen_idx#12 ← phi( render_logo::@12/(byte) render_logo::screen_idx#20 render_logo::@14/(byte) render_logo::screen_idx#12 )
  (byte) render_logo::logo_idx#7 ← phi( render_logo::@12/(byte) render_logo::logo_idx#10 render_logo::@14/(byte) render_logo::logo_idx#7 )
  (byte*) SCREEN#6 ← phi( render_logo::@12/(byte*) SCREEN#13 render_logo::@14/(byte*) SCREEN#6 )
  (byte) render_logo::line#11 ← phi( render_logo::@12/(byte) render_logo::line#5 render_logo::@14/(byte) render_logo::line#6 )
  (byte/signed word/word/dword/signed dword~) render_logo::$20 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte) render_logo::line#11
  (byte*~) render_logo::$21 ← (byte*) SCREEN#6 + (byte/signed word/word/dword/signed dword~) render_logo::$20
  (byte/signed word/word/dword/signed dword~) render_logo::$22 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte) render_logo::line#11
  (byte/signed word/word/dword/signed dword~) render_logo::$23 ← (byte) render_logo::logo_idx#7 + (byte/signed word/word/dword/signed dword~) render_logo::$22
  *((byte*~) render_logo::$21 + (byte) render_logo::screen_idx#12) ← (byte/signed word/word/dword/signed dword~) 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::@14
  to:render_logo::@31
render_logo::@31: scope:[render_logo]  from render_logo::@14
  (byte*) SCREEN#27 ← phi( render_logo::@14/(byte*) SCREEN#6 )
  (byte) render_logo::logo_idx#8 ← phi( render_logo::@14/(byte) render_logo::logo_idx#7 )
  (byte) render_logo::screen_idx#13 ← phi( render_logo::@14/(byte) render_logo::screen_idx#12 )
  (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#13
  (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#8
  to:render_logo::@11
render_logo::@15: scope:[render_logo]  from render_logo::@11 render_logo::@35
  (byte*) SCREEN#20 ← phi( render_logo::@11/(byte*) SCREEN#19 render_logo::@35/(byte*) SCREEN#28 )
  (byte) render_logo::screen_idx#14 ← phi( render_logo::@11/(byte) render_logo::screen_idx#21 render_logo::@35/(byte) render_logo::screen_idx#5 )
  (bool~) render_logo::$25 ← (byte) render_logo::screen_idx#14 != (byte/signed byte/word/signed word/dword/signed dword) 40
  if((bool~) render_logo::$25) goto render_logo::@16
  to:render_logo::@return
render_logo::@16: scope:[render_logo]  from render_logo::@15
  (byte) render_logo::screen_idx#22 ← phi( render_logo::@15/(byte) render_logo::screen_idx#14 )
  (byte*) SCREEN#14 ← phi( render_logo::@15/(byte*) SCREEN#20 )
  (byte) render_logo::line#7 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@18
render_logo::@18: scope:[render_logo]  from render_logo::@16 render_logo::@18
  (byte) render_logo::screen_idx#15 ← phi( render_logo::@16/(byte) render_logo::screen_idx#22 render_logo::@18/(byte) render_logo::screen_idx#15 )
  (byte*) SCREEN#7 ← phi( render_logo::@16/(byte*) SCREEN#14 render_logo::@18/(byte*) SCREEN#7 )
  (byte) render_logo::line#12 ← phi( render_logo::@16/(byte) render_logo::line#7 render_logo::@18/(byte) render_logo::line#8 )
  (byte/signed word/word/dword/signed dword~) render_logo::$26 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte) render_logo::line#12
  (byte*~) render_logo::$27 ← (byte*) SCREEN#7 + (byte/signed word/word/dword/signed dword~) render_logo::$26
  *((byte*~) render_logo::$27 + (byte) render_logo::screen_idx#15) ← (byte/signed byte/word/signed word/dword/signed dword) 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::@18
  to:render_logo::@35
render_logo::@35: scope:[render_logo]  from render_logo::@18
  (byte*) SCREEN#28 ← phi( render_logo::@18/(byte*) SCREEN#7 )
  (byte) render_logo::screen_idx#16 ← phi( render_logo::@18/(byte) render_logo::screen_idx#15 )
  (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#16
  to:render_logo::@15
render_logo::@return: scope:[render_logo]  from render_logo::@15 render_logo::@6
  return 
  to:@return
@28: scope:[]  from @26
  (word) xsin_idx#16 ← phi( @26/(word) xsin_idx#2 )
  (word) rem16u#25 ← phi( @26/(word) rem16u#28 )
  (byte*) LOGO#2 ← phi( @26/(byte*) LOGO#3 )
  (byte*) SCREEN#8 ← phi( @26/(byte*) SCREEN#21 )
  call main 
  to:@29
@29: scope:[]  from @28
  (word) xsin_idx#12 ← phi( @28/(word) xsin_idx#1 )
  (word) rem16u#19 ← phi( @28/(word) rem16u#9 )
  (word) rem16u#10 ← (word) rem16u#19
  (word) xsin_idx#6 ← (word) xsin_idx#12
  to:@end
@end: scope:[]  from @29

SYMBOL TABLE SSA
(byte/word/signed word/dword/signed dword~) $0
(byte/signed word/word/dword/signed dword~) $1
(label) @10
(label) @17
(label) @25
(label) @26
(label) @28
(label) @29
(label) @4
(label) @6
(label) @9
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte*) LOGO
(byte*) LOGO#0
(byte*) LOGO#1
(byte*) LOGO#2
(byte*) LOGO#3
(byte) ORANGE
(byte) ORANGE#0
(word) PI2_u4f12
(word) PI2_u4f12#0
(dword) PI2_u4f28
(dword) PI2_u4f28#0
(byte) PINK
(byte) PINK#0
(word) PI_HALF_u4f12
(word) PI_HALF_u4f12#0
(dword) PI_HALF_u4f28
(dword) PI_HALF_u4f28#0
(word) PI_u4f12
(word) PI_u4f12#0
(dword) PI_u4f28
(dword) PI_u4f28#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SCREEN
(byte*) SCREEN#0
(byte*) SCREEN#1
(byte*) SCREEN#10
(byte*) SCREEN#11
(byte*) SCREEN#12
(byte*) SCREEN#13
(byte*) SCREEN#14
(byte*) SCREEN#15
(byte*) SCREEN#16
(byte*) SCREEN#17
(byte*) SCREEN#18
(byte*) SCREEN#19
(byte*) SCREEN#2
(byte*) SCREEN#20
(byte*) SCREEN#21
(byte*) SCREEN#22
(byte*) SCREEN#23
(byte*) SCREEN#24
(byte*) SCREEN#25
(byte*) SCREEN#26
(byte*) SCREEN#27
(byte*) SCREEN#28
(byte*) SCREEN#29
(byte*) SCREEN#3
(byte*) SCREEN#30
(byte*) SCREEN#31
(byte*) SCREEN#32
(byte*) SCREEN#33
(byte*) SCREEN#34
(byte*) SCREEN#35
(byte*) SCREEN#36
(byte*) SCREEN#37
(byte*) SCREEN#38
(byte*) SCREEN#39
(byte*) SCREEN#4
(byte*) SCREEN#40
(byte*) SCREEN#5
(byte*) SCREEN#6
(byte*) SCREEN#7
(byte*) SCREEN#8
(byte*) SCREEN#9
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(word) XSIN_SIZE
(word) XSIN_SIZE#0
(byte) YELLOW
(byte) YELLOW#0
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(word~) div32u16u::$0
(word~) div32u16u::$1
(word~) div32u16u::$2
(word~) div32u16u::$3
(label) div32u16u::@2
(label) div32u16u::@3
(label) div32u16u::@return
(dword) div32u16u::dividend
(dword) div32u16u::dividend#0
(dword) div32u16u::dividend#1
(dword) div32u16u::dividend#2
(word) div32u16u::divisor
(word) div32u16u::divisor#0
(word) div32u16u::divisor#1
(word) div32u16u::divisor#2
(dword) div32u16u::quotient
(dword) div32u16u::quotient#0
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0
(word) div32u16u::quotient_hi#1
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0
(dword) div32u16u::return
(dword) div32u16u::return#0
(dword) div32u16u::return#1
(dword) div32u16u::return#2
(dword) div32u16u::return#3
(dword) div32u16u::return#4
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(word~) divr16u::$0
(byte~) divr16u::$1
(word~) divr16u::$10
(bool~) divr16u::$11
(byte~) divr16u::$2
(bool~) divr16u::$3
(bool~) divr16u::$4
(word/dword~) divr16u::$5
(word~) divr16u::$6
(word~) divr16u::$7
(bool~) divr16u::$8
(bool~) divr16u::$9
(label) divr16u::@1
(label) divr16u::@2
(label) divr16u::@3
(label) divr16u::@4
(label) divr16u::@5
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0
(word) divr16u::dividend#1
(word) divr16u::dividend#2
(word) divr16u::dividend#3
(word) divr16u::dividend#4
(word) divr16u::dividend#5
(word) divr16u::dividend#6
(word) divr16u::dividend#7
(word) divr16u::dividend#8
(word) divr16u::divisor
(word) divr16u::divisor#0
(word) divr16u::divisor#1
(word) divr16u::divisor#2
(word) divr16u::divisor#3
(word) divr16u::divisor#4
(word) divr16u::divisor#5
(word) divr16u::divisor#6
(word) divr16u::divisor#7
(byte) divr16u::i
(byte) divr16u::i#0
(byte) divr16u::i#1
(byte) divr16u::i#2
(byte) divr16u::i#3
(byte) divr16u::i#4
(byte) divr16u::i#5
(byte) divr16u::i#6
(word) divr16u::quotient
(word) divr16u::quotient#0
(word) divr16u::quotient#1
(word) divr16u::quotient#2
(word) divr16u::quotient#3
(word) divr16u::quotient#4
(word) divr16u::quotient#5
(word) divr16u::quotient#6
(word) divr16u::quotient#7
(word) divr16u::quotient#8
(word) divr16u::rem
(word) divr16u::rem#0
(word) divr16u::rem#1
(word) divr16u::rem#10
(word) divr16u::rem#11
(word) divr16u::rem#2
(word) divr16u::rem#3
(word) divr16u::rem#4
(word) divr16u::rem#5
(word) divr16u::rem#6
(word) divr16u::rem#7
(word) divr16u::rem#8
(word) divr16u::rem#9
(word) divr16u::return
(word) divr16u::return#0
(word) divr16u::return#1
(word) divr16u::return#2
(word) divr16u::return#3
(word) divr16u::return#4
(word) divr16u::return#5
(word) divr16u::return#6
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(byte*~) fill::$0
(bool~) fill::$1
(label) fill::@1
(label) fill::@return
(byte*) fill::addr
(byte*) fill::addr#0
(byte*) fill::addr#1
(byte*) fill::addr#2
(byte*) fill::end
(byte*) fill::end#0
(byte*) fill::end#1
(word) fill::size
(word) fill::size#0
(word) fill::size#1
(word) fill::size#2
(byte*) fill::start
(byte*) fill::start#0
(byte*) fill::start#1
(byte*) fill::start#2
(byte) fill::val
(byte) fill::val#0
(byte) fill::val#1
(byte) fill::val#2
(byte) fill::val#3
(void()) loop()
(bool~) loop::$0
(signed word*~) loop::$1
(word/signed dword/dword~) loop::$3
(bool~) loop::$4
(bool~) loop::$5
(label) loop::@1
(label) loop::@13
(label) loop::@15
(label) loop::@2
(label) loop::@4
(label) loop::@5
(label) loop::@6
(label) loop::@7
(label) loop::@return
(signed word) loop::xpos
(signed word) loop::xpos#0
(void()) main()
(byte~) main::$0
(byte/word/dword~) main::$2
(bool~) main::$4
(signed word/signed dword~) 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
(word) main::toD0181_$0#0
(word~) main::toD0181_$1
(word) main::toD0181_$1#0
(word~) main::toD0181_$2
(word) main::toD0181_$2#0
(byte~) main::toD0181_$3
(byte) main::toD0181_$3#0
(word~) main::toD0181_$4
(word) main::toD0181_$4#0
(byte~) main::toD0181_$5
(byte) main::toD0181_$5#0
(byte~) main::toD0181_$6
(byte) main::toD0181_$6#0
(byte~) main::toD0181_$7
(byte) main::toD0181_$7#0
(byte~) main::toD0181_$8
(byte) main::toD0181_$8#0
(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
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$0
(word~) mul16s::$1
(bool~) mul16s::$10
(word~) mul16s::$12
(word~) mul16s::$13
(word~) mul16s::$14
(signed dword~) mul16s::$15
(word~) mul16s::$16
(word~) mul16s::$17
(dword~) mul16s::$2
(bool~) mul16s::$3
(bool~) mul16s::$4
(word~) mul16s::$6
(word~) mul16s::$7
(word~) mul16s::$8
(bool~) 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
(byte/word~) mul16u::$1
(bool~) mul16u::$2
(bool~) mul16u::$3
(dword~) mul16u::$4
(word~) mul16u::$5
(dword~) mul16u::$6
(label) mul16u::@1
(label) mul16u::@2
(label) mul16u::@3
(label) mul16u::@4
(label) mul16u::@7
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0
(word) mul16u::a#1
(word) mul16u::a#2
(word) mul16u::a#3
(word) mul16u::a#4
(word) mul16u::a#5
(word) mul16u::a#6
(word) mul16u::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
(signed word) rem16s
(signed word) rem16s#0
(word) rem16u
(word) rem16u#0
(word) rem16u#1
(word) rem16u#10
(word) rem16u#11
(word) rem16u#12
(word) rem16u#13
(word) rem16u#14
(word) rem16u#15
(word) rem16u#16
(word) rem16u#17
(word) rem16u#18
(word) rem16u#19
(word) rem16u#2
(word) rem16u#20
(word) rem16u#21
(word) rem16u#22
(word) rem16u#23
(word) rem16u#24
(word) rem16u#25
(word) rem16u#26
(word) rem16u#27
(word) rem16u#28
(word) rem16u#29
(word) rem16u#3
(word) rem16u#30
(word) rem16u#31
(word) rem16u#32
(word) rem16u#33
(word) rem16u#34
(word) rem16u#35
(word) rem16u#36
(word) rem16u#37
(word) rem16u#38
(word) rem16u#39
(word) rem16u#4
(word) rem16u#5
(word) rem16u#6
(word) rem16u#7
(word) rem16u#8
(word) rem16u#9
(signed byte) rem8s
(signed byte) rem8s#0
(byte) rem8u
(byte) rem8u#0
(void()) render_logo((signed word) render_logo::xpos)
(byte~) render_logo::$0
(byte~) render_logo::$1
(bool~) render_logo::$10
(bool~) render_logo::$11
(byte/signed word/word/dword/signed dword~) render_logo::$12
(byte*~) render_logo::$13
(byte/signed word/word/dword/signed dword~) render_logo::$14
(byte/signed word/word/dword/signed dword~) render_logo::$15
(bool~) render_logo::$16
(signed byte~) render_logo::$17
(byte~) render_logo::$18
(bool~) render_logo::$19
(byte~) render_logo::$2
(byte/signed word/word/dword/signed dword~) render_logo::$20
(byte*~) render_logo::$21
(byte/signed word/word/dword/signed dword~) render_logo::$22
(byte/signed word/word/dword/signed dword~) render_logo::$23
(bool~) render_logo::$24
(bool~) render_logo::$25
(byte/signed word/word/dword/signed dword~) render_logo::$26
(byte*~) render_logo::$27
(bool~) render_logo::$28
(signed word~) render_logo::$3
(signed byte~) render_logo::$4
(bool~) render_logo::$5
(byte~) render_logo::$6
(bool~) render_logo::$7
(byte/signed word/word/dword/signed dword~) render_logo::$8
(byte*~) render_logo::$9
(label) render_logo::@1
(label) render_logo::@11
(label) render_logo::@12
(label) render_logo::@14
(label) render_logo::@15
(label) render_logo::@16
(label) render_logo::@18
(label) render_logo::@19
(label) render_logo::@2
(label) render_logo::@22
(label) render_logo::@26
(label) render_logo::@3
(label) render_logo::@31
(label) render_logo::@35
(label) render_logo::@4
(label) render_logo::@5
(label) render_logo::@6
(label) render_logo::@7
(label) render_logo::@9
(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#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#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/signed word/dword/signed dword~) sin16s::$10
(word~) sin16s::$11
(word~) sin16s::$12
(word~) sin16s::$13
(word~) sin16s::$14
(word~) sin16s::$15
(word~) sin16s::$16
(signed word~) sin16s::$17
(bool~) sin16s::$18
(bool~) sin16s::$19
(dword~) sin16s::$2
(signed word~) sin16s::$20
(signed word~) sin16s::$21
(bool~) sin16s::$3
(bool~) sin16s::$4
(dword~) sin16s::$5
(dword~) sin16s::$6
(word~) sin16s::$7
(word~) sin16s::$8
(word~) sin16s::$9
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
(label) sin16s::@12
(label) sin16s::@2
(label) sin16s::@3
(label) sin16s::@4
(label) sin16s::@5
(label) sin16s::@6
(label) sin16s::@8
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#0
(byte) sin16s::isUpper#1
(byte) sin16s::isUpper#2
(byte) sin16s::isUpper#3
(byte) sin16s::isUpper#4
(byte) sin16s::isUpper#5
(byte) sin16s::isUpper#6
(byte) sin16s::isUpper#7
(byte) sin16s::isUpper#8
(byte) sin16s::isUpper#9
(signed word) sin16s::return
(signed word) sin16s::return#0
(signed word) sin16s::return#1
(signed word) sin16s::return#2
(signed word) sin16s::return#3
(signed word) sin16s::return#4
(signed word) sin16s::sinx
(signed word) sin16s::sinx#0
(signed word) sin16s::sinx#1
(signed word) sin16s::sinx#2
(word) sin16s::usinx
(word) sin16s::usinx#0
(word) sin16s::usinx#1
(word) sin16s::usinx#2
(word) sin16s::usinx#3
(word) sin16s::usinx#4
(dword) sin16s::x
(dword) sin16s::x#0
(dword) sin16s::x#1
(dword) sin16s::x#2
(dword) sin16s::x#3
(dword) sin16s::x#4
(dword) sin16s::x#5
(dword) sin16s::x#6
(dword) sin16s::x#7
(word) sin16s::x1
(word) sin16s::x1#0
(word) sin16s::x1#1
(word) sin16s::x1#2
(word) sin16s::x1#3
(word) sin16s::x1#4
(word) sin16s::x2
(word) sin16s::x2#0
(word) sin16s::x3
(word) sin16s::x3#0
(word) sin16s::x3#1
(word) sin16s::x3_6
(word) sin16s::x3_6#0
(word) sin16s::x4
(word) sin16s::x4#0
(word) sin16s::x5
(word) sin16s::x5#0
(word) sin16s::x5_128
(word) sin16s::x5_128#0
(void()) sin16s_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
(bool~) sin16s_gen2::$11
(signed word~) sin16s_gen2::$2
(dword~) sin16s_gen2::$3
(signed word~) sin16s_gen2::$4
(signed dword~) sin16s_gen2::$5
(word~) sin16s_gen2::$6
(signed word~) sin16s_gen2::$7
(signed word~) sin16s_gen2::$8
(signed word*~) sin16s_gen2::$9
(label) sin16s_gen2::@1
(label) sin16s_gen2::@3
(label) sin16s_gen2::@4
(label) sin16s_gen2::@5
(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
(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
(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::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
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0
(dword) sin16s_gen2::step#1
(dword) sin16s_gen2::step#2
(dword) sin16s_gen2::step#3
(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
(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
(signed word[XSIN_SIZE#0]) xsin
(signed word[XSIN_SIZE#0]) xsin#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#27
(word) xsin_idx#28
(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

Inversing boolean not [90] (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [89] (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [98] (bool~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from [97] (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2
Inversing boolean not [158] (bool~) mul16u::$3 ← (byte/word~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [157] (bool~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [184] (bool~) mul16s::$4 ← (signed word) mul16s::a#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [183] (bool~) mul16s::$3 ← (signed word) mul16s::a#2 < (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [188] (bool~) mul16s::$10 ← (signed word) mul16s::b#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [187] (bool~) mul16s::$9 ← (signed word) mul16s::b#2 < (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [260] (bool~) sin16s::$1 ← (dword) sin16s::x#3 < (dword) PI_u4f28#0 from [259] (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (dword) PI_u4f28#0
Inversing boolean not [264] (bool~) sin16s::$4 ← (dword) sin16s::x#4 < (dword) PI_HALF_u4f28#0 from [263] (bool~) sin16s::$3 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0
Inversing boolean not [324] (bool~) sin16s::$19 ← (byte) sin16s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [323] (bool~) sin16s::$18 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [447] (bool~) loop::$5 ← (word) xsin_idx#3 != (word/signed dword/dword~) loop::$3 from [446] (bool~) loop::$4 ← (word) xsin_idx#3 == (word/signed dword/dword~) loop::$3
Successful SSA optimization Pass2UnaryNotSimplification
Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7 
Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#8 
Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 
Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#7 
Alias (word) divr16u::quotient#6 = (word) divr16u::quotient#7 
Alias (word) divr16u::divisor#4 = (word) divr16u::divisor#5 
Alias (byte) divr16u::i#5 = (byte) divr16u::i#6 
Alias (word) divr16u::rem#1 = (word/dword~) divr16u::$5 
Alias (word) divr16u::rem#6 = (word) divr16u::rem#8 
Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#3 
Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 
Alias (word) divr16u::rem#2 = (word~) divr16u::$10 
Alias (word) divr16u::rem#11 = (word) divr16u::rem#9 
Alias (word) divr16u::return#0 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#4 (word) divr16u::return#1 
Alias (word) rem16u#1 = (word) rem16u#11 (word) rem16u#2 
Alias (word) divr16u::dividend#1 = (word~) div32u16u::$0 
Alias (word) divr16u::return#2 = (word) divr16u::return#5 
Alias (dword) div32u16u::dividend#1 = (dword) div32u16u::dividend#2 
Alias (word) div32u16u::divisor#1 = (word) div32u16u::divisor#2 
Alias (word) rem16u#12 = (word) rem16u#3 
Alias (word) div32u16u::quotient_hi#0 = (word~) div32u16u::$1 (word) div32u16u::quotient_hi#1 
Alias (word) divr16u::dividend#2 = (word~) div32u16u::$2 
Alias (word) divr16u::return#3 = (word) divr16u::return#6 
Alias (word) rem16u#13 = (word) rem16u#4 (word) rem16u#14 (word) rem16u#5 
Alias (word) div32u16u::quotient_lo#0 = (word~) div32u16u::$3 
Alias (dword) div32u16u::return#0 = (dword) div32u16u::quotient#0 (dword) div32u16u::return#3 (dword) div32u16u::return#1 
Alias (word) rem16u#0 = (word) rem16u#36 (word) rem16u#34 (word) rem16u#32 (word) rem16u#31 (word) rem16u#28 (word) rem16u#25 
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::$8 
Alias (signed dword) mul16s::return#0 = (signed dword~) mul16s::$15 (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::$14 
Alias (signed word) sin16s_gen2::ampl#0 = (signed word~) sin16s_gen2::$0 (signed word) sin16s_gen2::ampl#3 
Alias (signed word) sin16s_gen2::offs#0 = (signed word~) sin16s_gen2::$2 (signed word) sin16s_gen2::offs#4 
Alias (dword) div32u16u::return#2 = (dword) div32u16u::return#4 
Alias (signed word*) sin16s_gen2::sintab#5 = (signed word*) sin16s_gen2::sintab#6 
Alias (word) sin16s_gen2::wavelength#1 = (word) sin16s_gen2::wavelength#5 
Alias (word) rem16u#15 = (word) rem16u#6 
Alias (dword) sin16s_gen2::step#0 = (dword~) sin16s_gen2::$3 
Alias (signed word) sin16s::return#0 = (signed word) sin16s::return#3 
Alias (signed word) sin16s_gen2::ampl#1 = (signed word) sin16s_gen2::ampl#2 (signed word) sin16s_gen2::ampl#4 
Alias (signed word) sin16s_gen2::offs#1 = (signed word) sin16s_gen2::offs#2 (signed word) sin16s_gen2::offs#3 
Alias (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#3 (signed word*) sin16s_gen2::sintab#4 
Alias (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#4 (dword) sin16s_gen2::x#3 
Alias (dword) sin16s_gen2::step#1 = (dword) sin16s_gen2::step#2 (dword) sin16s_gen2::step#3 
Alias (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#3 (word) sin16s_gen2::i#4 
Alias (word) sin16s_gen2::wavelength#2 = (word) sin16s_gen2::wavelength#3 (word) sin16s_gen2::wavelength#4 
Alias (word) rem16u#16 = (word) rem16u#26 (word) rem16u#29 (word) rem16u#22 (word) rem16u#7 
Alias (signed word) mul16s::a#0 = (signed word~) sin16s_gen2::$4 
Alias (signed dword) mul16s::return#2 = (signed dword) mul16s::return#4 
Alias (signed word*) sin16s_gen2::sintab#0 = (signed word*~) sin16s_gen2::$9 
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::$2 
Alias (word) sin16s::x1#0 = (word~) sin16s::$7 (word) sin16s::x1#1 (word) sin16s::x1#4 (word) sin16s::x1#2 (word) sin16s::x1#3 
Alias (word) mulu16_sel::return#0 = (word) mulu16_sel::return#7 
Alias (byte) sin16s::isUpper#2 = (byte) sin16s::isUpper#6 (byte) sin16s::isUpper#7 (byte) sin16s::isUpper#5 (byte) sin16s::isUpper#4 (byte) sin16s::isUpper#3 
Alias (word) sin16s::x2#0 = (word~) sin16s::$8 
Alias (word) mulu16_sel::return#1 = (word) mulu16_sel::return#8 
Alias (word) sin16s::x3#0 = (word~) sin16s::$9 (word) sin16s::x3#1 
Alias (word) mulu16_sel::v2#2 = (word/signed word/dword/signed dword~) sin16s::$10 
Alias (word) mulu16_sel::return#2 = (word) mulu16_sel::return#9 
Alias (word) sin16s::x3_6#0 = (word~) sin16s::$11 
Alias (word) sin16s::usinx#0 = (word~) sin16s::$12 (word) sin16s::usinx#4 (word) sin16s::usinx#2 
Alias (word) mulu16_sel::return#10 = (word) mulu16_sel::return#3 
Alias (word) sin16s::x4#0 = (word~) sin16s::$13 
Alias (word) mulu16_sel::return#11 = (word) mulu16_sel::return#4 
Alias (word) sin16s::x5#0 = (word~) sin16s::$14 
Alias (word) sin16s::x5_128#0 = (word~) sin16s::$15 
Alias (word) sin16s::usinx#1 = (word~) sin16s::$16 (word) sin16s::usinx#3 
Alias (signed word) sin16s::sinx#0 = (signed word~) sin16s::$17 
Alias (dword) sin16s::x#4 = (dword) sin16s::x#7 
Alias (byte) sin16s::isUpper#8 = (byte) sin16s::isUpper#9 
Alias (dword) sin16s::x#2 = (dword~) sin16s::$5 
Alias (signed word) sin16s::return#1 = (signed word) sin16s::sinx#2 (signed word) sin16s::return#4 (signed word) sin16s::return#2 
Alias (signed word) sin16s::sinx#1 = (signed word~) sin16s::$21 
Alias (dword) mul16u::return#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 (byte*) fill::end#0 = (byte*~) fill::$0 
Alias (byte*) fill::addr#0 = (byte*) fill::start#2 
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 
Alias (byte*) SCREEN#1 = (byte*) SCREEN#15 (byte*) SCREEN#9 (byte*) SCREEN#2 (byte*) SCREEN#16 (byte*) SCREEN#10 
Alias (word) rem16u#30 = (word) rem16u#38 (word) rem16u#39 (word) rem16u#37 (word) rem16u#35 (word) rem16u#33 
Alias (word) xsin_idx#23 = (word) xsin_idx#27 (word) xsin_idx#28 (word) xsin_idx#26 (word) xsin_idx#25 (word) xsin_idx#24 
Alias (byte) main::toD0181_return#0 = (byte) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$0 
Alias (byte) fill::val#1 = (byte/word/dword~) main::$2 
Alias (word) rem16u#23 = (word) rem16u#27 
Alias (word) xsin_idx#13 = (word) xsin_idx#17 (word) xsin_idx#22 
Alias (byte*) SCREEN#3 = (byte*) SCREEN#40 (byte*) SCREEN#37 
Alias (signed word) sin16s_gen2::min#0 = (signed word/signed dword~) main::$5 
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 (byte*) SCREEN#0 = (byte*) SCREEN#21 (byte*) SCREEN#8 
Alias (byte*) LOGO#0 = (byte*) LOGO#3 (byte*) LOGO#2 
Alias (word) xsin_idx#11 = (word) xsin_idx#20 (word) xsin_idx#15 (word) xsin_idx#5 
Alias (byte*) SCREEN#32 = (byte*) SCREEN#34 
Alias (word) xsin_idx#10 = (word) xsin_idx#21 (word) xsin_idx#14 (word) xsin_idx#9 
Alias (byte*) SCREEN#30 = (byte*) SCREEN#33 (byte*) SCREEN#31 (byte*) SCREEN#39 (byte*) SCREEN#38 
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*) SCREEN#22 = (byte*) SCREEN#26 (byte*) SCREEN#29 
Alias (byte) render_logo::logo_idx#0 = (byte~) render_logo::$18 
Alias (byte) render_logo::logo_start#0 = (byte~) render_logo::$6 
Alias (byte*) SCREEN#11 = (byte*) SCREEN#17 (byte*) SCREEN#25 
Alias (byte) render_logo::screen_idx#17 = (byte) render_logo::screen_idx#6 (byte) render_logo::screen_idx#18 
Alias (byte) render_logo::logo_start#1 = (byte) render_logo::logo_start#4 
Alias (byte) render_logo::screen_idx#7 = (byte) render_logo::screen_idx#8 
Alias (byte) render_logo::logo_start#2 = (byte) render_logo::logo_start#3 
Alias (byte*) SCREEN#23 = (byte*) SCREEN#4 
Alias (byte*) SCREEN#12 = (byte*) SCREEN#18 
Alias (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#9 
Alias (byte) render_logo::screen_idx#19 = (byte) render_logo::screen_idx#9 
Alias (byte) render_logo::screen_idx#10 = (byte) render_logo::screen_idx#11 
Alias (byte) render_logo::logo_idx#4 = (byte) render_logo::logo_idx#5 
Alias (byte*) SCREEN#24 = (byte*) SCREEN#5 
Alias (byte*) SCREEN#13 = (byte*) SCREEN#19 
Alias (byte) render_logo::logo_idx#10 = (byte) render_logo::logo_idx#6 
Alias (byte) render_logo::screen_idx#20 = (byte) render_logo::screen_idx#21 
Alias (byte) render_logo::screen_idx#12 = (byte) render_logo::screen_idx#13 
Alias (byte) render_logo::logo_idx#7 = (byte) render_logo::logo_idx#8 
Alias (byte*) SCREEN#27 = (byte*) SCREEN#6 
Alias (byte*) SCREEN#14 = (byte*) SCREEN#20 
Alias (byte) render_logo::screen_idx#14 = (byte) render_logo::screen_idx#22 
Alias (byte) render_logo::screen_idx#15 = (byte) render_logo::screen_idx#16 
Alias (byte*) SCREEN#28 = (byte*) SCREEN#7 
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 
Alias (byte*) SCREEN#30 = (byte*) SCREEN#36 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (word) divr16u::divisor#2
Self Phi Eliminated (signed word) sin16s_gen2::ampl#1
Self Phi Eliminated (signed word) sin16s_gen2::offs#1
Self Phi Eliminated (dword) sin16s_gen2::step#1
Self Phi Eliminated (word) sin16s_gen2::wavelength#2
Self Phi Eliminated (word) rem16u#16
Self Phi Eliminated (byte) fill::val#2
Self Phi Eliminated (byte*) fill::end#1
Self Phi Eliminated (byte*) SCREEN#3
Self Phi Eliminated (word) rem16u#23
Self Phi Eliminated (word) xsin_idx#13
Self Phi Eliminated (word) xsin_idx#10
Self Phi Eliminated (byte*) SCREEN#30
Self Phi Eliminated (byte*) SCREEN#23
Self Phi Eliminated (byte) render_logo::screen_idx#7
Self Phi Eliminated (byte) render_logo::logo_start#2
Self Phi Eliminated (byte*) SCREEN#24
Self Phi Eliminated (byte) render_logo::logo_idx#4
Self Phi Eliminated (byte) render_logo::screen_idx#10
Self Phi Eliminated (byte*) SCREEN#27
Self Phi Eliminated (byte) render_logo::logo_idx#7
Self Phi Eliminated (byte) render_logo::screen_idx#12
Self Phi Eliminated (byte*) SCREEN#28
Self Phi Eliminated (byte) render_logo::screen_idx#15
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (word) divr16u::divisor#2 (word) divr16u::divisor#6
Redundant Phi (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0
Redundant Phi (word) div32u16u::divisor#1 (word) div32u16u::divisor#0
Redundant Phi (word) rem16u#20 (word) rem16u#21
Redundant Phi (word) rem16u#12 (word) rem16u#1
Redundant Phi (word) rem16u#13 (word) rem16u#1
Redundant Phi (signed word) mul16s::a#1 (signed word) mul16s::a#0
Redundant Phi (signed word) mul16s::b#1 (signed word) mul16s::b#0
Redundant Phi (signed word) sin16s_gen2::max#1 (signed word) sin16s_gen2::max#0
Redundant Phi (signed word) sin16s_gen2::min#1 (signed word) sin16s_gen2::min#0
Redundant Phi (word) sin16s_gen2::wavelength#1 (word) sin16s_gen2::wavelength#0
Redundant Phi (word) rem16u#21 (word) rem16u#23
Redundant Phi (signed word*) sin16s_gen2::sintab#5 (signed word*) sin16s_gen2::sintab#1
Redundant Phi (word) rem16u#15 (word) rem16u#13
Redundant Phi (signed word) sin16s_gen2::ampl#1 (signed word) sin16s_gen2::ampl#0
Redundant Phi (signed word) sin16s_gen2::offs#1 (signed word) sin16s_gen2::offs#0
Redundant Phi (dword) sin16s_gen2::step#1 (dword) sin16s_gen2::step#0
Redundant Phi (word) sin16s_gen2::wavelength#2 (word) sin16s_gen2::wavelength#1
Redundant Phi (word) rem16u#16 (word) rem16u#15
Redundant Phi (dword) sin16s::x#3 (dword) sin16s::x#0
Redundant Phi (byte) fill::val#2 (byte) fill::val#3
Redundant Phi (byte*) fill::end#1 (byte*) fill::end#0
Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0
Redundant Phi (byte*) LOGO#1 (byte*) LOGO#0
Redundant Phi (word) rem16u#30 (word) rem16u#0
Redundant Phi (word) xsin_idx#23 (word) xsin_idx#16
Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#1
Redundant Phi (word) rem16u#23 (word) rem16u#30
Redundant Phi (word) xsin_idx#13 (word) xsin_idx#23
Redundant Phi (word) rem16u#17 (word) rem16u#16
Redundant Phi (word) xsin_idx#0 (word) xsin_idx#11
Redundant Phi (word) xsin_idx#18 (word) xsin_idx#13
Redundant Phi (byte*) SCREEN#35 (byte*) SCREEN#3
Redundant Phi (word) xsin_idx#10 (word) xsin_idx#11
Redundant Phi (byte*) SCREEN#30 (byte*) SCREEN#32
Redundant Phi (signed word) render_logo::xpos#1 (signed word) render_logo::xpos#0
Redundant Phi (byte*) SCREEN#22 (byte*) SCREEN#30
Redundant Phi (byte*) SCREEN#23 (byte*) SCREEN#11
Redundant Phi (byte) render_logo::screen_idx#7 (byte) render_logo::screen_idx#17
Redundant Phi (byte) render_logo::logo_start#2 (byte) render_logo::logo_start#1
Redundant Phi (byte*) SCREEN#24 (byte*) SCREEN#12
Redundant Phi (byte) render_logo::logo_idx#4 (byte) render_logo::logo_idx#11
Redundant Phi (byte) render_logo::screen_idx#10 (byte) render_logo::screen_idx#19
Redundant Phi (byte*) SCREEN#27 (byte*) SCREEN#13
Redundant Phi (byte) render_logo::logo_idx#7 (byte) render_logo::logo_idx#10
Redundant Phi (byte) render_logo::screen_idx#12 (byte) render_logo::screen_idx#20
Redundant Phi (byte*) SCREEN#28 (byte*) SCREEN#14
Redundant Phi (byte) render_logo::screen_idx#15 (byte) render_logo::screen_idx#14
Redundant Phi (word) rem16u#10 (word) rem16u#17
Redundant Phi (word) xsin_idx#12 (word) xsin_idx#0
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) divr16u::$4 [91] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
Simple Condition (bool~) divr16u::$9 [99] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3
Simple Condition (bool~) divr16u::$11 [106] if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1
Simple Condition (bool~) mul16u::$0 [154] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
Simple Condition (bool~) mul16u::$3 [159] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
Simple Condition (bool~) mul16s::$4 [185] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1
Simple Condition (bool~) mul16s::$10 [189] if((signed word) mul16s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@2
Simple Condition (bool~) sin16s_gen2::$11 [253] if((word) sin16s_gen2::i#1<(word) sin16s_gen2::wavelength#0) goto sin16s_gen2::@1
Simple Condition (bool~) sin16s::$1 [261] if((dword) sin16s::x#0<(dword) PI_u4f28#0) goto sin16s::@1
Simple Condition (bool~) sin16s::$4 [265] if((dword) sin16s::x#4<(dword) PI_HALF_u4f28#0) goto sin16s::@2
Simple Condition (bool~) sin16s::$19 [325] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@3
Simple Condition (bool~) fill::$1 [359] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
Simple Condition (bool~) main::$4 [410] if((byte) main::ch#1!=rangelast(0,239)) goto main::@1
Simple Condition (bool~) loop::$0 [435] if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@5
Simple Condition (bool~) loop::$5 [448] if((word) xsin_idx#3!=(word/signed dword/dword~) loop::$3) goto loop::@7
Simple Condition (bool~) render_logo::$5 [466] if((signed word) render_logo::xpos#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_logo::@1
Simple Condition (bool~) render_logo::$7 [478] if((byte) render_logo::screen_idx#17!=(byte) render_logo::logo_start#1) goto render_logo::@3
Simple Condition (bool~) render_logo::$10 [489] unroll if((byte) render_logo::line#2!=rangelast(0,5)) goto render_logo::@5
Simple Condition (bool~) render_logo::$11 [494] if((byte) render_logo::screen_idx#19!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@7
Simple Condition (bool~) render_logo::$16 [505] unroll if((byte) render_logo::line#4!=rangelast(0,5)) goto render_logo::@9
Simple Condition (bool~) render_logo::$19 [511] if((byte) render_logo::logo_idx#10!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@12
Simple Condition (bool~) render_logo::$24 [522] unroll if((byte) render_logo::line#6!=rangelast(0,5)) goto render_logo::@14
Simple Condition (bool~) render_logo::$25 [528] if((byte) render_logo::screen_idx#14!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@16
Simple Condition (bool~) render_logo::$28 [537] unroll if((byte) render_logo::line#8!=rangelast(0,5)) goto render_logo::@18
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249
Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))53271
Constant (const byte*) SPRITES_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
Constant (const byte*) IRQ_STATUS#0 = ((byte*))53273
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte) rem8u#0 = 0
Constant (const word) rem16u#0 = 0
Constant (const word) divr16u::quotient#0 = 0
Constant (const byte) divr16u::i#0 = 0
Constant (const word) divr16u::rem#3 = 0
Constant (const signed byte) rem8s#0 = 0
Constant (const signed word) rem16s#0 = 0
Constant (const dword) mul16u::res#0 = 0
Constant (const dword) PI2_u4f28#0 = 1686629713
Constant (const dword) PI_u4f28#0 = 843314857
Constant (const dword) PI_HALF_u4f28#0 = 421657428
Constant (const word) PI2_u4f12#0 = 25736
Constant (const word) PI_u4f12#0 = 12868
Constant (const word) PI_HALF_u4f12#0 = 6434
Constant (const dword) sin16s_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 = 65536/6
Constant (const byte) mulu16_sel::select#2 = 1
Constant (const byte) mulu16_sel::select#3 = 0
Constant (const byte) mulu16_sel::select#4 = 0
Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const byte*) LOGO#0 = ((byte*))8192
Constant (const byte/word/signed word/dword/signed dword) $0 = 6*40
Constant (const word) XSIN_SIZE#0 = 512
Constant (const word) fill::size#0 = 1000
Constant (const word) fill::size#1 = 1000
Constant (const byte) main::ch#0 = 0
Constant (const signed word) sin16s_gen2::min#0 = -320
Constant (const signed word) sin16s_gen2::max#0 = 320
Constant (const word) xsin_idx#16 = 0
Constant (const word) xsin_idx#4 = 0
Constant (const byte) render_logo::line#0 = 0
Constant (const byte) render_logo::screen_idx#0 = 0
Constant (const byte) render_logo::screen_idx#1 = 0
Constant (const byte) render_logo::line#1 = 0
Constant (const byte) render_logo::logo_idx#1 = 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 signed word) sin16s_gen2::ampl#0 = sin16s_gen2::max#0-sin16s_gen2::min#0
Constant (const dword) div32u16u::dividend#0 = PI2_u4f28#0
Constant (const word/signed word/dword/signed dword) $1 = $0*8
Constant (const signed word[XSIN_SIZE#0]) xsin#0 = { fill( XSIN_SIZE#0, 0) }
Constant (const byte*) main::toD0181_screen#0 = SCREEN#0
Constant (const byte*) main::toD0181_gfx#0 = LOGO#0
Constant (const byte*) fill::start#0 = SCREEN#0
Constant (const byte) fill::val#0 = BLACK#0
Constant (const byte) fill::val#1 = WHITE#0|8
Constant (const byte*) fill::start#1 = COLS#0
Constant (const word) sin16s_gen2::wavelength#0 = XSIN_SIZE#0
Constant (const word/signed dword/dword) loop::$3 = XSIN_SIZE#0*2
Successful SSA optimization Pass2ConstantIdentification
Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0
Constant (const word) divr16u::dividend#2 = <div32u16u::dividend#0
Constant (const signed word) sin16s_gen2::$1 = sin16s_gen2::ampl#0>>1
Constant (const word) div32u16u::divisor#0 = sin16s_gen2::wavelength#0
Constant (const signed word) mul16s::b#0 = sin16s_gen2::ampl#0
Constant (const word) main::toD0181_$0#0 = ((word))main::toD0181_screen#0
Constant (const word) main::toD0181_$4#0 = ((word))main::toD0181_gfx#0
Constant (const signed word*) sin16s_gen2::sintab#1 = xsin#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const word) divr16u::divisor#0 = div32u16u::divisor#0
Constant (const word) divr16u::divisor#1 = div32u16u::divisor#0
Constant (const word) mul16u::b#0 = ((word))mul16s::b#0
Constant (const word) mul16s::$7 = ((word))mul16s::b#0
Constant (const signed word) sin16s_gen2::offs#0 = sin16s_gen2::min#0+sin16s_gen2::$1
Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&16383
Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0<<2
Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0>>2
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0
Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&15
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [44] if((const signed word) mul16s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@2
if() condition always true - replacing block destination [150] if(true) goto loop::@2
Successful SSA optimization Pass2ConstantIfs
Fixing inline constructor with div32u16u::$4 ← div32u16u::quotient_hi#0 dw= div32u16u::quotient_lo#0
Successful SSA optimization Pass2FixInlineConstructors
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (word) mul16u::a#1 ← ((word)) (signed word) mul16s::a#0
Eliminating Noop Cast (word~) mul16s::$13 ← ((word)) (signed word) mul16s::a#0
Eliminating Noop Cast (signed word~) sin16s_gen2::$7 ← ((signed word)) (word~) sin16s_gen2::$6
Eliminating Noop Cast (signed word) sin16s::sinx#0 ← ((signed word)) (word) sin16s::usinx#1
Eliminating Noop Cast (signed word~) sin16s::$20 ← ((signed word)) (word) sin16s::usinx#1
Eliminating Noop Cast (byte) render_logo::logo_idx#0 ← ((byte)) (signed byte~) render_logo::$17
Eliminating Noop Cast (byte) render_logo::logo_start#0 ← ((byte)) (signed byte) render_logo::x_char#0
Successful SSA optimization Pass2NopCastElimination
Eliminating variable (word~) mul16s::$12 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
Removing unused block loop::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++
Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16
Resolved ranged next value main::ch#1 ← ++ main::ch#2 to ++
Resolved ranged comparison value if(main::ch#1!=rangelast(0,239)) goto main::@1 to (byte/word/signed word/dword/signed dword) 240
Resolved ranged next value render_logo::line#2 ← ++ render_logo::line#9 to ++
Resolved ranged comparison value unroll if(render_logo::line#2!=rangelast(0,5)) goto render_logo::@5 to (byte/signed byte/word/signed word/dword/signed dword) 6
Resolved ranged next value render_logo::line#4 ← ++ render_logo::line#10 to ++
Resolved ranged comparison value unroll if(render_logo::line#4!=rangelast(0,5)) goto render_logo::@9 to (byte/signed byte/word/signed word/dword/signed dword) 6
Resolved ranged next value render_logo::line#6 ← ++ render_logo::line#11 to ++
Resolved ranged comparison value unroll if(render_logo::line#6!=rangelast(0,5)) goto render_logo::@14 to (byte/signed byte/word/signed word/dword/signed dword) 6
Resolved ranged next value render_logo::line#8 ← ++ render_logo::line#12 to ++
Resolved ranged comparison value unroll if(render_logo::line#8!=rangelast(0,5)) goto render_logo::@18 to (byte/signed byte/word/signed word/dword/signed dword) 6
Culled Empty Block (label) @4
Culled Empty Block (label) @6
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) mul16u::@3
Culled Empty Block (label) @17
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@7
Culled Empty Block (label) @26
Culled Empty Block (label) loop::@2
Culled Empty Block (label) loop::@5
Culled Empty Block (label) render_logo::@19
Culled Empty Block (label) render_logo::@3
Culled Empty Block (label) render_logo::@4
Culled Empty Block (label) render_logo::@7
Culled Empty Block (label) render_logo::@12
Culled Empty Block (label) render_logo::@16
Culled Empty Block (label) @29
Successful SSA optimization Pass2CullEmptyBlocks
Alias (dword) div32u16u::return#0 = (dword~) div32u16u::$4 
Alias (dword) mul16s::m#4 = (dword) mul16s::m#5 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte*) SCREEN#32
Self Phi Eliminated (byte) render_logo::logo_start#1
Self Phi Eliminated (byte*) SCREEN#11
Self Phi Eliminated (byte*) SCREEN#12
Self Phi Eliminated (byte*) SCREEN#13
Self Phi Eliminated (byte*) SCREEN#14
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) SCREEN#32 (const byte*) SCREEN#0
Redundant Phi (byte) render_logo::logo_start#1 (byte)(signed byte) render_logo::x_char#0
Redundant Phi (byte*) SCREEN#11 (byte*) SCREEN#32
Redundant Phi (byte*) SCREEN#12 (byte*) SCREEN#11
Redundant Phi (byte*) SCREEN#13 (byte*) SCREEN#32
Redundant Phi (byte*) SCREEN#14 (byte*) SCREEN#13
Successful SSA optimization Pass2RedundantPhiElimination
Unrolling loop Loop head: render_logo::@5 tails: render_logo::@5 blocks: render_logo::@5 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#9 (const byte) render_logo::line#1
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$8 = 40*render_logo::line#1
Constant (const byte) render_logo::line#2 = ++render_logo::line#1
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$9 = SCREEN#0+render_logo::$8
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [161] if((const byte) render_logo::line#2!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_1
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@9 tails: render_logo::@9 blocks: render_logo::@9 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#10 (const byte) render_logo::line#3
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$12 = 40*render_logo::line#3
Constant (const byte/signed word/word/dword/signed dword) render_logo::$14 = 40*render_logo::line#3
Constant (const byte) render_logo::line#4 = ++render_logo::line#3
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$13 = SCREEN#0+render_logo::$12
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [43] if((const byte) render_logo::line#4!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_1
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@9_1 tails: render_logo::@9_1 blocks: render_logo::@9_1 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#15 (const byte) render_logo::line#4
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$31 = 40*render_logo::line#4
Constant (const byte/signed word/word/dword/signed dword) render_logo::$33 = 40*render_logo::line#4
Constant (const byte) render_logo::line#16 = ++render_logo::line#4
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$32 = SCREEN#0+render_logo::$31
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [45] if((const byte) render_logo::line#16!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_2
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@9_2 tails: render_logo::@9_2 blocks: render_logo::@9_2 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#17 (const byte) render_logo::line#16
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$35 = 40*render_logo::line#16
Constant (const byte/signed word/word/dword/signed dword) render_logo::$37 = 40*render_logo::line#16
Constant (const byte) render_logo::line#18 = ++render_logo::line#16
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$36 = SCREEN#0+render_logo::$35
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [47] if((const byte) render_logo::line#18!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_3
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@9_3 tails: render_logo::@9_3 blocks: render_logo::@9_3 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#19 (const byte) render_logo::line#18
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$39 = 40*render_logo::line#18
Constant (const byte/signed word/word/dword/signed dword) render_logo::$41 = 40*render_logo::line#18
Constant (const byte) render_logo::line#20 = ++render_logo::line#18
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$40 = SCREEN#0+render_logo::$39
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [49] if((const byte) render_logo::line#20!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_4
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@9_4 tails: render_logo::@9_4 blocks: render_logo::@9_4 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#21 (const byte) render_logo::line#20
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$43 = 40*render_logo::line#20
Constant (const byte/signed word/word/dword/signed dword) render_logo::$45 = 40*render_logo::line#20
Constant (const byte) render_logo::line#22 = ++render_logo::line#20
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$44 = SCREEN#0+render_logo::$43
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [51] if((const byte) render_logo::line#22!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_5
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@9_5 tails: render_logo::@9_5 blocks: render_logo::@9_5 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#23 (const byte) render_logo::line#22
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$47 = 40*render_logo::line#22
Constant (const byte/signed word/word/dword/signed dword) render_logo::$49 = 40*render_logo::line#22
Constant (const byte) render_logo::line#24 = ++render_logo::line#22
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$48 = SCREEN#0+render_logo::$47
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (render_logo::@9_5) in block render_logo::@9_6
if() condition always false - eliminating [53] if((const byte) render_logo::line#24!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_6
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte) render_logo::line#25 from unused block render_logo::@9_6
Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$51 from unused block render_logo::@9_6
Eliminating variable (byte*~) render_logo::$52 from unused block render_logo::@9_6
Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$53 from unused block render_logo::@9_6
Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$54 from unused block render_logo::@9_6
Eliminating variable (byte) render_logo::line#26 from unused block render_logo::@9_6
Removing unused block render_logo::@9_6
Successful SSA optimization Pass2EliminateUnusedBlocks
Unrolling loop Loop head: render_logo::@5_1 tails: render_logo::@5_1 blocks: render_logo::@5_1 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#13 (const byte) render_logo::line#2
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$29 = 40*render_logo::line#2
Constant (const byte) render_logo::line#14 = ++render_logo::line#2
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$30 = SCREEN#0+render_logo::$29
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [57] if((const byte) render_logo::line#14!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_2
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@5_2 tails: render_logo::@5_2 blocks: render_logo::@5_2 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#27 (const byte) render_logo::line#14
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$55 = 40*render_logo::line#14
Constant (const byte) render_logo::line#28 = ++render_logo::line#14
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$56 = SCREEN#0+render_logo::$55
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [58] if((const byte) render_logo::line#28!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_3
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@5_3 tails: render_logo::@5_3 blocks: render_logo::@5_3 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#29 (const byte) render_logo::line#28
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$57 = 40*render_logo::line#28
Constant (const byte) render_logo::line#30 = ++render_logo::line#28
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$58 = SCREEN#0+render_logo::$57
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [59] if((const byte) render_logo::line#30!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_4
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@5_4 tails: render_logo::@5_4 blocks: render_logo::@5_4 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#31 (const byte) render_logo::line#30
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$59 = 40*render_logo::line#30
Constant (const byte) render_logo::line#32 = ++render_logo::line#30
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$60 = SCREEN#0+render_logo::$59
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [60] if((const byte) render_logo::line#32!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_5
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@5_5 tails: render_logo::@5_5 blocks: render_logo::@5_5 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#33 (const byte) render_logo::line#32
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$61 = 40*render_logo::line#32
Constant (const byte) render_logo::line#34 = ++render_logo::line#32
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$62 = SCREEN#0+render_logo::$61
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (render_logo::@5_5) in block render_logo::@5_6
if() condition always false - eliminating [61] if((const byte) render_logo::line#34!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_6
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte) render_logo::line#35 from unused block render_logo::@5_6
Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$63 from unused block render_logo::@5_6
Eliminating variable (byte*~) render_logo::$64 from unused block render_logo::@5_6
Eliminating variable (byte) render_logo::line#36 from unused block render_logo::@5_6
Removing unused block render_logo::@5_6
Successful SSA optimization Pass2EliminateUnusedBlocks
Unrolling loop Loop head: render_logo::@18 tails: render_logo::@18 blocks: render_logo::@18 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#12 (const byte) render_logo::line#7
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$26 = 40*render_logo::line#7
Constant (const byte) render_logo::line#8 = ++render_logo::line#7
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$27 = SCREEN#0+render_logo::$26
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [68] if((const byte) render_logo::line#8!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_1
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@18_1 tails: render_logo::@18_1 blocks: render_logo::@18_1 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#37 (const byte) render_logo::line#8
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$65 = 40*render_logo::line#8
Constant (const byte) render_logo::line#38 = ++render_logo::line#8
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$66 = SCREEN#0+render_logo::$65
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [69] if((const byte) render_logo::line#38!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_2
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@18_2 tails: render_logo::@18_2 blocks: render_logo::@18_2 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#39 (const byte) render_logo::line#38
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$67 = 40*render_logo::line#38
Constant (const byte) render_logo::line#40 = ++render_logo::line#38
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$68 = SCREEN#0+render_logo::$67
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [70] if((const byte) render_logo::line#40!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_3
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@18_3 tails: render_logo::@18_3 blocks: render_logo::@18_3 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#41 (const byte) render_logo::line#40
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$69 = 40*render_logo::line#40
Constant (const byte) render_logo::line#42 = ++render_logo::line#40
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$70 = SCREEN#0+render_logo::$69
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [71] if((const byte) render_logo::line#42!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_4
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@18_4 tails: render_logo::@18_4 blocks: render_logo::@18_4 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#43 (const byte) render_logo::line#42
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$71 = 40*render_logo::line#42
Constant (const byte) render_logo::line#44 = ++render_logo::line#42
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$72 = SCREEN#0+render_logo::$71
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [72] if((const byte) render_logo::line#44!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_5
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@18_5 tails: render_logo::@18_5 blocks: render_logo::@18_5 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#45 (const byte) render_logo::line#44
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$73 = 40*render_logo::line#44
Constant (const byte) render_logo::line#46 = ++render_logo::line#44
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$74 = SCREEN#0+render_logo::$73
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (render_logo::@18_5) in block render_logo::@18_6
if() condition always false - eliminating [73] if((const byte) render_logo::line#46!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_6
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte) render_logo::line#47 from unused block render_logo::@18_6
Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$75 from unused block render_logo::@18_6
Eliminating variable (byte*~) render_logo::$76 from unused block render_logo::@18_6
Eliminating variable (byte) render_logo::line#48 from unused block render_logo::@18_6
Removing unused block render_logo::@18_6
Successful SSA optimization Pass2EliminateUnusedBlocks
Unrolling loop Loop head: render_logo::@14 tails: render_logo::@14 blocks: render_logo::@14 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#11 (const byte) render_logo::line#5
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$20 = 40*render_logo::line#5
Constant (const byte/signed word/word/dword/signed dword) render_logo::$22 = 40*render_logo::line#5
Constant (const byte) render_logo::line#6 = ++render_logo::line#5
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$21 = SCREEN#0+render_logo::$20
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [76] if((const byte) render_logo::line#6!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_1
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@14_1 tails: render_logo::@14_1 blocks: render_logo::@14_1 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#49 (const byte) render_logo::line#6
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$77 = 40*render_logo::line#6
Constant (const byte/signed word/word/dword/signed dword) render_logo::$79 = 40*render_logo::line#6
Constant (const byte) render_logo::line#50 = ++render_logo::line#6
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$78 = SCREEN#0+render_logo::$77
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [78] if((const byte) render_logo::line#50!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_2
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@14_2 tails: render_logo::@14_2 blocks: render_logo::@14_2 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#51 (const byte) render_logo::line#50
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$81 = 40*render_logo::line#50
Constant (const byte/signed word/word/dword/signed dword) render_logo::$83 = 40*render_logo::line#50
Constant (const byte) render_logo::line#52 = ++render_logo::line#50
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$82 = SCREEN#0+render_logo::$81
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [80] if((const byte) render_logo::line#52!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_3
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@14_3 tails: render_logo::@14_3 blocks: render_logo::@14_3 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#53 (const byte) render_logo::line#52
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$85 = 40*render_logo::line#52
Constant (const byte/signed word/word/dword/signed dword) render_logo::$87 = 40*render_logo::line#52
Constant (const byte) render_logo::line#54 = ++render_logo::line#52
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$86 = SCREEN#0+render_logo::$85
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [82] if((const byte) render_logo::line#54!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_4
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@14_4 tails: render_logo::@14_4 blocks: render_logo::@14_4 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#55 (const byte) render_logo::line#54
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$89 = 40*render_logo::line#54
Constant (const byte/signed word/word/dword/signed dword) render_logo::$91 = 40*render_logo::line#54
Constant (const byte) render_logo::line#56 = ++render_logo::line#54
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$90 = SCREEN#0+render_logo::$89
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [84] if((const byte) render_logo::line#56!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_5
Successful SSA optimization Pass2ConstantIfs
Unrolling loop Loop head: render_logo::@14_5 tails: render_logo::@14_5 blocks: render_logo::@14_5 
Successful SSA optimization Pass2LoopUnroll
Redundant Phi (byte) render_logo::line#57 (const byte) render_logo::line#56
Successful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) render_logo::$93 = 40*render_logo::line#56
Constant (const byte/signed word/word/dword/signed dword) render_logo::$95 = 40*render_logo::line#56
Constant (const byte) render_logo::line#58 = ++render_logo::line#56
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) render_logo::$94 = SCREEN#0+render_logo::$93
Successful SSA optimization Pass2ConstantIdentification
Removing PHI-reference to removed block (render_logo::@14_5) in block render_logo::@14_6
if() condition always false - eliminating [86] if((const byte) render_logo::line#58!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_6
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable (byte) render_logo::line#59 from unused block render_logo::@14_6
Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$97 from unused block render_logo::@14_6
Eliminating variable (byte*~) render_logo::$98 from unused block render_logo::@14_6
Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$99 from unused block render_logo::@14_6
Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$100 from unused block render_logo::@14_6
Eliminating variable (byte) render_logo::line#60 from unused block render_logo::@14_6
Removing unused block render_logo::@14_6
Successful SSA optimization Pass2EliminateUnusedBlocks
Inlining constant with var siblings (const word) divr16u::quotient#0
Inlining constant with var siblings (const byte) divr16u::i#0
Inlining constant with var siblings (const word) divr16u::rem#3
Inlining constant with var siblings (const word) divr16u::dividend#1
Inlining constant with var siblings (const word) divr16u::dividend#2
Inlining constant with var siblings (const word) divr16u::divisor#0
Inlining constant with var siblings (const word) divr16u::divisor#1
Inlining constant with var siblings (const dword) mul16u::res#0
Inlining constant with var siblings (const 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 word) fill::size#0
Inlining constant with var siblings (const word) fill::size#1
Inlining constant with var siblings (const byte) fill::val#0
Inlining constant with var siblings (const byte) fill::val#1
Inlining constant with var siblings (const byte) main::ch#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with different constant siblings (const byte) render_logo::line#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#1
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/signed byte/word/signed word/dword/signed dword) 0
Constant inlined divr16u::rem#3 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$30 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#52 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$32 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#54 = ++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$31 = (byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sin16s::isUpper#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#50 = ++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulu16_sel::select#4 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulu16_sel::select#2 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulu16_sel::select#3 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined fill::start#1 = (const byte*) COLS#0
Constant inlined mulu16_sel::select#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined fill::start#0 = (const byte*) SCREEN#0
Constant inlined sin16s::isUpper#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined mulu16_sel::select#1 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined render_logo::$33 = (byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$36 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$35 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$37 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::ch#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$39 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$41 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$40 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$43 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sin16s_gen2::wavelength#0 = (const word) XSIN_SIZE#0
Constant inlined fill::size#1 = (word/signed word/dword/signed dword) 1000
Constant inlined fill::size#0 = (word/signed word/dword/signed dword) 1000
Constant inlined main::toD0181_$7#0 = >((word))(const byte*) LOGO#0>>(byte/signed byte/word/signed word/dword/signed dword) 2&(byte/signed byte/word/signed word/dword/signed dword) 15
Constant inlined xsin_idx#16 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::toD0181_$3#0 = >((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) 16383<<(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined render_logo::$45 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sin16s_gen2::sintab#1 = (const signed word[XSIN_SIZE#0]) xsin#0
Constant inlined render_logo::$44 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$47 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$49 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$48 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN#0
Constant inlined divr16u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16s::$7 = ((word))(const signed word) sin16s_gen2::ampl#0
Constant inlined sin16s_gen2::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$56 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$55 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$58 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$57 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::screen_idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::screen_idx#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$59 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$61 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$60 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$62 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$65 = (byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::toD0181_$0#0 = ((word))(const byte*) SCREEN#0
Constant inlined divr16u::dividend#1 = >(const dword) PI2_u4f28#0
Constant inlined divr16u::dividend#2 = <(const dword) PI2_u4f28#0
Constant inlined main::toD0181_$4#0 = ((word))(const byte*) LOGO#0
Constant inlined render_logo::line#2 = ++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mulu16_sel::v2#2 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6
Constant inlined render_logo::line#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$67 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#4 = ++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$66 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#3 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$69 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#6 = ++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$68 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#5 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#8 = ++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#7 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$8 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$70 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$9 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$72 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#14 = ++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$71 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined sin16s_gen2::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$74 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$73 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined $0 = (byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) 40
Constant inlined $1 = (byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8
Constant inlined mul16u::b#0 = ((word))(const signed word) sin16s_gen2::ampl#0
Constant inlined render_logo::$78 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$77 = (byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$79 = (byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$81 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16s::b#0 = (const signed word) sin16s_gen2::ampl#0
Constant inlined render_logo::$83 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$82 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$85 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#20 = ++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$87 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$86 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#22 = ++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::toD0181_$1#0 = ((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) 16383
Constant inlined main::toD0181_$5#0 = >((word))(const byte*) LOGO#0
Constant inlined render_logo::$89 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::logo_idx#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#16 = ++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#18 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined fill::val#0 = (const byte) BLACK#0
Constant inlined render_logo::$91 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::toD0181_gfx#0 = (const byte*) LOGO#0
Constant inlined render_logo::$94 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$93 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#30 = ++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$95 = (byte/signed byte/word/signed word/dword/signed dword) 40*++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#32 = ++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined fill::val#1 = (const byte) WHITE#0|(byte/signed byte/word/signed word/dword/signed dword) 8
Constant inlined xsin_idx#4 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined div32u16u::dividend#0 = (const dword) PI2_u4f28#0
Constant inlined sin16s_gen2::$1 = (const signed word) sin16s_gen2::ampl#0>>(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined render_logo::$90 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined divr16u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mul16u::res#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$12 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$14 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$13 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined divr16u::divisor#1 = (const word) XSIN_SIZE#0
Constant inlined divr16u::divisor#0 = (const word) XSIN_SIZE#0
Constant inlined render_logo::line#28 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#42 = ++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$21 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$20 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#44 = ++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#40 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::toD0181_$6#0 = >((word))(const byte*) LOGO#0>>(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined loop::$3 = (const word) XSIN_SIZE#0*(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined main::toD0181_$2#0 = ((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) 16383<<(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined render_logo::$22 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined div32u16u::divisor#0 = (const word) XSIN_SIZE#0
Constant inlined render_logo::$27 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::line#38 = ++++(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$26 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render_logo::$29 = (byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0
Successful SSA optimization Pass2ConstantInlining
Identical Phi Values (word) divr16u::divisor#6 (const word) XSIN_SIZE#0
Identical Phi Values (word) fill::size#2 (word/signed word/dword/signed dword) 1000
Successful SSA optimization Pass2IdenticalPhiElimination
Simplifying constant multiply by zero 40*0
Simplifying constant multiply by zero 40*0
Simplifying constant integer increment ++0
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 multiply by zero 40*0
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 multiply by zero 40*0
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 multiply by zero 40*0
Simplifying constant multiply by zero 40*0
Simplifying constant integer increment ++0
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 plus zero SCREEN#0+0
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Simplifying constant plus zero SCREEN#0+0
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Simplifying constant plus zero SCREEN#0+0
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Simplifying constant plus zero SCREEN#0+0
Simplifying constant integer increment ++1
Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Successful SSA optimization Pass2ConstantSimplification
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::@7)
Added new block during phi lifting render_logo::@37(between render_logo::@2 and render_logo::@6)
Fixing phi predecessor for render_logo::logo_idx#11 to new block ( render_logo::@2 -> render_logo::@37 ) during phi lifting.
Added new block during phi lifting render_logo::@38(between render_logo::@11 and render_logo::@15)
Added new block during phi lifting sin16s_gen2::@6(between sin16s_gen2::@5 and sin16s_gen2::@1)
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)
Added new block during phi lifting fill::@3(between fill::@1 and fill::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @28
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::@6
Adding NOP phi() at start of loop
Adding NOP phi() at start of loop::@13
Adding NOP phi() at start of sin16s_gen2
Adding NOP phi() at start of div32u16u
CALL GRAPH
Calls in [] to main:3 
Calls in [main] to fill:13 fill:15 sin16s_gen2:21 loop:23 
Calls in [loop] to render_logo:33 
Calls in [sin16s_gen2] to div32u16u:110 sin16s:115 mul16s:118 
Calls in [mul16s] to mul16u:133 
Calls in [sin16s] to mulu16_sel:177 mulu16_sel:184 mulu16_sel:189 mulu16_sel:197 mulu16_sel:204 
Calls in [mulu16_sel] to mul16u:222 
Calls in [div32u16u] to divr16u:229 divr16u:234 

Created 38 initial phi equivalence classes
Coalesced [25] main::ch#3 ← main::ch#1
Coalesced [39] xsin_idx#29 ← xsin_idx#19
Coalesced [40] xsin_idx#30 ← xsin_idx#3
Coalesced [50] render_logo::screen_idx#25 ← render_logo::screen_idx#17
Coalesced [68] render_logo::screen_idx#24 ← render_logo::screen_idx#3
Coalesced [69] render_logo::logo_idx#12 ← render_logo::logo_idx#2
Coalesced [77] render_logo::screen_idx#23 ← render_logo::screen_idx#2
Coalesced [82] render_logo::screen_idx#27 ← render_logo::screen_idx#20
Coalesced [92] render_logo::screen_idx#28 ← render_logo::screen_idx#5
Coalesced [107] render_logo::logo_idx#14 ← render_logo::logo_idx#3
Coalesced [108] render_logo::screen_idx#26 ← render_logo::screen_idx#4
Coalesced [129] sin16s_gen2::x#5 ← sin16s_gen2::x#1
Coalesced [130] sin16s_gen2::sintab#7 ← sin16s_gen2::sintab#0
Coalesced [131] sin16s_gen2::i#5 ← sin16s_gen2::i#1
Coalesced [140] mul16s::m#7 ← mul16s::m#1
Coalesced [144] mul16s::m#8 ← mul16s::m#0
Coalesced [147] mul16u::a#10 ← mul16u::a#6
Coalesced [148] mul16u::mb#6 ← mul16u::mb#0
Coalesced [155] mul16u::res#9 ← mul16u::res#1
Coalesced [159] mul16u::a#11 ← mul16u::a#0
Coalesced [160] mul16u::res#7 ← mul16u::res#6
Coalesced [161] mul16u::mb#7 ← mul16u::mb#1
Coalesced (already) [162] mul16u::res#8 ← mul16u::res#2
Coalesced [165] sin16s::x#9 ← sin16s::x#1
Coalesced [169] sin16s::x#11 ← sin16s::x#2
Coalesced [175] mulu16_sel::v1#8 ← mulu16_sel::v1#0
Coalesced [176] mulu16_sel::v2#8 ← mulu16_sel::v2#0
Coalesced [182] mulu16_sel::v1#9 ← mulu16_sel::v1#1
Coalesced [183] mulu16_sel::v2#9 ← mulu16_sel::v2#1
Coalesced [188] mulu16_sel::v1#10 ← mulu16_sel::v1#2
Coalesced [195] mulu16_sel::v1#6 ← mulu16_sel::v1#3
Coalesced [196] mulu16_sel::v2#6 ← mulu16_sel::v2#3
Coalesced [202] mulu16_sel::v1#7 ← mulu16_sel::v1#4
Coalesced [203] mulu16_sel::v2#7 ← mulu16_sel::v2#4
Coalesced [211] sin16s::return#6 ← sin16s::sinx#1
Coalesced [215] sin16s::x#10 ← sin16s::x#4
Coalesced [216] sin16s::x#8 ← sin16s::x#0
Coalesced [220] mul16u::b#3 ← mul16u::b#1
Coalesced [221] mul16u::a#9 ← mul16u::a#2
Coalesced [233] divr16u::rem#12 ← divr16u::rem#4
Coalesced [240] divr16u::rem#13 ← divr16u::rem#10
Coalesced [241] divr16u::dividend#9 ← divr16u::dividend#5
Coalesced [248] divr16u::rem#16 ← divr16u::rem#1
Coalesced [255] divr16u::rem#18 ← divr16u::rem#2
Coalesced [256] divr16u::return#8 ← divr16u::quotient#2
Coalesced [262] divr16u::rem#14 ← divr16u::rem#11
Coalesced [263] divr16u::dividend#10 ← divr16u::dividend#0
Coalesced [264] divr16u::quotient#9 ← divr16u::return#0
Coalesced [265] divr16u::i#7 ← divr16u::i#1
Coalesced [266] divr16u::rem#17 ← divr16u::rem#6
Coalesced [267] divr16u::return#7 ← divr16u::quotient#1
Coalesced [268] divr16u::rem#15 ← divr16u::rem#0
Coalesced [271] fill::addr#3 ← fill::addr#0
Coalesced [277] fill::addr#4 ← fill::addr#1
Coalesced down to 26 phi equivalence classes
Culled Empty Block (label) main::@8
Culled Empty Block (label) loop::@13
Culled Empty Block (label) render_logo::@37
Culled Empty Block (label) render_logo::@38
Culled Empty Block (label) sin16s_gen2::@6
Culled Empty Block (label) mul16s::@7
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) fill::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @28
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::@6
Adding NOP phi() at start of loop
Adding NOP phi() at start of loop::@16
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:@25
@25: scope:[]  from @begin
  kickasm(location (const byte*) LOGO#0) {{ .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:@28
@28: scope:[]  from @25
  [2] phi()
  [3] call main 
  to:@end
@end: scope:[]  from @28
  [4] phi()
main: scope:[main]  from @28
  asm { sei  }
  [6] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
  [7] *((const byte*) BGCOL2#0) ← (const byte) DARK_GREY#0
  [8] *((const byte*) BGCOL#0) ← *((const byte*) BGCOL2#0)
  [9] *((const byte*) BGCOL3#0) ← (const byte) BLACK#0
  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#0) ← (const byte) main::toD0181_return#0
  [12] *((const byte*) D016#0) ← (const byte) VIC_MCM#0
  [13] call fill 
  to:main::@4
main::@4: scope:[main]  from main::@3
  [14] phi()
  [15] call fill 
  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/signed byte/word/signed word/dword/signed dword) 0 )
  [17] *((const byte*) SCREEN#0 + (byte) main::ch#2) ← (byte) main::ch#2
  [18] (byte) main::ch#1 ← ++ (byte) main::ch#2
  [19] if((byte) main::ch#1!=(byte/word/signed word/dword/signed dword) 240) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  [20] phi()
  [21] call sin16s_gen2 
  to:main::@6
main::@6: scope:[main]  from main::@2
  [22] phi()
  [23] call loop 
  to:main::@return
main::@return: scope:[main]  from main::@6
  [24] return 
  to:@return
loop: scope:[loop]  from main::@6
  [25] phi()
  to:loop::@1
loop::@1: scope:[loop]  from loop loop::@7
  [26] (word) xsin_idx#11 ← phi( loop/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@7/(word) xsin_idx#19 )
  to:loop::@4
loop::@4: scope:[loop]  from loop::@1 loop::@4
  [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4
  to:loop::@6
loop::@6: scope:[loop]  from loop::@4
  [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
  [29] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word) xsin_idx#11
  [30] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1)
  [31] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
  [32] call render_logo 
  to:loop::@15
loop::@15: scope:[loop]  from loop::@6
  [33] (word) xsin_idx#3 ← (word) xsin_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 2
  [34] if((word) xsin_idx#3!=(const word) XSIN_SIZE#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto loop::@16
  to:loop::@7
loop::@7: scope:[loop]  from loop::@15 loop::@16
  [35] (word) xsin_idx#19 ← phi( loop::@15/(byte/signed byte/word/signed word/dword/signed dword) 0 loop::@16/(word) xsin_idx#3 )
  [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0)
  to:loop::@1
loop::@16: scope:[loop]  from loop::@15
  [37] phi()
  to:loop::@7
render_logo: scope:[render_logo]  from loop::@6
  [38] (byte~) render_logo::$0 ← ((byte)) (signed word) render_logo::xpos#0
  [39] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte/signed byte/word/signed word/dword/signed dword) 7
  [40] (byte~) render_logo::$2 ← (const byte) VIC_MCM#0 | (byte~) render_logo::$1
  [41] *((const byte*) D016#0) ← (byte~) render_logo::$2
  [42] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte/signed byte/word/signed word/dword/signed dword) 3
  [43] (signed byte) render_logo::x_char#0 ← ((signed byte)) (signed word~) render_logo::$3
  [44] if((signed word) render_logo::xpos#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_logo::@1
  to:render_logo::@2
render_logo::@2: scope:[render_logo]  from render_logo render_logo::@22
  [45] (byte) render_logo::screen_idx#17 ← phi( render_logo/(byte/signed byte/word/signed word/dword/signed dword) 0 render_logo::@22/(byte) render_logo::screen_idx#2 )
  [46] if((byte) render_logo::screen_idx#17!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@5
  to:render_logo::@6
render_logo::@6: scope:[render_logo]  from render_logo::@2 render_logo::@26
  [47] (byte) render_logo::logo_idx#11 ← phi( render_logo::@26/(byte) render_logo::logo_idx#2 render_logo::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
  [47] (byte) render_logo::screen_idx#19 ← phi( render_logo::@26/(byte) render_logo::screen_idx#3 render_logo::@2/(byte) render_logo::screen_idx#17 )
  [48] if((byte) render_logo::screen_idx#19!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@9
  to:render_logo::@return
render_logo::@return: scope:[render_logo]  from render_logo::@15 render_logo::@6
  [49] return 
  to:@return
render_logo::@9: scope:[render_logo]  from render_logo::@6
  [50] (byte/signed word/word/dword/signed dword~) render_logo::$15 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 0
  [51] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$15
  to:render_logo::@9_1
render_logo::@9_1: scope:[render_logo]  from render_logo::@9
  [52] (byte/signed word/word/dword/signed dword~) render_logo::$34 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1
  [53] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$34
  to:render_logo::@9_2
render_logo::@9_2: scope:[render_logo]  from render_logo::@9_1
  [54] (byte/signed word/word/dword/signed dword~) render_logo::$38 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2
  [55] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$38
  to:render_logo::@9_3
render_logo::@9_3: scope:[render_logo]  from render_logo::@9_2
  [56] (byte/signed word/word/dword/signed dword~) render_logo::$42 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3
  [57] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$42
  to:render_logo::@9_4
render_logo::@9_4: scope:[render_logo]  from render_logo::@9_3
  [58] (byte/signed word/word/dword/signed dword~) render_logo::$46 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4
  [59] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$46
  to:render_logo::@9_5
render_logo::@9_5: scope:[render_logo]  from render_logo::@9_4
  [60] (byte/signed word/word/dword/signed dword~) render_logo::$50 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5
  [61] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$50
  to:render_logo::@26
render_logo::@26: scope:[render_logo]  from render_logo::@9_5
  [62] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#19
  [63] (byte) render_logo::logo_idx#2 ← ++ (byte) render_logo::logo_idx#11
  to:render_logo::@6
render_logo::@5: scope:[render_logo]  from render_logo::@2
  [64] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@5_1
render_logo::@5_1: scope:[render_logo]  from render_logo::@5
  [65] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@5_2
render_logo::@5_2: scope:[render_logo]  from render_logo::@5_1
  [66] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@5_3
render_logo::@5_3: scope:[render_logo]  from render_logo::@5_2
  [67] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@5_4
render_logo::@5_4: scope:[render_logo]  from render_logo::@5_3
  [68] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@5_5
render_logo::@5_5: scope:[render_logo]  from render_logo::@5_4
  [69] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@22
render_logo::@22: scope:[render_logo]  from render_logo::@5_5
  [70] (byte) render_logo::screen_idx#2 ← ++ (byte) render_logo::screen_idx#17
  to:render_logo::@2
render_logo::@1: scope:[render_logo]  from render_logo
  [71] (signed byte~) render_logo::$17 ← - (signed byte) render_logo::x_char#0
  [72] (byte~) render_logo::logo_idx#13 ← (byte)(signed byte~) render_logo::$17
  to:render_logo::@11
render_logo::@11: scope:[render_logo]  from render_logo::@1 render_logo::@31
  [73] (byte) render_logo::screen_idx#20 ← phi( render_logo::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 render_logo::@31/(byte) render_logo::screen_idx#4 )
  [73] (byte) render_logo::logo_idx#10 ← phi( render_logo::@1/(byte~) render_logo::logo_idx#13 render_logo::@31/(byte) render_logo::logo_idx#3 )
  [74] if((byte) render_logo::logo_idx#10!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@14
  to:render_logo::@15
render_logo::@15: scope:[render_logo]  from render_logo::@11 render_logo::@35
  [75] (byte) render_logo::screen_idx#14 ← phi( render_logo::@11/(byte) render_logo::screen_idx#20 render_logo::@35/(byte) render_logo::screen_idx#5 )
  [76] if((byte) render_logo::screen_idx#14!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@18
  to:render_logo::@return
render_logo::@18: scope:[render_logo]  from render_logo::@15
  [77] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@18_1
render_logo::@18_1: scope:[render_logo]  from render_logo::@18
  [78] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@18_2
render_logo::@18_2: scope:[render_logo]  from render_logo::@18_1
  [79] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@18_3
render_logo::@18_3: scope:[render_logo]  from render_logo::@18_2
  [80] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@18_4
render_logo::@18_4: scope:[render_logo]  from render_logo::@18_3
  [81] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@18_5
render_logo::@18_5: scope:[render_logo]  from render_logo::@18_4
  [82] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render_logo::@35
render_logo::@35: scope:[render_logo]  from render_logo::@18_5
  [83] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#14
  to:render_logo::@15
render_logo::@14: scope:[render_logo]  from render_logo::@11
  [84] (byte/signed word/word/dword/signed dword~) render_logo::$23 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 0
  [85] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$23
  to:render_logo::@14_1
render_logo::@14_1: scope:[render_logo]  from render_logo::@14
  [86] (byte/signed word/word/dword/signed dword~) render_logo::$80 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1
  [87] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$80
  to:render_logo::@14_2
render_logo::@14_2: scope:[render_logo]  from render_logo::@14_1
  [88] (byte/signed word/word/dword/signed dword~) render_logo::$84 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2
  [89] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$84
  to:render_logo::@14_3
render_logo::@14_3: scope:[render_logo]  from render_logo::@14_2
  [90] (byte/signed word/word/dword/signed dword~) render_logo::$88 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3
  [91] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$88
  to:render_logo::@14_4
render_logo::@14_4: scope:[render_logo]  from render_logo::@14_3
  [92] (byte/signed word/word/dword/signed dword~) render_logo::$92 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4
  [93] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$92
  to:render_logo::@14_5
render_logo::@14_5: scope:[render_logo]  from render_logo::@14_4
  [94] (byte/signed word/word/dword/signed dword~) render_logo::$96 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5
  [95] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$96
  to:render_logo::@31
render_logo::@31: scope:[render_logo]  from render_logo::@14_5
  [96] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#20
  [97] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10
  to:render_logo::@11
sin16s_gen2: scope:[sin16s_gen2]  from main::@2
  [98] phi()
  [99] call div32u16u 
  [100] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
  to:sin16s_gen2::@3
sin16s_gen2::@3: scope:[sin16s_gen2]  from sin16s_gen2
  [101] (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
  [102] (word) sin16s_gen2::i#2 ← phi( sin16s_gen2::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s_gen2::@5/(word) sin16s_gen2::i#1 )
  [102] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word[XSIN_SIZE#0]) xsin#0 sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 )
  [102] (dword) sin16s_gen2::x#2 ← phi( sin16s_gen2::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s_gen2::@5/(dword) sin16s_gen2::x#1 )
  [103] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2
  [104] call sin16s 
  [105] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
  to:sin16s_gen2::@4
sin16s_gen2::@4: scope:[sin16s_gen2]  from sin16s_gen2::@1
  [106] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0
  [107] call mul16s 
  [108] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0
  to:sin16s_gen2::@5
sin16s_gen2::@5: scope:[sin16s_gen2]  from sin16s_gen2::@4
  [109] (signed dword~) sin16s_gen2::$5 ← (signed dword) mul16s::return#2
  [110] (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5
  [111] (signed word~) sin16s_gen2::$8 ← (const signed word) sin16s_gen2::offs#0 + (signed word)(word~) sin16s_gen2::$6
  [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word~) sin16s_gen2::$8
  [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2
  [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
  [116] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@1
  to:sin16s_gen2::@return
sin16s_gen2::@return: scope:[sin16s_gen2]  from sin16s_gen2::@5
  [117] return 
  to:@return
mul16s: scope:[mul16s]  from sin16s_gen2::@4
  [118] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#0
  [119] call mul16u 
  [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2
  to:mul16s::@6
mul16s::@6: scope:[mul16s]  from mul16s
  [121] (dword) mul16s::m#0 ← (dword) mul16u::return#2
  [122] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1
  to:mul16s::@3
mul16s::@3: scope:[mul16s]  from mul16s::@6
  [123] (word~) mul16s::$6 ← > (dword) mul16s::m#0
  [124] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0
  [125] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
  to:mul16s::@1
mul16s::@1: scope:[mul16s]  from mul16s::@3 mul16s::@6
  [126] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
  to:mul16s::@2
mul16s::@2: scope:[mul16s]  from mul16s::@1
  [127] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
  to:mul16s::@return
mul16s::@return: scope:[mul16s]  from mul16s::@2
  [128] return 
  to:@return
mul16u: scope:[mul16u]  from mul16s mulu16_sel
  [129] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
  [129] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
  [130] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
  to:mul16u::@1
mul16u::@1: scope:[mul16u]  from mul16u mul16u::@4
  [131] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
  [131] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
  [131] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
  [132] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
  to:mul16u::@return
mul16u::@return: scope:[mul16u]  from mul16u::@1
  [133] return 
  to:@return
mul16u::@2: scope:[mul16u]  from mul16u::@1
  [134] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
  [135] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
  to:mul16u::@7
mul16u::@7: scope:[mul16u]  from mul16u::@2
  [136] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
  to:mul16u::@4
mul16u::@4: scope:[mul16u]  from mul16u::@2 mul16u::@7
  [137] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
  [138] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
  [139] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
  to:mul16u::@1
sin16s: scope:[sin16s]  from sin16s_gen2::@1
  [140] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
  to:sin16s::@4
sin16s::@4: scope:[sin16s]  from sin16s
  [141] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
  to:sin16s::@1
sin16s::@1: scope:[sin16s]  from sin16s sin16s::@4
  [142] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 )
  [142] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
  [143] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
  to:sin16s::@5
sin16s::@5: scope:[sin16s]  from sin16s::@1
  [144] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
  to:sin16s::@2
sin16s::@2: scope:[sin16s]  from sin16s::@1 sin16s::@5
  [145] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
  [146] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
  [147] (word) sin16s::x1#0 ← > (dword~) sin16s::$6
  [148] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
  [149] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
  [150] call mulu16_sel 
  [151] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
  to:sin16s::@8
sin16s::@8: scope:[sin16s]  from sin16s::@2
  [152] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
  [153] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
  [154] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
  [155] call mulu16_sel 
  [156] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
  to:sin16s::@9
sin16s::@9: scope:[sin16s]  from sin16s::@8
  [157] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
  [158] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
  [159] call mulu16_sel 
  [160] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
  to:sin16s::@10
sin16s::@10: scope:[sin16s]  from sin16s::@9
  [161] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
  [162] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
  [163] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
  [164] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
  [165] call mulu16_sel 
  [166] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
  to:sin16s::@11
sin16s::@11: scope:[sin16s]  from sin16s::@10
  [167] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
  [168] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
  [169] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
  [170] call mulu16_sel 
  [171] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
  to:sin16s::@12
sin16s::@12: scope:[sin16s]  from sin16s::@11
  [172] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
  [173] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
  [174] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
  [175] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15
  to:sin16s::@6
sin16s::@6: scope:[sin16s]  from sin16s::@12
  [176] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
  to:sin16s::@3
sin16s::@3: scope:[sin16s]  from sin16s::@15 sin16s::@6
  [177] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
  to:sin16s::@return
sin16s::@return: scope:[sin16s]  from sin16s::@3
  [178] return 
  to:@return
sin16s::@15: scope:[sin16s]  from sin16s::@12
  [179] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
  to:sin16s::@3
mulu16_sel: scope:[mulu16_sel]  from sin16s::@10 sin16s::@11 sin16s::@2 sin16s::@8 sin16s::@9
  [180] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 sin16s::@9/(byte/signed byte/word/signed word/dword/signed dword) 1 )
  [180] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 )
  [180] (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 )
  [181] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
  [182] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
  [183] call mul16u 
  [184] (dword) mul16u::return#3 ← (dword) mul16u::res#2
  to:mulu16_sel::@2
mulu16_sel::@2: scope:[mulu16_sel]  from mulu16_sel
  [185] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
  [186] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
  [187] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
  to:mulu16_sel::@return
mulu16_sel::@return: scope:[mulu16_sel]  from mulu16_sel::@2
  [188] return 
  to:@return
div32u16u: scope:[div32u16u]  from sin16s_gen2
  [189] phi()
  [190] call divr16u 
  [191] (word) divr16u::return#2 ← (word) divr16u::return#0
  to:div32u16u::@2
div32u16u::@2: scope:[div32u16u]  from div32u16u
  [192] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
  [193] (word) divr16u::rem#4 ← (word) rem16u#1
  [194] call divr16u 
  [195] (word) divr16u::return#3 ← (word) divr16u::return#0
  to:div32u16u::@3
div32u16u::@3: scope:[div32u16u]  from div32u16u::@2
  [196] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
  [197] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
  to:div32u16u::@return
div32u16u::@return: scope:[div32u16u]  from div32u16u::@3
  [198] return 
  to:@return
divr16u: scope:[divr16u]  from div32u16u div32u16u::@2
  [199] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 )
  [199] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 )
  to:divr16u::@1
divr16u::@1: scope:[divr16u]  from divr16u divr16u::@3
  [200] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
  [200] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
  [200] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
  [200] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
  [201] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [202] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
  [203] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
  [204] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
  to:divr16u::@4
divr16u::@4: scope:[divr16u]  from divr16u::@1
  [205] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
  to:divr16u::@2
divr16u::@2: scope:[divr16u]  from divr16u::@1 divr16u::@4
  [206] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
  [207] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [208] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
  [209] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3
  to:divr16u::@5
divr16u::@5: scope:[divr16u]  from divr16u::@2
  [210] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
  [211] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0
  to:divr16u::@3
divr16u::@3: scope:[divr16u]  from divr16u::@2 divr16u::@5
  [212] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
  [212] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
  [213] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
  [214] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
  to:divr16u::@6
divr16u::@6: scope:[divr16u]  from divr16u::@3
  [215] (word) rem16u#1 ← (word) divr16u::rem#11
  to:divr16u::@return
divr16u::@return: scope:[divr16u]  from divr16u::@6
  [216] return 
  to:@return
fill: scope:[fill]  from main::@3 main::@4
  [217] (byte) fill::val#3 ← phi( main::@3/(const byte) BLACK#0 main::@4/(const byte) WHITE#0|(byte/signed byte/word/signed word/dword/signed dword) 8 )
  [217] (byte*) fill::addr#0 ← phi( main::@3/(const byte*) SCREEN#0 main::@4/(const byte*) COLS#0 )
  [218] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
  to:fill::@1
fill::@1: scope:[fill]  from fill fill::@1
  [219] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
  [220] *((byte*) fill::addr#2) ← (byte) fill::val#3
  [221] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
  [222] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
  to:fill::@return
fill::@return: scope:[fill]  from fill::@1
  [223] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte*) LOGO
(byte) ORANGE
(word) PI2_u4f12
(dword) PI2_u4f28
(byte) PINK
(word) PI_HALF_u4f12
(dword) PI_HALF_u4f28
(word) PI_u4f12
(dword) PI_u4f28
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(word) XSIN_SIZE
(byte) YELLOW
(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()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(byte*) fill::addr
(byte*) fill::addr#0 2.0
(byte*) fill::addr#1 16.5
(byte*) fill::addr#2 17.5
(byte*) fill::end
(byte*) fill::end#0 2.6
(word) fill::size
(byte*) fill::start
(byte) fill::val
(byte) fill::val#3 1.8333333333333333
(void()) loop()
(signed word*~) loop::$1 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
(word~) main::toD0181_$0
(word~) main::toD0181_$1
(word~) main::toD0181_$2
(byte~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(byte~) main::toD0181_$6
(byte~) main::toD0181_$7
(byte~) main::toD0181_$8
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(byte*) main::toD0181_screen
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 4.0
(word~) mul16s::$6 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 6.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/word~) mul16u::$1 202.0
(word) mul16u::a
(word) mul16u::a#0 101.0
(word) mul16u::a#2 2.0
(word) mul16u::a#3 67.66666666666666
(word) mul16u::a#6 3.0
(word~) mul16u::a#8 4.0
(word) mul16u::b
(word) mul16u::b#1 4.0
(word) mul16u::b#2 4.0
(dword) mul16u::mb
(dword) mul16u::mb#0 4.0
(dword) mul16u::mb#1 202.0
(dword) mul16u::mb#2 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 202.0
(dword) mul16u::res#2 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
(signed word) rem16s
(word) rem16u
(word) rem16u#1 0.8
(signed byte) rem8s
(byte) rem8u
(void()) render_logo((signed word) render_logo::xpos)
(byte~) render_logo::$0 4.0
(byte~) render_logo::$1 4.0
(byte/signed word/word/dword/signed dword~) render_logo::$15 202.0
(signed byte~) render_logo::$17 2.0
(byte~) render_logo::$2 4.0
(byte/signed word/word/dword/signed dword~) render_logo::$23 202.0
(signed word~) render_logo::$3 4.0
(byte/signed word/word/dword/signed dword~) render_logo::$34 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$38 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$42 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$46 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$50 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$80 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$84 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$88 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$92 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$96 202.0
(byte) render_logo::line
(byte) render_logo::logo_idx
(byte) render_logo::logo_idx#10 60.73333333333334
(byte) render_logo::logo_idx#11 53.86666666666667
(byte~) render_logo::logo_idx#13 4.0
(byte) render_logo::logo_idx#2 202.0
(byte) render_logo::logo_idx#3 202.0
(byte) render_logo::logo_start
(byte) render_logo::screen_idx
(byte) render_logo::screen_idx#14 126.25
(byte) render_logo::screen_idx#17 126.25
(byte) render_logo::screen_idx#19 72.14285714285714
(byte) render_logo::screen_idx#2 202.0
(byte) render_logo::screen_idx#20 64.92857142857143
(byte) render_logo::screen_idx#3 101.0
(byte) render_logo::screen_idx#4 101.0
(byte) render_logo::screen_idx#5 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.4285714285714284
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$6 4.0
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 22.0
(signed word) sin16s::return#1 5.0
(signed word~) sin16s::return#5 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 0.3333333333333333
(word) sin16s::usinx#1 1.0
(dword) sin16s::x
(dword) sin16s::x#0 8.5
(dword) sin16s::x#1 4.0
(dword) sin16s::x#2 4.0
(dword) sin16s::x#4 5.0
(dword) sin16s::x#6 6.0
(word) sin16s::x1
(word) sin16s::x1#0 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 4.0
(word) sin16s::x3
(word) sin16s::x3#0 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 4.0
(word) sin16s::x4
(word) sin16s::x4#0 4.0
(word) sin16s::x5
(word) sin16s::x5#0 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 4.0
(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
(signed dword~) sin16s_gen2::$5 22.0
(word~) sin16s_gen2::$6 11.0
(signed word~) sin16s_gen2::$8 22.0
(signed word) sin16s_gen2::ampl
(word) sin16s_gen2::i
(word) sin16s_gen2::i#1 16.5
(word) sin16s_gen2::i#2 1.6923076923076923
(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 5.5
(signed word*) sin16s_gen2::sintab#2 3.0
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 0.8125
(word) sin16s_gen2::wavelength
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#1 7.333333333333333
(dword) sin16s_gen2::x#2 2.75
(signed word[XSIN_SIZE#0]) xsin
(word) xsin_idx
(word) xsin_idx#11 4.714285714285714
(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#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ]
[ render_logo::logo_idx#11 render_logo::logo_idx#2 ]
[ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ]
[ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ]
[ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
[ sin16s_gen2::i#2 sin16s_gen2::i#1 ]
[ mul16s::m#4 mul16s::m#1 mul16s::m#0 ]
[ mul16u::b#2 mul16u::b#1 ]
[ mul16u::a#3 mul16u::a#6 mul16u::a#8 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 ]
[ fill::val#3 ]
[ fill::addr#2 fill::addr#0 fill::addr#1 ]
Added variable loop::$1 to zero page equivalence class [ loop::$1 ]
Added variable loop::xpos#0 to zero page equivalence class [ loop::xpos#0 ]
Added variable render_logo::xpos#0 to zero page equivalence class [ render_logo::xpos#0 ]
Added variable render_logo::$0 to zero page equivalence class [ render_logo::$0 ]
Added variable render_logo::$1 to zero page equivalence class [ render_logo::$1 ]
Added variable render_logo::$2 to zero page equivalence class [ render_logo::$2 ]
Added variable render_logo::$3 to zero page equivalence class [ render_logo::$3 ]
Added variable render_logo::x_char#0 to zero page equivalence class [ render_logo::x_char#0 ]
Added variable render_logo::$15 to zero page equivalence class [ render_logo::$15 ]
Added variable render_logo::$34 to zero page equivalence class [ render_logo::$34 ]
Added variable render_logo::$38 to zero page equivalence class [ render_logo::$38 ]
Added variable render_logo::$42 to zero page equivalence class [ render_logo::$42 ]
Added variable render_logo::$46 to zero page equivalence class [ render_logo::$46 ]
Added variable render_logo::$50 to zero page equivalence class [ render_logo::$50 ]
Added variable render_logo::$17 to zero page equivalence class [ render_logo::$17 ]
Added variable render_logo::$23 to zero page equivalence class [ render_logo::$23 ]
Added variable render_logo::$80 to zero page equivalence class [ render_logo::$80 ]
Added variable render_logo::$84 to zero page equivalence class [ render_logo::$84 ]
Added variable render_logo::$88 to zero page equivalence class [ render_logo::$88 ]
Added variable render_logo::$92 to zero page equivalence class [ render_logo::$92 ]
Added variable render_logo::$96 to zero page equivalence class [ render_logo::$96 ]
Added variable div32u16u::return#2 to zero page equivalence class [ div32u16u::return#2 ]
Added variable sin16s_gen2::step#0 to zero page equivalence class [ sin16s_gen2::step#0 ]
Added variable sin16s::return#0 to zero page equivalence class [ sin16s::return#0 ]
Added variable mul16s::a#0 to zero page equivalence class [ mul16s::a#0 ]
Added variable mul16s::return#2 to zero page equivalence class [ mul16s::return#2 ]
Added variable sin16s_gen2::$5 to zero page equivalence class [ sin16s_gen2::$5 ]
Added variable sin16s_gen2::$6 to zero page equivalence class [ sin16s_gen2::$6 ]
Added variable sin16s_gen2::$8 to zero page equivalence class [ sin16s_gen2::$8 ]
Added variable mul16u::return#2 to zero page equivalence class [ mul16u::return#2 ]
Added variable mul16s::$6 to zero page equivalence class [ mul16s::$6 ]
Added variable mul16s::$16 to zero page equivalence class [ mul16s::$16 ]
Added variable mul16s::return#0 to zero page equivalence class [ mul16s::return#0 ]
Added variable mul16u::$1 to zero page equivalence class [ mul16u::$1 ]
Added variable sin16s::$6 to zero page equivalence class [ sin16s::$6 ]
Added variable sin16s::x1#0 to zero page equivalence class [ sin16s::x1#0 ]
Added variable mulu16_sel::return#0 to zero page equivalence class [ mulu16_sel::return#0 ]
Added variable sin16s::x2#0 to zero page equivalence class [ sin16s::x2#0 ]
Added variable mulu16_sel::return#1 to zero page equivalence class [ mulu16_sel::return#1 ]
Added variable sin16s::x3#0 to zero page equivalence class [ sin16s::x3#0 ]
Added variable mulu16_sel::return#2 to zero page equivalence class [ mulu16_sel::return#2 ]
Added variable sin16s::x3_6#0 to zero page equivalence class [ sin16s::x3_6#0 ]
Added variable sin16s::usinx#0 to zero page equivalence class [ sin16s::usinx#0 ]
Added variable mulu16_sel::return#10 to zero page equivalence class [ mulu16_sel::return#10 ]
Added variable sin16s::x4#0 to zero page equivalence class [ sin16s::x4#0 ]
Added variable mulu16_sel::return#11 to zero page equivalence class [ mulu16_sel::return#11 ]
Added variable sin16s::x5#0 to zero page equivalence class [ sin16s::x5#0 ]
Added variable sin16s::x5_128#0 to zero page equivalence class [ sin16s::x5_128#0 ]
Added variable sin16s::usinx#1 to zero page equivalence class [ sin16s::usinx#1 ]
Added variable mul16u::return#3 to zero page equivalence class [ mul16u::return#3 ]
Added variable mulu16_sel::$0 to zero page equivalence class [ mulu16_sel::$0 ]
Added variable mulu16_sel::$1 to zero page equivalence class [ mulu16_sel::$1 ]
Added variable mulu16_sel::return#12 to zero page equivalence class [ mulu16_sel::return#12 ]
Added variable divr16u::return#2 to zero page equivalence class [ divr16u::return#2 ]
Added variable div32u16u::quotient_hi#0 to zero page equivalence class [ div32u16u::quotient_hi#0 ]
Added variable divr16u::return#3 to zero page equivalence class [ divr16u::return#3 ]
Added variable div32u16u::quotient_lo#0 to zero page equivalence class [ div32u16u::quotient_lo#0 ]
Added variable div32u16u::return#0 to zero page equivalence class [ div32u16u::return#0 ]
Added variable divr16u::$1 to zero page equivalence class [ divr16u::$1 ]
Added variable divr16u::$2 to zero page equivalence class [ divr16u::$2 ]
Added variable rem16u#1 to zero page equivalence class [ rem16u#1 ]
Added variable fill::end#0 to zero page equivalence class [ fill::end#0 ]
Complete equivalence classes
[ main::ch#2 main::ch#1 ]
[ xsin_idx#11 xsin_idx#19 xsin_idx#3 ]
[ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ]
[ render_logo::logo_idx#11 render_logo::logo_idx#2 ]
[ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ]
[ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ]
[ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
[ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
[ sin16s_gen2::i#2 sin16s_gen2::i#1 ]
[ mul16s::m#4 mul16s::m#1 mul16s::m#0 ]
[ mul16u::b#2 mul16u::b#1 ]
[ mul16u::a#3 mul16u::a#6 mul16u::a#8 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 ]
[ fill::val#3 ]
[ fill::addr#2 fill::addr#0 fill::addr#1 ]
[ loop::$1 ]
[ 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::$15 ]
[ render_logo::$34 ]
[ render_logo::$38 ]
[ render_logo::$42 ]
[ render_logo::$46 ]
[ render_logo::$50 ]
[ render_logo::$17 ]
[ render_logo::$23 ]
[ render_logo::$80 ]
[ render_logo::$84 ]
[ render_logo::$88 ]
[ render_logo::$92 ]
[ render_logo::$96 ]
[ div32u16u::return#2 ]
[ sin16s_gen2::step#0 ]
[ sin16s::return#0 ]
[ mul16s::a#0 ]
[ mul16s::return#2 ]
[ sin16s_gen2::$5 ]
[ sin16s_gen2::$6 ]
[ sin16s_gen2::$8 ]
[ mul16u::return#2 ]
[ mul16s::$6 ]
[ mul16s::$16 ]
[ mul16s::return#0 ]
[ mul16u::$1 ]
[ sin16s::$6 ]
[ sin16s::x1#0 ]
[ mulu16_sel::return#0 ]
[ sin16s::x2#0 ]
[ mulu16_sel::return#1 ]
[ sin16s::x3#0 ]
[ mulu16_sel::return#2 ]
[ sin16s::x3_6#0 ]
[ sin16s::usinx#0 ]
[ mulu16_sel::return#10 ]
[ sin16s::x4#0 ]
[ mulu16_sel::return#11 ]
[ sin16s::x5#0 ]
[ sin16s::x5_128#0 ]
[ sin16s::usinx#1 ]
[ mul16u::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 ]
[ fill::end#0 ]
Allocated zp ZP_BYTE:2 [ main::ch#2 main::ch#1 ]
Allocated zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ]
Allocated zp ZP_BYTE:5 [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ]
Allocated zp ZP_BYTE:6 [ render_logo::logo_idx#11 render_logo::logo_idx#2 ]
Allocated zp ZP_BYTE:7 [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ]
Allocated zp ZP_BYTE:8 [ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ]
Allocated zp ZP_DWORD:9 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
Allocated zp ZP_WORD:13 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
Allocated zp ZP_WORD:15 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ]
Allocated zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ]
Allocated zp ZP_WORD:21 [ mul16u::b#2 mul16u::b#1 ]
Allocated zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ]
Allocated zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ]
Allocated zp ZP_DWORD:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
Allocated zp ZP_BYTE:33 [ sin16s::isUpper#2 ]
Allocated zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ]
Allocated zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ]
Allocated zp ZP_WORD: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 ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
Allocated zp ZP_BYTE:44 [ mulu16_sel::select#5 ]
Allocated zp ZP_WORD: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 ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
Allocated zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ]
Allocated zp ZP_BYTE:51 [ divr16u::i#2 divr16u::i#1 ]
Allocated zp ZP_BYTE:52 [ fill::val#3 ]
Allocated zp ZP_WORD:53 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated zp ZP_WORD:55 [ loop::$1 ]
Allocated zp ZP_WORD:57 [ loop::xpos#0 ]
Allocated zp ZP_WORD:59 [ render_logo::xpos#0 ]
Allocated zp ZP_BYTE:61 [ render_logo::$0 ]
Allocated zp ZP_BYTE:62 [ render_logo::$1 ]
Allocated zp ZP_BYTE:63 [ render_logo::$2 ]
Allocated zp ZP_WORD:64 [ render_logo::$3 ]
Allocated zp ZP_BYTE:66 [ render_logo::x_char#0 ]
Allocated zp ZP_BYTE:67 [ render_logo::$15 ]
Allocated zp ZP_BYTE:68 [ render_logo::$34 ]
Allocated zp ZP_BYTE:69 [ render_logo::$38 ]
Allocated zp ZP_BYTE:70 [ render_logo::$42 ]
Allocated zp ZP_BYTE:71 [ render_logo::$46 ]
Allocated zp ZP_BYTE:72 [ render_logo::$50 ]
Allocated zp ZP_BYTE:73 [ render_logo::$17 ]
Allocated zp ZP_BYTE:74 [ render_logo::$23 ]
Allocated zp ZP_BYTE:75 [ render_logo::$80 ]
Allocated zp ZP_BYTE:76 [ render_logo::$84 ]
Allocated zp ZP_BYTE:77 [ render_logo::$88 ]
Allocated zp ZP_BYTE:78 [ render_logo::$92 ]
Allocated zp ZP_BYTE:79 [ render_logo::$96 ]
Allocated zp ZP_DWORD:80 [ div32u16u::return#2 ]
Allocated zp ZP_DWORD:84 [ sin16s_gen2::step#0 ]
Allocated zp ZP_WORD:88 [ sin16s::return#0 ]
Allocated zp ZP_WORD:90 [ mul16s::a#0 ]
Allocated zp ZP_DWORD:92 [ mul16s::return#2 ]
Allocated zp ZP_DWORD:96 [ sin16s_gen2::$5 ]
Allocated zp ZP_WORD:100 [ sin16s_gen2::$6 ]
Allocated zp ZP_WORD:102 [ sin16s_gen2::$8 ]
Allocated zp ZP_DWORD:104 [ mul16u::return#2 ]
Allocated zp ZP_WORD:108 [ mul16s::$6 ]
Allocated zp ZP_WORD:110 [ mul16s::$16 ]
Allocated zp ZP_DWORD:112 [ mul16s::return#0 ]
Allocated zp ZP_BYTE:116 [ mul16u::$1 ]
Allocated zp ZP_DWORD:117 [ sin16s::$6 ]
Allocated zp ZP_WORD:121 [ sin16s::x1#0 ]
Allocated zp ZP_WORD:123 [ mulu16_sel::return#0 ]
Allocated zp ZP_WORD:125 [ sin16s::x2#0 ]
Allocated zp ZP_WORD:127 [ mulu16_sel::return#1 ]
Allocated zp ZP_WORD:129 [ sin16s::x3#0 ]
Allocated zp ZP_WORD:131 [ mulu16_sel::return#2 ]
Allocated zp ZP_WORD:133 [ sin16s::x3_6#0 ]
Allocated zp ZP_WORD:135 [ sin16s::usinx#0 ]
Allocated zp ZP_WORD:137 [ mulu16_sel::return#10 ]
Allocated zp ZP_WORD:139 [ sin16s::x4#0 ]
Allocated zp ZP_WORD:141 [ mulu16_sel::return#11 ]
Allocated zp ZP_WORD:143 [ sin16s::x5#0 ]
Allocated zp ZP_WORD:145 [ sin16s::x5_128#0 ]
Allocated zp ZP_WORD:147 [ sin16s::usinx#1 ]
Allocated zp ZP_DWORD:149 [ mul16u::return#3 ]
Allocated zp ZP_DWORD:153 [ mulu16_sel::$0 ]
Allocated zp ZP_DWORD:157 [ mulu16_sel::$1 ]
Allocated zp ZP_WORD:161 [ mulu16_sel::return#12 ]
Allocated zp ZP_WORD:163 [ divr16u::return#2 ]
Allocated zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ]
Allocated zp ZP_WORD:167 [ divr16u::return#3 ]
Allocated zp ZP_WORD:169 [ div32u16u::quotient_lo#0 ]
Allocated zp ZP_DWORD:171 [ div32u16u::return#0 ]
Allocated zp ZP_BYTE:175 [ divr16u::$1 ]
Allocated zp ZP_BYTE:176 [ divr16u::$2 ]
Allocated zp ZP_WORD:177 [ rem16u#1 ]
Allocated zp ZP_WORD:179 [ fill::end#0 ]

INITIAL ASM
//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 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
  .label SCREEN = $400
  .label LOGO = $2000
  .const XSIN_SIZE = $200
  .label rem16u = $b1
  .label xsin_idx = 3
//SEG3 @begin
bbegin:
  jmp b25
//SEG4 @25
b25:
//SEG5 kickasm(location (const byte*) LOGO#0) {{ .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)  }}
//SEG6 [2] phi from @25 to @28 [phi:@25->@28]
b28_from_b25:
  jmp b28
//SEG7 @28
b28:
//SEG8 [3] call main 
  jsr main
//SEG9 [4] phi from @28 to @end [phi:@28->@end]
bend_from_b28:
  jmp bend
//SEG10 @end
bend:
//SEG11 main
main: {
    .const toD0181_return = (>(SCREEN&$3fff)<<2)|(>LOGO)>>2&$f
    .label ch = 2
  //SEG12 asm { sei  }
    sei
  //SEG13 [6] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta BORDERCOL
  //SEG14 [7] *((const byte*) BGCOL2#0) ← (const byte) DARK_GREY#0 -- _deref_pbuc1=vbuc2 
    lda #DARK_GREY
    sta BGCOL2
  //SEG15 [8] *((const byte*) BGCOL#0) ← *((const byte*) BGCOL2#0) -- _deref_pbuc1=_deref_pbuc2 
    lda BGCOL2
    sta BGCOL
  //SEG16 [9] *((const byte*) BGCOL3#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 
    lda #BLACK
    sta BGCOL3
  //SEG17 [10] phi from main to main::toD0181 [phi:main->main::toD0181]
  toD0181_from_main:
    jmp toD0181
  //SEG18 main::toD0181
  toD0181:
    jmp b3
  //SEG19 main::@3
  b3:
  //SEG20 [11] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
  //SEG21 [12] *((const byte*) D016#0) ← (const byte) VIC_MCM#0 -- _deref_pbuc1=vbuc2 
    lda #VIC_MCM
    sta D016
  //SEG22 [13] call fill 
  //SEG23 [217] phi from main::@3 to fill [phi:main::@3->fill]
  fill_from_b3:
  //SEG24 [217] phi (byte) fill::val#3 = (const byte) BLACK#0 [phi:main::@3->fill#0] -- vbuz1=vbuc1 
    lda #BLACK
    sta fill.val
  //SEG25 [217] phi (byte*) fill::addr#0 = (const byte*) SCREEN#0 [phi:main::@3->fill#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta fill.addr
    lda #>SCREEN
    sta fill.addr+1
    jsr fill
  //SEG26 [14] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
  //SEG27 main::@4
  b4:
  //SEG28 [15] call fill 
  //SEG29 [217] phi from main::@4 to fill [phi:main::@4->fill]
  fill_from_b4:
  //SEG30 [217] phi (byte) fill::val#3 = (const byte) WHITE#0|(byte/signed byte/word/signed word/dword/signed dword) 8 [phi:main::@4->fill#0] -- vbuz1=vbuc1 
    lda #WHITE|8
    sta fill.val
  //SEG31 [217] phi (byte*) fill::addr#0 = (const byte*) COLS#0 [phi:main::@4->fill#1] -- pbuz1=pbuc1 
    lda #<COLS
    sta fill.addr
    lda #>COLS
    sta fill.addr+1
    jsr fill
  //SEG32 [16] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
  b1_from_b4:
  //SEG33 [16] phi (byte) main::ch#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@4->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta ch
    jmp b1
  //SEG34 [16] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  b1_from_b1:
  //SEG35 [16] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@1->main::@1#0] -- register_copy 
    jmp b1
  //SEG36 main::@1
  b1:
  //SEG37 [17] *((const byte*) SCREEN#0 + (byte) main::ch#2) ← (byte) main::ch#2 -- pbuc1_derefidx_vbuz1=vbuz1 
    ldy ch
    tya
    sta SCREEN,y
  //SEG38 [18] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuz1=_inc_vbuz1 
    inc ch
  //SEG39 [19] if((byte) main::ch#1!=(byte/word/signed word/dword/signed dword) 240) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda ch
    cmp #$f0
    bne b1_from_b1
  //SEG40 [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
  //SEG41 main::@2
  b2:
  //SEG42 [21] call sin16s_gen2 
  //SEG43 [98] phi from main::@2 to sin16s_gen2 [phi:main::@2->sin16s_gen2]
  sin16s_gen2_from_b2:
    jsr sin16s_gen2
  //SEG44 [22] phi from main::@2 to main::@6 [phi:main::@2->main::@6]
  b6_from_b2:
    jmp b6
  //SEG45 main::@6
  b6:
  //SEG46 [23] call loop 
  //SEG47 [25] phi from main::@6 to loop [phi:main::@6->loop]
  loop_from_b6:
    jsr loop
    jmp breturn
  //SEG48 main::@return
  breturn:
  //SEG49 [24] return 
    rts
}
//SEG50 loop
loop: {
    .label _1 = $37
    .label xpos = $39
  //SEG51 [26] phi from loop to loop::@1 [phi:loop->loop::@1]
  b1_from_loop:
  //SEG52 [26] phi (word) xsin_idx#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop->loop::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta xsin_idx
    lda #>0
    sta xsin_idx+1
    jmp b1
  //SEG53 loop::@1
  b1:
    jmp b4
  // Wait for the raster to reach the bottom of the screen
  //SEG54 loop::@4
  b4:
  //SEG55 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b4
    jmp b6
  //SEG56 loop::@6
  b6:
  //SEG57 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
  //SEG58 [29] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word) xsin_idx#11 -- pwsz1=pwsc1_plus_vwuz2 
    lda xsin_idx
    clc
    adc #<xsin
    sta _1
    lda xsin_idx+1
    adc #>xsin
    sta _1+1
  //SEG59 [30] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) -- vwsz1=_deref_pwsz2 
    ldy #0
    lda (_1),y
    sta xpos
    iny
    lda (_1),y
    sta xpos+1
  //SEG60 [31] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0 -- vwsz1=vwsz2 
    lda xpos
    sta render_logo.xpos
    lda xpos+1
    sta render_logo.xpos+1
  //SEG61 [32] call render_logo 
    jsr render_logo
    jmp b15
  //SEG62 loop::@15
  b15:
  //SEG63 [33] (word) xsin_idx#3 ← (word) xsin_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vwuz1=vwuz1_plus_2 
    lda xsin_idx
    clc
    adc #2
    sta xsin_idx
    bcc !+
    inc xsin_idx+1
  !:
  //SEG64 [34] if((word) xsin_idx#3!=(const word) XSIN_SIZE#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto loop::@16 -- vwuz1_neq_vwuc1_then_la1 
    lda xsin_idx+1
    cmp #>XSIN_SIZE*2
    bne b16_from_b15
    lda xsin_idx
    cmp #<XSIN_SIZE*2
    bne b16_from_b15
  //SEG65 [35] phi from loop::@15 to loop::@7 [phi:loop::@15->loop::@7]
  b7_from_b15:
  //SEG66 [35] phi (word) xsin_idx#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@15->loop::@7#0] -- vwuz1=vbuc1 
    lda #<0
    sta xsin_idx
    lda #>0
    sta xsin_idx+1
    jmp b7
  //SEG67 loop::@7
  b7:
  //SEG68 [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
  //SEG69 [26] phi from loop::@7 to loop::@1 [phi:loop::@7->loop::@1]
  b1_from_b7:
  //SEG70 [26] phi (word) xsin_idx#11 = (word) xsin_idx#19 [phi:loop::@7->loop::@1#0] -- register_copy 
    jmp b1
  //SEG71 [37] phi from loop::@15 to loop::@16 [phi:loop::@15->loop::@16]
  b16_from_b15:
    jmp b16
  //SEG72 loop::@16
  b16:
  //SEG73 [35] phi from loop::@16 to loop::@7 [phi:loop::@16->loop::@7]
  b7_from_b16:
  //SEG74 [35] phi (word) xsin_idx#19 = (word) xsin_idx#3 [phi:loop::@16->loop::@7#0] -- register_copy 
    jmp b7
}
//SEG75 render_logo
// render_logo(signed word zeropage($3b) xpos)
render_logo: {
    .label _0 = $3d
    .label _1 = $3e
    .label _2 = $3f
    .label _3 = $40
    .label _15 = $43
    .label _17 = $49
    .label _23 = $4a
    .label xpos = $3b
    .label x_char = $42
    .label screen_idx = 5
    .label logo_idx = 6
    .label screen_idx_4 = 8
    .label logo_idx_3 = 7
    .label screen_idx_5 = 8
    .label screen_idx_14 = 8
    .label logo_idx_10 = 7
    .label screen_idx_20 = 8
    .label _34 = $44
    .label _38 = $45
    .label _42 = $46
    .label _46 = $47
    .label _50 = $48
    .label _80 = $4b
    .label _84 = $4c
    .label _88 = $4d
    .label _92 = $4e
    .label _96 = $4f
    .label logo_idx_13 = 7
  //SEG76 [38] (byte~) render_logo::$0 ← ((byte)) (signed word) render_logo::xpos#0 -- vbuz1=_byte_vwsz2 
    lda xpos
    sta _0
  //SEG77 [39] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuz1=vbuz2_band_vbuc1 
    lda #7
    and _0
    sta _1
  //SEG78 [40] (byte~) render_logo::$2 ← (const byte) VIC_MCM#0 | (byte~) render_logo::$1 -- vbuz1=vbuc1_bor_vbuz2 
    lda #VIC_MCM
    ora _1
    sta _2
  //SEG79 [41] *((const byte*) D016#0) ← (byte~) render_logo::$2 -- _deref_pbuc1=vbuz1 
    lda _2
    sta D016
  //SEG80 [42] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte/signed byte/word/signed word/dword/signed dword) 3 -- vwsz1=vwsz2_ror_3 
    lda xpos+1
    cmp #$80
    ror
    sta _3+1
    lda xpos
    ror
    sta _3
    lda _3+1
    cmp #$80
    ror _3+1
    ror _3
    lda _3+1
    cmp #$80
    ror _3+1
    ror _3
  //SEG81 [43] (signed byte) render_logo::x_char#0 ← ((signed byte)) (signed word~) render_logo::$3 -- vbsz1=_sbyte_vwsz2 
    lda _3
    sta x_char
  //SEG82 [44] if((signed word) render_logo::xpos#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_logo::@1 -- vwsz1_lt_0_then_la1 
    lda xpos+1
    bmi b1
  //SEG83 [45] phi from render_logo to render_logo::@2 [phi:render_logo->render_logo::@2]
  b2_from_render_logo:
  //SEG84 [45] phi (byte) render_logo::screen_idx#17 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_logo->render_logo::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta screen_idx
    jmp b2
  //SEG85 render_logo::@2
  b2:
  //SEG86 [46] if((byte) render_logo::screen_idx#17!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@5 -- vbuz1_neq_vbuz2_then_la1 
    lda screen_idx
    cmp x_char
    bne b5
  //SEG87 [47] phi from render_logo::@2 to render_logo::@6 [phi:render_logo::@2->render_logo::@6]
  b6_from_b2:
  //SEG88 [47] phi (byte) render_logo::logo_idx#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_logo::@2->render_logo::@6#0] -- vbuz1=vbuc1 
    lda #0
    sta logo_idx
  //SEG89 [47] phi (byte) render_logo::screen_idx#19 = (byte) render_logo::screen_idx#17 [phi:render_logo::@2->render_logo::@6#1] -- register_copy 
    jmp b6
  //SEG90 render_logo::@6
  b6:
  //SEG91 [48] if((byte) render_logo::screen_idx#19!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@9 -- vbuz1_neq_vbuc1_then_la1 
    lda screen_idx
    cmp #$28
    bne b9
    jmp breturn
  //SEG92 render_logo::@return
  breturn:
  //SEG93 [49] return 
    rts
  //SEG94 render_logo::@9
  b9:
  //SEG95 [50] (byte/signed word/word/dword/signed dword~) render_logo::$15 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuz2_plus_0 
    lda logo_idx
    sta _15
  //SEG96 [51] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$15 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _15
    ldy screen_idx
    sta SCREEN,y
    jmp b9_1
  //SEG97 render_logo::@9_1
  b9_1:
  //SEG98 [52] (byte/signed word/word/dword/signed dword~) render_logo::$34 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*1
    clc
    adc logo_idx
    sta _34
  //SEG99 [53] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$34 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _34
    ldy screen_idx
    sta SCREEN+$28*1,y
    jmp b9_2
  //SEG100 render_logo::@9_2
  b9_2:
  //SEG101 [54] (byte/signed word/word/dword/signed dword~) render_logo::$38 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*2
    clc
    adc logo_idx
    sta _38
  //SEG102 [55] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$38 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _38
    ldy screen_idx
    sta SCREEN+$28*2,y
    jmp b9_3
  //SEG103 render_logo::@9_3
  b9_3:
  //SEG104 [56] (byte/signed word/word/dword/signed dword~) render_logo::$42 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*3
    clc
    adc logo_idx
    sta _42
  //SEG105 [57] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$42 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _42
    ldy screen_idx
    sta SCREEN+$28*3,y
    jmp b9_4
  //SEG106 render_logo::@9_4
  b9_4:
  //SEG107 [58] (byte/signed word/word/dword/signed dword~) render_logo::$46 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*4
    clc
    adc logo_idx
    sta _46
  //SEG108 [59] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$46 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _46
    ldy screen_idx
    sta SCREEN+$28*4,y
    jmp b9_5
  //SEG109 render_logo::@9_5
  b9_5:
  //SEG110 [60] (byte/signed word/word/dword/signed dword~) render_logo::$50 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*5
    clc
    adc logo_idx
    sta _50
  //SEG111 [61] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$50 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _50
    ldy screen_idx
    sta SCREEN+$28*5,y
    jmp b26
  //SEG112 render_logo::@26
  b26:
  //SEG113 [62] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#19 -- vbuz1=_inc_vbuz1 
    inc screen_idx
  //SEG114 [63] (byte) render_logo::logo_idx#2 ← ++ (byte) render_logo::logo_idx#11 -- vbuz1=_inc_vbuz1 
    inc logo_idx
  //SEG115 [47] phi from render_logo::@26 to render_logo::@6 [phi:render_logo::@26->render_logo::@6]
  b6_from_b26:
  //SEG116 [47] phi (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#2 [phi:render_logo::@26->render_logo::@6#0] -- register_copy 
  //SEG117 [47] phi (byte) render_logo::screen_idx#19 = (byte) render_logo::screen_idx#3 [phi:render_logo::@26->render_logo::@6#1] -- register_copy 
    jmp b6
  //SEG118 render_logo::@5
  b5:
  //SEG119 [64] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx
    lda #0
    sta SCREEN,y
    jmp b5_1
  //SEG120 render_logo::@5_1
  b5_1:
  //SEG121 [65] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx
    lda #0
    sta SCREEN+$28*1,y
    jmp b5_2
  //SEG122 render_logo::@5_2
  b5_2:
  //SEG123 [66] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx
    lda #0
    sta SCREEN+$28*2,y
    jmp b5_3
  //SEG124 render_logo::@5_3
  b5_3:
  //SEG125 [67] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx
    lda #0
    sta SCREEN+$28*3,y
    jmp b5_4
  //SEG126 render_logo::@5_4
  b5_4:
  //SEG127 [68] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx
    lda #0
    sta SCREEN+$28*4,y
    jmp b5_5
  //SEG128 render_logo::@5_5
  b5_5:
  //SEG129 [69] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx
    lda #0
    sta SCREEN+$28*5,y
    jmp b22
  //SEG130 render_logo::@22
  b22:
  //SEG131 [70] (byte) render_logo::screen_idx#2 ← ++ (byte) render_logo::screen_idx#17 -- vbuz1=_inc_vbuz1 
    inc screen_idx
  //SEG132 [45] phi from render_logo::@22 to render_logo::@2 [phi:render_logo::@22->render_logo::@2]
  b2_from_b22:
  //SEG133 [45] phi (byte) render_logo::screen_idx#17 = (byte) render_logo::screen_idx#2 [phi:render_logo::@22->render_logo::@2#0] -- register_copy 
    jmp b2
  //SEG134 render_logo::@1
  b1:
  //SEG135 [71] (signed byte~) render_logo::$17 ← - (signed byte) render_logo::x_char#0 -- vbsz1=_neg_vbsz2 
    lda x_char
    eor #$ff
    clc
    adc #1
    sta _17
  //SEG136 [72] (byte~) render_logo::logo_idx#13 ← (byte)(signed byte~) render_logo::$17 -- vbuz1=vbuz2 
    lda _17
    sta logo_idx_13
  //SEG137 [73] phi from render_logo::@1 to render_logo::@11 [phi:render_logo::@1->render_logo::@11]
  b11_from_b1:
  //SEG138 [73] phi (byte) render_logo::screen_idx#20 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_logo::@1->render_logo::@11#0] -- vbuz1=vbuc1 
    lda #0
    sta screen_idx_20
  //SEG139 [73] phi (byte) render_logo::logo_idx#10 = (byte~) render_logo::logo_idx#13 [phi:render_logo::@1->render_logo::@11#1] -- register_copy 
    jmp b11
  //SEG140 render_logo::@11
  b11:
  //SEG141 [74] if((byte) render_logo::logo_idx#10!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@14 -- vbuz1_neq_vbuc1_then_la1 
    lda logo_idx_10
    cmp #$28
    bne b14
  //SEG142 [75] phi from render_logo::@11 render_logo::@35 to render_logo::@15 [phi:render_logo::@11/render_logo::@35->render_logo::@15]
  b15_from_b11:
  b15_from_b35:
  //SEG143 [75] phi (byte) render_logo::screen_idx#14 = (byte) render_logo::screen_idx#20 [phi:render_logo::@11/render_logo::@35->render_logo::@15#0] -- register_copy 
    jmp b15
  //SEG144 render_logo::@15
  b15:
  //SEG145 [76] if((byte) render_logo::screen_idx#14!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@18 -- vbuz1_neq_vbuc1_then_la1 
    lda screen_idx_14
    cmp #$28
    bne b18
    jmp breturn
  //SEG146 render_logo::@18
  b18:
  //SEG147 [77] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx_14
    lda #0
    sta SCREEN,y
    jmp b18_1
  //SEG148 render_logo::@18_1
  b18_1:
  //SEG149 [78] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx_14
    lda #0
    sta SCREEN+$28*1,y
    jmp b18_2
  //SEG150 render_logo::@18_2
  b18_2:
  //SEG151 [79] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx_14
    lda #0
    sta SCREEN+$28*2,y
    jmp b18_3
  //SEG152 render_logo::@18_3
  b18_3:
  //SEG153 [80] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx_14
    lda #0
    sta SCREEN+$28*3,y
    jmp b18_4
  //SEG154 render_logo::@18_4
  b18_4:
  //SEG155 [81] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx_14
    lda #0
    sta SCREEN+$28*4,y
    jmp b18_5
  //SEG156 render_logo::@18_5
  b18_5:
  //SEG157 [82] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuz1=vbuc2 
    ldy screen_idx_14
    lda #0
    sta SCREEN+$28*5,y
    jmp b35
  //SEG158 render_logo::@35
  b35:
  //SEG159 [83] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#14 -- vbuz1=_inc_vbuz1 
    inc screen_idx_5
    jmp b15_from_b35
  //SEG160 render_logo::@14
  b14:
  //SEG161 [84] (byte/signed word/word/dword/signed dword~) render_logo::$23 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuz1=vbuz2_plus_0 
    lda logo_idx_10
    sta _23
  //SEG162 [85] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$23 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _23
    ldy screen_idx_20
    sta SCREEN,y
    jmp b14_1
  //SEG163 render_logo::@14_1
  b14_1:
  //SEG164 [86] (byte/signed word/word/dword/signed dword~) render_logo::$80 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*1
    clc
    adc logo_idx_10
    sta _80
  //SEG165 [87] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$80 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _80
    ldy screen_idx_20
    sta SCREEN+$28*1,y
    jmp b14_2
  //SEG166 render_logo::@14_2
  b14_2:
  //SEG167 [88] (byte/signed word/word/dword/signed dword~) render_logo::$84 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*2
    clc
    adc logo_idx_10
    sta _84
  //SEG168 [89] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$84 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _84
    ldy screen_idx_20
    sta SCREEN+$28*2,y
    jmp b14_3
  //SEG169 render_logo::@14_3
  b14_3:
  //SEG170 [90] (byte/signed word/word/dword/signed dword~) render_logo::$88 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*3
    clc
    adc logo_idx_10
    sta _88
  //SEG171 [91] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$88 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _88
    ldy screen_idx_20
    sta SCREEN+$28*3,y
    jmp b14_4
  //SEG172 render_logo::@14_4
  b14_4:
  //SEG173 [92] (byte/signed word/word/dword/signed dword~) render_logo::$92 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*4
    clc
    adc logo_idx_10
    sta _92
  //SEG174 [93] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$92 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _92
    ldy screen_idx_20
    sta SCREEN+$28*4,y
    jmp b14_5
  //SEG175 render_logo::@14_5
  b14_5:
  //SEG176 [94] (byte/signed word/word/dword/signed dword~) render_logo::$96 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuz1=vbuz2_plus_vbuc1 
    lda #$28*5
    clc
    adc logo_idx_10
    sta _96
  //SEG177 [95] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$96 -- pbuc1_derefidx_vbuz1=vbuz2 
    lda _96
    ldy screen_idx_20
    sta SCREEN+$28*5,y
    jmp b31
  //SEG178 render_logo::@31
  b31:
  //SEG179 [96] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#20 -- vbuz1=_inc_vbuz1 
    inc screen_idx_4
  //SEG180 [97] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10 -- vbuz1=_inc_vbuz1 
    inc logo_idx_3
  //SEG181 [73] phi from render_logo::@31 to render_logo::@11 [phi:render_logo::@31->render_logo::@11]
  b11_from_b31:
  //SEG182 [73] phi (byte) render_logo::screen_idx#20 = (byte) render_logo::screen_idx#4 [phi:render_logo::@31->render_logo::@11#0] -- register_copy 
  //SEG183 [73] phi (byte) render_logo::logo_idx#10 = (byte) render_logo::logo_idx#3 [phi:render_logo::@31->render_logo::@11#1] -- register_copy 
    jmp b11
}
//SEG184 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* zeropage($d) sintab)
sin16s_gen2: {
    .const min = -$140
    .const max = $140
    .label ampl = max-min
    .const offs = min+(ampl>>1)
    .label _5 = $60
    .label _6 = $64
    .label _8 = $66
    .label step = $54
    .label sintab = $d
    .label x = 9
    .label i = $f
  //SEG185 [99] call div32u16u 
  //SEG186 [189] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u]
  div32u16u_from_sin16s_gen2:
    jsr div32u16u
  //SEG187 [100] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 -- vduz1=vduz2 
    lda div32u16u.return
    sta div32u16u.return_2
    lda div32u16u.return+1
    sta div32u16u.return_2+1
    lda div32u16u.return+2
    sta div32u16u.return_2+2
    lda div32u16u.return+3
    sta div32u16u.return_2+3
    jmp b3
  //SEG188 sin16s_gen2::@3
  b3:
  //SEG189 [101] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 -- vduz1=vduz2 
    lda div32u16u.return_2
    sta step
    lda div32u16u.return_2+1
    sta step+1
    lda div32u16u.return_2+2
    sta step+2
    lda div32u16u.return_2+3
    sta step+3
  //SEG190 [102] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1]
  b1_from_b3:
  //SEG191 [102] phi (word) sin16s_gen2::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta i
    lda #>0
    sta i+1
  //SEG192 [102] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[XSIN_SIZE#0]) xsin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- pwsz1=pwsc1 
    lda #<xsin
    sta sintab
    lda #>xsin
    sta sintab+1
  //SEG193 [102] phi (dword) sin16s_gen2::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vduz1=vbuc1 
    lda #0
    sta x
    lda #0
    sta x+1
    sta x+2
    sta x+3
    jmp b1
  // u[4.28]
  //SEG194 [102] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1]
  b1_from_b5:
  //SEG195 [102] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy 
  //SEG196 [102] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy 
  //SEG197 [102] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy 
    jmp b1
  //SEG198 sin16s_gen2::@1
  b1:
  //SEG199 [103] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 
    lda x
    sta sin16s.x
    lda x+1
    sta sin16s.x+1
    lda x+2
    sta sin16s.x+2
    lda x+3
    sta sin16s.x+3
  //SEG200 [104] call sin16s 
    jsr sin16s
  //SEG201 [105] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 -- vwsz1=vwsz2 
    lda sin16s.return_1
    sta sin16s.return
    lda sin16s.return_1+1
    sta sin16s.return+1
    jmp b4
  //SEG202 sin16s_gen2::@4
  b4:
  //SEG203 [106] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 -- vwsz1=vwsz2 
    lda sin16s.return
    sta mul16s.a
    lda sin16s.return+1
    sta mul16s.a+1
  //SEG204 [107] call mul16s 
    jsr mul16s
  //SEG205 [108] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 -- vdsz1=vdsz2 
    lda mul16s.return
    sta mul16s.return_2
    lda mul16s.return+1
    sta mul16s.return_2+1
    lda mul16s.return+2
    sta mul16s.return_2+2
    lda mul16s.return+3
    sta mul16s.return_2+3
    jmp b5
  //SEG206 sin16s_gen2::@5
  b5:
  //SEG207 [109] (signed dword~) sin16s_gen2::$5 ← (signed dword) mul16s::return#2 -- vdsz1=vdsz2 
    lda mul16s.return_2
    sta _5
    lda mul16s.return_2+1
    sta _5+1
    lda mul16s.return_2+2
    sta _5+2
    lda mul16s.return_2+3
    sta _5+3
  //SEG208 [110] (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5 -- vwuz1=_hi_vdsz2 
    lda _5+2
    sta _6
    lda _5+3
    sta _6+1
  //SEG209 [111] (signed word~) sin16s_gen2::$8 ← (const signed word) sin16s_gen2::offs#0 + (signed word)(word~) sin16s_gen2::$6 -- vwsz1=vwsc1_plus_vwsz2 
    lda _6
    clc
    adc #<offs
    sta _8
    lda _6+1
    adc #>offs
    sta _8+1
  //SEG210 [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word~) sin16s_gen2::$8 -- _deref_pwsz1=vwsz2 
    ldy #0
    lda _8
    sta (sintab),y
    iny
    lda _8+1
    sta (sintab),y
  //SEG211 [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 
    lda sintab
    clc
    adc #2
    sta sintab
    bcc !+
    inc sintab+1
  !:
  //SEG212 [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 
    lda x
    clc
    adc step
    sta x
    lda x+1
    adc step+1
    sta x+1
    lda x+2
    adc step+2
    sta x+2
    lda x+3
    adc step+3
    sta x+3
  //SEG213 [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 
    inc i
    bne !+
    inc i+1
  !:
  //SEG214 [116] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@1 -- vwuz1_lt_vwuc1_then_la1 
    lda i+1
    cmp #>XSIN_SIZE
    bcc b1_from_b5
    bne !+
    lda i
    cmp #<XSIN_SIZE
    bcc b1_from_b5
  !:
    jmp breturn
  //SEG215 sin16s_gen2::@return
  breturn:
  //SEG216 [117] return 
    rts
}
//SEG217 mul16s
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage($5a) a)
mul16s: {
    .label _6 = $6c
    .label _16 = $6e
    .label m = $11
    .label return = $70
    .label a = $5a
    .label return_2 = $5c
  //SEG218 [118] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#0 -- vwuz1=vwuz2 
    lda a
    sta mul16u.a
    lda a+1
    sta mul16u.a+1
  //SEG219 [119] call mul16u 
  //SEG220 [129] phi from mul16s to mul16u [phi:mul16s->mul16u]
  mul16u_from_mul16s:
  //SEG221 [129] phi (word) mul16u::a#6 = (word~) mul16u::a#8 [phi:mul16s->mul16u#0] -- register_copy 
  //SEG222 [129] phi (word) mul16u::b#2 = ((word))(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 
    lda #<sin16s_gen2.ampl
    sta mul16u.b
    lda #>sin16s_gen2.ampl
    sta mul16u.b+1
    jsr mul16u
  //SEG223 [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2 -- vduz1=vduz2 
    lda mul16u.res
    sta mul16u.return
    lda mul16u.res+1
    sta mul16u.return+1
    lda mul16u.res+2
    sta mul16u.return+2
    lda mul16u.res+3
    sta mul16u.return+3
    jmp b6
  //SEG224 mul16s::@6
  b6:
  //SEG225 [121] (dword) mul16s::m#0 ← (dword) mul16u::return#2 -- vduz1=vduz2 
    lda mul16u.return
    sta m
    lda mul16u.return+1
    sta m+1
    lda mul16u.return+2
    sta m+2
    lda mul16u.return+3
    sta m+3
  //SEG226 [122] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1 -- vwsz1_ge_0_then_la1 
    lda a+1
    bpl b1_from_b6
    jmp b3
  //SEG227 mul16s::@3
  b3:
  //SEG228 [123] (word~) mul16s::$6 ← > (dword) mul16s::m#0 -- vwuz1=_hi_vduz2 
    lda m+2
    sta _6
    lda m+3
    sta _6+1
  //SEG229 [124] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0 -- vwuz1=vwuz2_minus_vwuc1 
    lda _6
    sec
    sbc #<sin16s_gen2.ampl
    sta _16
    lda _6+1
    sbc #>sin16s_gen2.ampl
    sta _16+1
  //SEG230 [125] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 -- vduz1=vduz1_sethi_vwuz2 
    lda _16
    sta m+2
    lda _16+1
    sta m+3
  //SEG231 [126] phi from mul16s::@3 mul16s::@6 to mul16s::@1 [phi:mul16s::@3/mul16s::@6->mul16s::@1]
  b1_from_b3:
  b1_from_b6:
  //SEG232 [126] phi (dword) mul16s::m#4 = (dword) mul16s::m#1 [phi:mul16s::@3/mul16s::@6->mul16s::@1#0] -- register_copy 
    jmp b1
  //SEG233 mul16s::@1
  b1:
    jmp b2
  //SEG234 mul16s::@2
  b2:
  //SEG235 [127] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4 -- vdsz1=_sdword_vduz2 
    lda m
    sta return
    lda m+1
    sta return+1
    lda m+2
    sta return+2
    lda m+3
    sta return+3
    jmp breturn
  //SEG236 mul16s::@return
  breturn:
  //SEG237 [128] return 
    rts
}
//SEG238 mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($17) a, word zeropage($15) b)
mul16u: {
    .label _1 = $74
    .label mb = $1d
    .label a = $17
    .label res = $19
    .label return = $68
    .label b = $15
    .label return_3 = $95
  //SEG239 [130] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2 -- vduz1=_dword_vwuz2 
    lda b
    sta mb
    lda b+1
    sta mb+1
    lda #0
    sta mb+2
    sta mb+3
  //SEG240 [131] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
  b1_from_mul16u:
  //SEG241 [131] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy 
  //SEG242 [131] phi (dword) mul16u::res#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 
    lda #0
    sta res
    lda #0
    sta res+1
    sta res+2
    sta res+3
  //SEG243 [131] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy 
    jmp b1
  //SEG244 mul16u::@1
  b1:
  //SEG245 [132] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 
    lda a
    bne b2
    lda a+1
    bne b2
    jmp breturn
  //SEG246 mul16u::@return
  breturn:
  //SEG247 [133] return 
    rts
  //SEG248 mul16u::@2
  b2:
  //SEG249 [134] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuz1=vwuz2_band_vbuc1 
    lda a
    and #1
    sta _1
  //SEG250 [135] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 -- vbuz1_eq_0_then_la1 
    lda _1
    cmp #0
    beq b4_from_b2
    jmp b7
  //SEG251 mul16u::@7
  b7:
  //SEG252 [136] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 
    lda res
    clc
    adc mb
    sta res
    lda res+1
    adc mb+1
    sta res+1
    lda res+2
    adc mb+2
    sta res+2
    lda res+3
    adc mb+3
    sta res+3
  //SEG253 [137] phi from mul16u::@2 mul16u::@7 to mul16u::@4 [phi:mul16u::@2/mul16u::@7->mul16u::@4]
  b4_from_b2:
  b4_from_b7:
  //SEG254 [137] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@7->mul16u::@4#0] -- register_copy 
    jmp b4
  //SEG255 mul16u::@4
  b4:
  //SEG256 [138] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_ror_1 
    clc
    ror a+1
    ror a
  //SEG257 [139] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vduz1=vduz1_rol_1 
    asl mb
    rol mb+1
    rol mb+2
    rol mb+3
  //SEG258 [131] phi from mul16u::@4 to mul16u::@1 [phi:mul16u::@4->mul16u::@1]
  b1_from_b4:
  //SEG259 [131] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@4->mul16u::@1#0] -- register_copy 
  //SEG260 [131] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@4->mul16u::@1#1] -- register_copy 
  //SEG261 [131] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@4->mul16u::@1#2] -- register_copy 
    jmp b1
}
//SEG262 sin16s
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range  -$7fff - $7fff
// sin16s(dword zeropage($22) x)
sin16s: {
    .label _6 = $75
    .label x = $22
    .label return = $58
    .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
    .label isUpper = $21
    .label return_5 = $26
  //SEG263 [140] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_u4f28>>$10
    bcc b1_from_sin16s
    bne !+
    lda x+2
    cmp #<PI_u4f28>>$10
    bcc b1_from_sin16s
    bne !+
    lda x+1
    cmp #>PI_u4f28
    bcc b1_from_sin16s
    bne !+
    lda x
    cmp #<PI_u4f28
    bcc b1_from_sin16s
  !:
    jmp b4
  //SEG264 sin16s::@4
  b4:
  //SEG265 [141] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 -- vduz1=vduz1_minus_vduc1 
    lda x
    sec
    sbc #<PI_u4f28
    sta x
    lda x+1
    sbc #>PI_u4f28
    sta x+1
    lda x+2
    sbc #<PI_u4f28>>$10
    sta x+2
    lda x+3
    sbc #>PI_u4f28>>$10
    sta x+3
  //SEG266 [142] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
  b1_from_b4:
  //SEG267 [142] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #1
    sta isUpper
  //SEG268 [142] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG269 [142] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
  b1_from_sin16s:
  //SEG270 [142] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta isUpper
  //SEG271 [142] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG272 sin16s::@1
  b1:
  //SEG273 [143] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_HALF_u4f28>>$10
    bcc b2_from_b1
    bne !+
    lda x+2
    cmp #<PI_HALF_u4f28>>$10
    bcc b2_from_b1
    bne !+
    lda x+1
    cmp #>PI_HALF_u4f28
    bcc b2_from_b1
    bne !+
    lda x
    cmp #<PI_HALF_u4f28
    bcc b2_from_b1
  !:
    jmp b5
  //SEG274 sin16s::@5
  b5:
  //SEG275 [144] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 
    lda #<PI_u4f28
    sec
    sbc x
    sta x
    lda #>PI_u4f28
    sbc x+1
    sta x+1
    lda #<PI_u4f28>>$10
    sbc x+2
    sta x+2
    lda #>PI_u4f28>>$10
    sbc x+3
    sta x+3
  //SEG276 [145] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2]
  b2_from_b1:
  b2_from_b5:
  //SEG277 [145] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy 
    jmp b2
  //SEG278 sin16s::@2
  b2:
  //SEG279 [146] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vduz1=vduz2_rol_3 
    lda x
    sta _6
    lda x+1
    sta _6+1
    lda x+2
    sta _6+2
    lda x+3
    sta _6+3
    ldy #3
  !:
    asl _6
    rol _6+1
    rol _6+2
    rol _6+3
    dey
    bne !-
  //SEG280 [147] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 -- vwuz1=_hi_vduz2 
    lda _6+2
    sta x1
    lda _6+3
    sta x1+1
  //SEG281 [148] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v1
    lda x1+1
    sta mulu16_sel.v1+1
  //SEG282 [149] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG283 [150] call mulu16_sel 
  //SEG284 [180] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel]
  mulu16_sel_from_b2:
  //SEG285 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #0
    sta mulu16_sel.select
  //SEG286 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy 
  //SEG287 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG288 [151] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return+1
    jmp b8
  //SEG289 sin16s::@8
  b8:
  //SEG290 [152] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta x2
    lda mulu16_sel.return+1
    sta x2+1
  //SEG291 [153] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0 -- vwuz1=vwuz2 
    lda x2
    sta mulu16_sel.v1
    lda x2+1
    sta mulu16_sel.v1+1
  //SEG292 [154] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG293 [155] call mulu16_sel 
  //SEG294 [180] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel]
  mulu16_sel_from_b8:
  //SEG295 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #1
    sta mulu16_sel.select
  //SEG296 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@8->mulu16_sel#1] -- register_copy 
  //SEG297 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@8->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG298 [156] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return_1
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return_1+1
    jmp b9
  //SEG299 sin16s::@9
  b9:
  //SEG300 [157] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 -- vwuz1=vwuz2 
    lda mulu16_sel.return_1
    sta x3
    lda mulu16_sel.return_1+1
    sta x3+1
  //SEG301 [158] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 
    lda x3
    sta mulu16_sel.v1
    lda x3+1
    sta mulu16_sel.v1+1
  //SEG302 [159] call mulu16_sel 
  //SEG303 [180] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel]
  mulu16_sel_from_b9:
  //SEG304 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #1
    sta mulu16_sel.select
  //SEG305 [180] phi (word) mulu16_sel::v2#5 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 [phi:sin16s::@9->mulu16_sel#1] -- vwuz1=vwuc1 
    lda #<$10000/6
    sta mulu16_sel.v2
    lda #>$10000/6
    sta mulu16_sel.v2+1
  //SEG306 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@9->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG307 [160] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return_2
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return_2+1
    jmp b10
  //SEG308 sin16s::@10
  b10:
  //SEG309 [161] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2 -- vwuz1=vwuz2 
    lda mulu16_sel.return_2
    sta x3_6
    lda mulu16_sel.return_2+1
    sta x3_6+1
  //SEG310 [162] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 
    lda x1
    sec
    sbc x3_6
    sta usinx
    lda x1+1
    sbc x3_6+1
    sta usinx+1
  //SEG311 [163] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0 -- vwuz1=vwuz2 
    lda x3
    sta mulu16_sel.v1
    lda x3+1
    sta mulu16_sel.v1+1
  //SEG312 [164] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG313 [165] call mulu16_sel 
  //SEG314 [180] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel]
  mulu16_sel_from_b10:
  //SEG315 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #0
    sta mulu16_sel.select
  //SEG316 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@10->mulu16_sel#1] -- register_copy 
  //SEG317 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@10->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG318 [166] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return_10
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return_10+1
    jmp b11
  //SEG319 sin16s::@11
  b11:
  //SEG320 [167] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10 -- vwuz1=vwuz2 
    lda mulu16_sel.return_10
    sta x4
    lda mulu16_sel.return_10+1
    sta x4+1
  //SEG321 [168] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0 -- vwuz1=vwuz2 
    lda x4
    sta mulu16_sel.v1
    lda x4+1
    sta mulu16_sel.v1+1
  //SEG322 [169] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG323 [170] call mulu16_sel 
  //SEG324 [180] phi from sin16s::@11 to mulu16_sel [phi:sin16s::@11->mulu16_sel]
  mulu16_sel_from_b11:
  //SEG325 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mulu16_sel#0] -- vbuz1=vbuc1 
    lda #0
    sta mulu16_sel.select
  //SEG326 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@11->mulu16_sel#1] -- register_copy 
  //SEG327 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@11->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG328 [171] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return_12
    sta mulu16_sel.return_11
    lda mulu16_sel.return_12+1
    sta mulu16_sel.return_11+1
    jmp b12
  //SEG329 sin16s::@12
  b12:
  //SEG330 [172] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 -- vwuz1=vwuz2 
    lda mulu16_sel.return_11
    sta x5
    lda mulu16_sel.return_11+1
    sta x5+1
  //SEG331 [173] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vwuz1=vwuz2_ror_4 
    lda x5+1
    sta x5_128+1
    lda x5
    sta x5_128
    ldy #4
  !:
    lsr x5_128+1
    ror x5_128
    dey
    bne !-
  //SEG332 [174] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz2_plus_vwuz3 
    lda usinx
    clc
    adc x5_128
    sta usinx_1
    lda usinx+1
    adc x5_128+1
    sta usinx_1+1
  //SEG333 [175] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15 -- vbuz1_eq_0_then_la1 
    lda isUpper
    cmp #0
    beq b15
    jmp b6
  //SEG334 sin16s::@6
  b6:
  //SEG335 [176] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz2 
    sec
    lda usinx_1
    eor #$ff
    adc #0
    sta sinx
    lda usinx_1+1
    eor #$ff
    adc #0
    sta sinx+1
  //SEG336 [177] phi from sin16s::@15 sin16s::@6 to sin16s::@3 [phi:sin16s::@15/sin16s::@6->sin16s::@3]
  b3_from_b15:
  b3_from_b6:
  //SEG337 [177] phi (signed word) sin16s::return#1 = (signed word~) sin16s::return#5 [phi:sin16s::@15/sin16s::@6->sin16s::@3#0] -- register_copy 
    jmp b3
  //SEG338 sin16s::@3
  b3:
    jmp breturn
  //SEG339 sin16s::@return
  breturn:
  //SEG340 [178] return 
    rts
  //SEG341 sin16s::@15
  b15:
  //SEG342 [179] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 -- vwsz1=vwsz2 
    lda usinx_1
    sta return_5
    lda usinx_1+1
    sta return_5+1
    jmp b3_from_b15
}
//SEG343 mulu16_sel
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($28) v1, word zeropage($2a) v2, byte zeropage($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_10 = $89
    .label return_11 = $8d
    .label select = $2c
    .label return_12 = $a1
  //SEG344 [181] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 
    lda v1
    sta mul16u.a
    lda v1+1
    sta mul16u.a+1
  //SEG345 [182] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5 -- vwuz1=vwuz2 
    lda v2
    sta mul16u.b
    lda v2+1
    sta mul16u.b+1
  //SEG346 [183] call mul16u 
  //SEG347 [129] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u]
  mul16u_from_mulu16_sel:
  //SEG348 [129] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy 
  //SEG349 [129] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy 
    jsr mul16u
  //SEG350 [184] (dword) mul16u::return#3 ← (dword) mul16u::res#2 -- vduz1=vduz2 
    lda mul16u.res
    sta mul16u.return_3
    lda mul16u.res+1
    sta mul16u.return_3+1
    lda mul16u.res+2
    sta mul16u.return_3+2
    lda mul16u.res+3
    sta mul16u.return_3+3
    jmp b2
  //SEG351 mulu16_sel::@2
  b2:
  //SEG352 [185] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 -- vduz1=vduz2 
    lda mul16u.return_3
    sta _0
    lda mul16u.return_3+1
    sta _0+1
    lda mul16u.return_3+2
    sta _0+2
    lda mul16u.return_3+3
    sta _0+3
  //SEG353 [186] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz2_rol_vbuz3 
    lda _0
    sta _1
    lda _0+1
    sta _1+1
    lda _0+2
    sta _1+2
    lda _0+3
    sta _1+3
    ldx select
    beq !e+
  !:
    asl _1
    rol _1+1
    rol _1+2
    rol _1+3
    dex
    bne !-
  !e:
  //SEG354 [187] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 
    lda _1+2
    sta return_12
    lda _1+3
    sta return_12+1
    jmp breturn
  //SEG355 mulu16_sel::@return
  breturn:
  //SEG356 [188] return 
    rts
}
//SEG357 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_2 = $50
  //SEG358 [190] call divr16u 
  //SEG359 [199] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
  divr16u_from_div32u16u:
  //SEG360 [199] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28#0 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28>>$10
    sta divr16u.dividend
    lda #>PI2_u4f28>>$10
    sta divr16u.dividend+1
  //SEG361 [199] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 
    lda #<0
    sta divr16u.rem
    lda #>0
    sta divr16u.rem+1
    jsr divr16u
  //SEG362 [191] (word) divr16u::return#2 ← (word) divr16u::return#0 -- vwuz1=vwuz2 
    lda divr16u.return
    sta divr16u.return_2
    lda divr16u.return+1
    sta divr16u.return_2+1
    jmp b2
  //SEG363 div32u16u::@2
  b2:
  //SEG364 [192] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 
    lda divr16u.return_2
    sta quotient_hi
    lda divr16u.return_2+1
    sta quotient_hi+1
  //SEG365 [193] (word) divr16u::rem#4 ← (word) rem16u#1 -- vwuz1=vwuz2 
    lda rem16u
    sta divr16u.rem
    lda rem16u+1
    sta divr16u.rem+1
  //SEG366 [194] call divr16u 
  //SEG367 [199] phi from div32u16u::@2 to divr16u [phi:div32u16u::@2->divr16u]
  divr16u_from_b2:
  //SEG368 [199] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28#0 [phi:div32u16u::@2->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28&$ffff
    sta divr16u.dividend
    lda #>PI2_u4f28&$ffff
    sta divr16u.dividend+1
  //SEG369 [199] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@2->divr16u#1] -- register_copy 
    jsr divr16u
  //SEG370 [195] (word) divr16u::return#3 ← (word) divr16u::return#0 -- vwuz1=vwuz2 
    lda divr16u.return
    sta divr16u.return_3
    lda divr16u.return+1
    sta divr16u.return_3+1
    jmp b3
  //SEG371 div32u16u::@3
  b3:
  //SEG372 [196] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 -- vwuz1=vwuz2 
    lda divr16u.return_3
    sta quotient_lo
    lda divr16u.return_3+1
    sta quotient_lo+1
  //SEG373 [197] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 
    lda quotient_hi
    sta return+2
    lda quotient_hi+1
    sta return+3
    lda quotient_lo
    sta return
    lda quotient_lo+1
    sta return+1
    jmp breturn
  //SEG374 div32u16u::@return
  breturn:
  //SEG375 [198] return 
    rts
}
//SEG376 divr16u
// Performs division on two 16 bit unsigned words and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($2f) dividend, word zeropage($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_2 = $a3
    .label return_3 = $a7
  //SEG377 [200] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
  b1_from_divr16u:
  //SEG378 [200] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta i
  //SEG379 [200] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 
    lda #<0
    sta quotient
    lda #>0
    sta quotient+1
  //SEG380 [200] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy 
  //SEG381 [200] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy 
    jmp b1
  //SEG382 [200] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
  b1_from_b3:
  //SEG383 [200] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
  //SEG384 [200] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
  //SEG385 [200] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
  //SEG386 [200] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
    jmp b1
  //SEG387 divr16u::@1
  b1:
  //SEG388 [201] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl rem
    rol rem+1
  //SEG389 [202] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuz1=_hi_vwuz2 
    lda dividend+1
    sta _1
  //SEG390 [203] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 -- vbuz1=vbuz2_band_vbuc1 
    lda #$80
    and _1
    sta _2
  //SEG391 [204] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 -- vbuz1_eq_0_then_la1 
    lda _2
    cmp #0
    beq b2_from_b1
    jmp b4
  //SEG392 divr16u::@4
  b4:
  //SEG393 [205] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora rem
    sta rem
  //SEG394 [206] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
  b2_from_b1:
  b2_from_b4:
  //SEG395 [206] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
    jmp b2
  //SEG396 divr16u::@2
  b2:
  //SEG397 [207] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl dividend
    rol dividend+1
  //SEG398 [208] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl quotient
    rol quotient+1
  //SEG399 [209] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 
    lda rem+1
    cmp #>XSIN_SIZE
    bcc b3_from_b2
    bne !+
    lda rem
    cmp #<XSIN_SIZE
    bcc b3_from_b2
  !:
    jmp b5
  //SEG400 divr16u::@5
  b5:
  //SEG401 [210] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc quotient
    bne !+
    inc quotient+1
  !:
  //SEG402 [211] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda rem
    sec
    sbc #<XSIN_SIZE
    sta rem
    lda rem+1
    sbc #>XSIN_SIZE
    sta rem+1
  //SEG403 [212] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
  b3_from_b2:
  b3_from_b5:
  //SEG404 [212] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
  //SEG405 [212] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
    jmp b3
  //SEG406 divr16u::@3
  b3:
  //SEG407 [213] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuz1=_inc_vbuz1 
    inc i
  //SEG408 [214] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda i
    cmp #$10
    bne b1_from_b3
    jmp b6
  //SEG409 divr16u::@6
  b6:
  //SEG410 [215] (word) rem16u#1 ← (word) divr16u::rem#11 -- vwuz1=vwuz2 
    lda rem
    sta rem16u
    lda rem+1
    sta rem16u+1
    jmp breturn
  //SEG411 divr16u::@return
  breturn:
  //SEG412 [216] return 
    rts
}
//SEG413 fill
// Fill some memory with a value
// fill(byte zeropage($34) val)
fill: {
    .label end = $b3
    .label addr = $35
    .label val = $34
  //SEG414 [218] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000 -- pbuz1=pbuz2_plus_vwuc1 
    lda addr
    clc
    adc #<$3e8
    sta end
    lda addr+1
    adc #>$3e8
    sta end+1
  //SEG415 [219] phi from fill fill::@1 to fill::@1 [phi:fill/fill::@1->fill::@1]
  b1_from_fill:
  b1_from_b1:
  //SEG416 [219] phi (byte*) fill::addr#2 = (byte*) fill::addr#0 [phi:fill/fill::@1->fill::@1#0] -- register_copy 
    jmp b1
  //SEG417 fill::@1
  b1:
  //SEG418 [220] *((byte*) fill::addr#2) ← (byte) fill::val#3 -- _deref_pbuz1=vbuz2 
    lda val
    ldy #0
    sta (addr),y
  //SEG419 [221] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2 -- pbuz1=_inc_pbuz1 
    inc addr
    bne !+
    inc addr+1
  !:
  //SEG420 [222] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1 -- pbuz1_neq_pbuz2_then_la1 
    lda addr+1
    cmp end+1
    bne b1_from_b1
    lda addr
    cmp end
    bne b1_from_b1
    jmp breturn
  //SEG421 fill::@return
  breturn:
  //SEG422 [223] return 
    rts
}
  .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#0) ← (const byte) WHITE#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [7] *((const byte*) BGCOL2#0) ← (const byte) DARK_GREY#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [8] *((const byte*) BGCOL#0) ← *((const byte*) BGCOL2#0) [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) BGCOL3#0) ← (const byte) BLACK#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) D016#0) ← (const byte) VIC_MCM#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 [ xsin_idx#11 ] ( main:3::loop:23 [ xsin_idx#11 ] ) always clobbers reg byte a 
Statement [29] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word) xsin_idx#11 [ xsin_idx#11 loop::$1 ] ( main:3::loop:23 [ xsin_idx#11 loop::$1 ] ) always clobbers reg byte a 
Statement [30] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) [ 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 [31] (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 [33] (word) xsin_idx#3 ← (word) xsin_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ xsin_idx#3 ] ( main:3::loop:23 [ xsin_idx#3 ] ) always clobbers reg byte a 
Statement [34] if((word) xsin_idx#3!=(const word) XSIN_SIZE#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto loop::@16 [ xsin_idx#3 ] ( main:3::loop:23 [ xsin_idx#3 ] ) always clobbers reg byte a 
Statement [38] (byte~) render_logo::$0 ← ((byte)) (signed word) render_logo::xpos#0 [ render_logo::xpos#0 render_logo::$0 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::$0 ] ) always clobbers reg byte a 
Statement [39] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ render_logo::xpos#0 render_logo::$1 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::$1 ] ) always clobbers reg byte a 
Statement [40] (byte~) render_logo::$2 ← (const byte) VIC_MCM#0 | (byte~) render_logo::$1 [ render_logo::xpos#0 render_logo::$2 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::$2 ] ) always clobbers reg byte a 
Statement [42] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ render_logo::xpos#0 render_logo::$3 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::$3 ] ) always clobbers reg byte a 
Statement [43] (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:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::x_char#0 ] ) always clobbers reg byte a 
Statement [44] if((signed word) render_logo::xpos#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_logo::@1 [ render_logo::x_char#0 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:66 [ render_logo::x_char#0 ]
Statement [52] (byte/signed word/word/dword/signed dword~) render_logo::$34 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$34 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$34 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ render_logo::logo_idx#11 render_logo::logo_idx#2 ]
Statement [54] (byte/signed word/word/dword/signed dword~) render_logo::$38 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$38 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$38 ] ) always clobbers reg byte a 
Statement [56] (byte/signed word/word/dword/signed dword~) render_logo::$42 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$42 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$42 ] ) always clobbers reg byte a 
Statement [58] (byte/signed word/word/dword/signed dword~) render_logo::$46 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$46 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$46 ] ) always clobbers reg byte a 
Statement [60] (byte/signed word/word/dword/signed dword~) render_logo::$50 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$50 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$50 ] ) always clobbers reg byte a 
Statement [64] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [65] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [66] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [67] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [68] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [69] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [71] (signed byte~) render_logo::$17 ← - (signed byte) render_logo::x_char#0 [ render_logo::$17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::$17 ] ) always clobbers reg byte a 
Statement [77] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ]
Statement [78] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [79] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [80] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [81] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [82] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [86] (byte/signed word/word/dword/signed dword~) render_logo::$80 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$80 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$80 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ]
Statement [88] (byte/signed word/word/dword/signed dword~) render_logo::$84 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$84 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$84 ] ) always clobbers reg byte a 
Statement [90] (byte/signed word/word/dword/signed dword~) render_logo::$88 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$88 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$88 ] ) always clobbers reg byte a 
Statement [92] (byte/signed word/word/dword/signed dword~) render_logo::$92 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$92 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$92 ] ) always clobbers reg byte a 
Statement [94] (byte/signed word/word/dword/signed dword~) render_logo::$96 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$96 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$96 ] ) always clobbers reg byte a 
Statement [100] (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 [101] (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 [103] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [105] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#0 ] ) always clobbers reg byte a 
Statement [106] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 ] ) always clobbers reg byte a 
Statement [108] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#2 ] ) always clobbers reg byte a 
Statement [109] (signed dword~) sin16s_gen2::$5 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$5 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$5 ] ) always clobbers reg byte a 
Statement [110] (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$6 ] ) always clobbers reg byte a 
Statement [111] (signed word~) sin16s_gen2::$8 ← (const signed word) sin16s_gen2::offs#0 + (signed word)(word~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$8 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$8 ] ) always clobbers reg byte a 
Statement [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word~) sin16s_gen2::$8 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::i#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::i#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] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@1 [ sin16s_gen2::step#0 sin16s_gen2::x#1 sin16s_gen2::sintab#0 sin16s_gen2::i#1 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#1 sin16s_gen2::sintab#0 sin16s_gen2::i#1 ] ) always clobbers reg byte a 
Statement [118] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#8 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::a#8 ] ) always clobbers reg byte a 
Statement [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a 
Statement [121] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a 
Statement [122] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#0 ] ) always clobbers reg byte a 
Statement [123] (word~) mul16s::$6 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$6 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#0 mul16s::$6 ] ) always clobbers reg byte a 
Statement [124] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a 
Statement [125] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#1 ] ) always clobbers reg byte a 
Statement [127] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#0 ] ) always clobbers reg byte a 
Statement [130] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::sin16s_gen2:21::mul16s:107::mul16u:119 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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 ZP_BYTE:33 [ sin16s::isUpper#2 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:44 [ mulu16_sel::select#5 ]
Statement [132] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:107::mul16u:119 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:155::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:159::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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 [134] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:107::mul16u:119 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:155::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:159::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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 [136] (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:107::mul16u:119 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:155::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:159::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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 [140] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [141] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#1 ] ) always clobbers reg byte a 
Statement [143] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a 
Statement [144] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a 
Statement [146] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ sin16s::isUpper#2 sin16s::$6 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::$6 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:33 [ sin16s::isUpper#2 ]
Statement [147] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a 
Statement [148] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a 
Statement [149] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a 
Statement [151] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a 
Statement [152] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a 
Statement [153] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a 
Statement [154] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a 
Statement [156] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a 
Statement [157] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a 
Statement [158] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a 
Statement [160] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a 
Statement [161] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a 
Statement [162] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a 
Statement [163] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a 
Statement [164] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a 
Statement [166] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a 
Statement [167] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a 
Statement [168] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a 
Statement [169] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a 
Statement [171] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a 
Statement [172] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a 
Statement [173] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a reg byte y 
Statement [174] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a 
Statement [176] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::sinx#1 ] ) always clobbers reg byte a 
Statement [179] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#5 ] ) always clobbers reg byte a 
Statement [181] (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:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a 
Statement [182] (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:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a 
Statement [184] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a 
Statement [185] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a 
Statement [186] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a 
Statement [187] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a 
Statement [191] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a 
Statement [192] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [193] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a 
Statement [195] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a 
Statement [196] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a 
Statement [197] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::return#0 ] ) always clobbers reg byte a 
Statement [202] (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:99::divr16u:190 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ divr16u::i#2 divr16u::i#1 ]
Statement [203] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a 
Statement [205] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a 
Statement [209] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a 
Statement [211] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a 
Statement [215] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [218] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000 [ fill::addr#0 fill::val#3 fill::end#0 ] ( main:3::fill:13 [ fill::addr#0 fill::val#3 fill::end#0 ] main:3::fill:15 [ fill::addr#0 fill::val#3 fill::end#0 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ fill::val#3 ]
Statement [220] *((byte*) fill::addr#2) ← (byte) fill::val#3 [ fill::val#3 fill::end#0 fill::addr#2 ] ( main:3::fill:13 [ fill::val#3 fill::end#0 fill::addr#2 ] main:3::fill:15 [ fill::val#3 fill::end#0 fill::addr#2 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:52 [ fill::val#3 ]
Statement [222] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1 [ fill::val#3 fill::end#0 fill::addr#1 ] ( main:3::fill:13 [ fill::val#3 fill::end#0 fill::addr#1 ] main:3::fill:15 [ fill::val#3 fill::end#0 fill::addr#1 ] ) always clobbers reg byte a 
Statement [6] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [7] *((const byte*) BGCOL2#0) ← (const byte) DARK_GREY#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [8] *((const byte*) BGCOL#0) ← *((const byte*) BGCOL2#0) [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) BGCOL3#0) ← (const byte) BLACK#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) D016#0) ← (const byte) VIC_MCM#0 [ ] ( main:3 [ ] ) always clobbers reg byte a 
Statement [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 [ xsin_idx#11 ] ( main:3::loop:23 [ xsin_idx#11 ] ) always clobbers reg byte a 
Statement [29] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word) xsin_idx#11 [ xsin_idx#11 loop::$1 ] ( main:3::loop:23 [ xsin_idx#11 loop::$1 ] ) always clobbers reg byte a 
Statement [30] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) [ 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 [31] (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 [33] (word) xsin_idx#3 ← (word) xsin_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ xsin_idx#3 ] ( main:3::loop:23 [ xsin_idx#3 ] ) always clobbers reg byte a 
Statement [34] if((word) xsin_idx#3!=(const word) XSIN_SIZE#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto loop::@16 [ xsin_idx#3 ] ( main:3::loop:23 [ xsin_idx#3 ] ) always clobbers reg byte a 
Statement [38] (byte~) render_logo::$0 ← ((byte)) (signed word) render_logo::xpos#0 [ render_logo::xpos#0 render_logo::$0 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::$0 ] ) always clobbers reg byte a 
Statement [39] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ render_logo::xpos#0 render_logo::$1 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::$1 ] ) always clobbers reg byte a 
Statement [40] (byte~) render_logo::$2 ← (const byte) VIC_MCM#0 | (byte~) render_logo::$1 [ render_logo::xpos#0 render_logo::$2 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::$2 ] ) always clobbers reg byte a 
Statement [42] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte/signed byte/word/signed word/dword/signed dword) 3 [ render_logo::xpos#0 render_logo::$3 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::$3 ] ) always clobbers reg byte a 
Statement [43] (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:32 [ xsin_idx#11 render_logo::xpos#0 render_logo::x_char#0 ] ) always clobbers reg byte a 
Statement [44] if((signed word) render_logo::xpos#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_logo::@1 [ render_logo::x_char#0 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 ] ) always clobbers reg byte a 
Statement [50] (byte/signed word/word/dword/signed dword~) render_logo::$15 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$15 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$15 ] ) always clobbers reg byte a 
Statement [52] (byte/signed word/word/dword/signed dword~) render_logo::$34 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$34 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$34 ] ) always clobbers reg byte a 
Statement [54] (byte/signed word/word/dword/signed dword~) render_logo::$38 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$38 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$38 ] ) always clobbers reg byte a 
Statement [56] (byte/signed word/word/dword/signed dword~) render_logo::$42 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$42 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$42 ] ) always clobbers reg byte a 
Statement [58] (byte/signed word/word/dword/signed dword~) render_logo::$46 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$46 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$46 ] ) always clobbers reg byte a 
Statement [60] (byte/signed word/word/dword/signed dword~) render_logo::$50 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 [ render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$50 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#19 render_logo::logo_idx#11 render_logo::$50 ] ) always clobbers reg byte a 
Statement [64] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [65] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [66] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [67] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [68] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [69] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::x_char#0 render_logo::screen_idx#17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::x_char#0 render_logo::screen_idx#17 ] ) always clobbers reg byte a 
Statement [71] (signed byte~) render_logo::$17 ← - (signed byte) render_logo::x_char#0 [ render_logo::$17 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::$17 ] ) always clobbers reg byte a 
Statement [77] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [78] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [79] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [80] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [81] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [82] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::screen_idx#14 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::screen_idx#14 ] ) always clobbers reg byte a 
Statement [84] (byte/signed word/word/dword/signed dword~) render_logo::$23 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 0 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$23 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$23 ] ) always clobbers reg byte a 
Statement [86] (byte/signed word/word/dword/signed dword~) render_logo::$80 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$80 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$80 ] ) always clobbers reg byte a 
Statement [88] (byte/signed word/word/dword/signed dword~) render_logo::$84 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$84 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$84 ] ) always clobbers reg byte a 
Statement [90] (byte/signed word/word/dword/signed dword~) render_logo::$88 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$88 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$88 ] ) always clobbers reg byte a 
Statement [92] (byte/signed word/word/dword/signed dword~) render_logo::$92 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$92 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$92 ] ) always clobbers reg byte a 
Statement [94] (byte/signed word/word/dword/signed dword~) render_logo::$96 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 [ render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$96 ] ( main:3::loop:23::render_logo:32 [ xsin_idx#11 render_logo::logo_idx#10 render_logo::screen_idx#20 render_logo::$96 ] ) always clobbers reg byte a 
Statement [100] (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 [101] (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 [103] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [105] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#0 ] ) always clobbers reg byte a 
Statement [106] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 ] ) always clobbers reg byte a 
Statement [108] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#2 ] ) always clobbers reg byte a 
Statement [109] (signed dword~) sin16s_gen2::$5 ← (signed dword) mul16s::return#2 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$5 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$5 ] ) always clobbers reg byte a 
Statement [110] (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$6 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$6 ] ) always clobbers reg byte a 
Statement [111] (signed word~) sin16s_gen2::$8 ← (const signed word) sin16s_gen2::offs#0 + (signed word)(word~) sin16s_gen2::$6 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$8 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s_gen2::$8 ] ) always clobbers reg byte a 
Statement [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word~) sin16s_gen2::$8 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 ] ) always clobbers reg byte a reg byte y 
Statement [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::i#2 sin16s_gen2::sintab#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::i#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] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@1 [ sin16s_gen2::step#0 sin16s_gen2::x#1 sin16s_gen2::sintab#0 sin16s_gen2::i#1 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#1 sin16s_gen2::sintab#0 sin16s_gen2::i#1 ] ) always clobbers reg byte a 
Statement [118] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#8 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::a#8 ] ) always clobbers reg byte a 
Statement [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::return#2 ] ) always clobbers reg byte a 
Statement [121] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16s::m#0 ] ) always clobbers reg byte a 
Statement [122] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1 [ mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#0 ] ) always clobbers reg byte a 
Statement [123] (word~) mul16s::$6 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$6 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#0 mul16s::$6 ] ) always clobbers reg byte a 
Statement [124] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0 [ mul16s::m#0 mul16s::$16 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#0 mul16s::$16 ] ) always clobbers reg byte a 
Statement [125] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#1 ] ) always clobbers reg byte a 
Statement [127] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:107 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#0 ] ) always clobbers reg byte a 
Statement [130] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::sin16s_gen2:21::mul16s:107::mul16u:119 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::a#6 mul16u::mb#0 ] ) always clobbers reg byte a 
Statement [132] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:107::mul16u:119 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:155::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:159::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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 [134] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] ( main:3::sin16s_gen2:21::mul16s:107::mul16u:119 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:155::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:159::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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 [136] (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:107::mul16u:119 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:155::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:159::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170::mul16u:183 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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 [140] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#0 ] ) always clobbers reg byte a 
Statement [141] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#1 ] ) always clobbers reg byte a 
Statement [143] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a 
Statement [144] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a 
Statement [146] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 [ sin16s::isUpper#2 sin16s::$6 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::$6 ] ) always clobbers reg byte a reg byte y 
Statement [147] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a 
Statement [148] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a 
Statement [149] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a 
Statement [151] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#0 ] ) always clobbers reg byte a 
Statement [152] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ) always clobbers reg byte a 
Statement [153] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 ] ) always clobbers reg byte a 
Statement [154] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#1 mulu16_sel::v2#1 ] ) always clobbers reg byte a 
Statement [156] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#1 ] ) always clobbers reg byte a 
Statement [157] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ) always clobbers reg byte a 
Statement [158] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::v1#2 ] ) always clobbers reg byte a 
Statement [160] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#2 ] ) always clobbers reg byte a 
Statement [161] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::x3_6#0 ] ) always clobbers reg byte a 
Statement [162] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 sin16s::usinx#0 ] ) always clobbers reg byte a 
Statement [163] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 ] ) always clobbers reg byte a 
Statement [164] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#3 mulu16_sel::v2#3 ] ) always clobbers reg byte a 
Statement [166] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#10 ] ) always clobbers reg byte a 
Statement [167] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 sin16s::x4#0 ] ) always clobbers reg byte a 
Statement [168] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::v1#4 ] ) always clobbers reg byte a 
Statement [169] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::v1#4 mulu16_sel::v2#4 ] ) always clobbers reg byte a 
Statement [171] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#11 ] ) always clobbers reg byte a 
Statement [172] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ) always clobbers reg byte a 
Statement [173] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5_128#0 ] ) always clobbers reg byte a reg byte y 
Statement [174] (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:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#1 ] ) always clobbers reg byte a 
Statement [176] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::sinx#1 ] ) always clobbers reg byte a 
Statement [179] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:104 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#5 ] ) always clobbers reg byte a 
Statement [181] (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:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::a#2 mulu16_sel::v2#5 mulu16_sel::select#5 ] ) always clobbers reg byte a 
Statement [182] (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:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#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:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::b#1 mul16u::a#2 mulu16_sel::select#5 ] ) always clobbers reg byte a 
Statement [184] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mul16u::return#3 ] ) always clobbers reg byte a 
Statement [185] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::select#5 mulu16_sel::$0 ] ) always clobbers reg byte a 
Statement [186] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::$1 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::$1 ] ) always clobbers reg byte a 
Statement [187] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:150 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:155 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:159 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:165 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 sin16s::usinx#0 mulu16_sel::return#12 ] main:3::sin16s_gen2:21::sin16s:104::mulu16_sel:170 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mulu16_sel::return#12 ] ) always clobbers reg byte a 
Statement [191] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ divr16u::return#2 rem16u#1 ] ) always clobbers reg byte a 
Statement [192] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::quotient_hi#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [193] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ) always clobbers reg byte a 
Statement [195] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ) always clobbers reg byte a 
Statement [196] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ) always clobbers reg byte a 
Statement [197] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:99 [ div32u16u::return#0 ] ) always clobbers reg byte a 
Statement [202] (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:99::divr16u:190 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ 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] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a 
Statement [205] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a 
Statement [209] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ) always clobbers reg byte a 
Statement [211] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a 
Statement [215] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:99::divr16u:190 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:99::divr16u:194 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] ) always clobbers reg byte a 
Statement [218] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000 [ fill::addr#0 fill::val#3 fill::end#0 ] ( main:3::fill:13 [ fill::addr#0 fill::val#3 fill::end#0 ] main:3::fill:15 [ fill::addr#0 fill::val#3 fill::end#0 ] ) always clobbers reg byte a 
Statement [220] *((byte*) fill::addr#2) ← (byte) fill::val#3 [ fill::val#3 fill::end#0 fill::addr#2 ] ( main:3::fill:13 [ fill::val#3 fill::end#0 fill::addr#2 ] main:3::fill:15 [ fill::val#3 fill::end#0 fill::addr#2 ] ) always clobbers reg byte a reg byte y 
Statement [222] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1 [ fill::val#3 fill::end#0 fill::addr#1 ] ( main:3::fill:13 [ fill::val#3 fill::end#0 fill::addr#1 ] main:3::fill:15 [ fill::val#3 fill::end#0 fill::addr#1 ] ) always clobbers reg byte a 
Potential registers zp ZP_BYTE:2 [ main::ch#2 main::ch#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] : zp ZP_WORD:3 , 
Potential registers zp ZP_BYTE:5 [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:6 [ render_logo::logo_idx#11 render_logo::logo_idx#2 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:7 [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:8 [ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , 
Potential registers zp ZP_DWORD:9 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] : zp ZP_DWORD:9 , 
Potential registers zp ZP_WORD:13 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] : zp ZP_WORD:13 , 
Potential registers zp ZP_WORD:15 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] : zp ZP_WORD:15 , 
Potential registers zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] : zp ZP_DWORD:17 , 
Potential registers zp ZP_WORD:21 [ mul16u::b#2 mul16u::b#1 ] : zp ZP_WORD:21 , 
Potential registers zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] : zp ZP_WORD:23 , 
Potential registers zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] : zp ZP_DWORD:25 , 
Potential registers zp ZP_DWORD:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] : zp ZP_DWORD:29 , 
Potential registers zp ZP_BYTE:33 [ sin16s::isUpper#2 ] : zp ZP_BYTE:33 , reg byte x , 
Potential registers zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp ZP_DWORD:34 , 
Potential registers zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp ZP_WORD:38 , 
Potential registers zp ZP_WORD: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 ZP_WORD:40 , 
Potential registers zp ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] : zp ZP_WORD:42 , 
Potential registers zp ZP_BYTE:44 [ mulu16_sel::select#5 ] : zp ZP_BYTE:44 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD: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 ZP_WORD:45 , 
Potential registers zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] : zp ZP_WORD:47 , 
Potential registers zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:49 , 
Potential registers zp ZP_BYTE:51 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:51 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:52 [ fill::val#3 ] : zp ZP_BYTE:52 , reg byte x , 
Potential registers zp ZP_WORD:53 [ fill::addr#2 fill::addr#0 fill::addr#1 ] : zp ZP_WORD:53 , 
Potential registers zp ZP_WORD:55 [ loop::$1 ] : zp ZP_WORD:55 , 
Potential registers zp ZP_WORD:57 [ loop::xpos#0 ] : zp ZP_WORD:57 , 
Potential registers zp ZP_WORD:59 [ render_logo::xpos#0 ] : zp ZP_WORD:59 , 
Potential registers zp ZP_BYTE:61 [ render_logo::$0 ] : zp ZP_BYTE:61 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:62 [ render_logo::$1 ] : zp ZP_BYTE:62 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:63 [ render_logo::$2 ] : zp ZP_BYTE:63 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:64 [ render_logo::$3 ] : zp ZP_WORD:64 , 
Potential registers zp ZP_BYTE:66 [ render_logo::x_char#0 ] : zp ZP_BYTE:66 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:67 [ render_logo::$15 ] : zp ZP_BYTE:67 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:68 [ render_logo::$34 ] : zp ZP_BYTE:68 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:69 [ render_logo::$38 ] : zp ZP_BYTE:69 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:70 [ render_logo::$42 ] : zp ZP_BYTE:70 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:71 [ render_logo::$46 ] : zp ZP_BYTE:71 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:72 [ render_logo::$50 ] : zp ZP_BYTE:72 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:73 [ render_logo::$17 ] : zp ZP_BYTE:73 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:74 [ render_logo::$23 ] : zp ZP_BYTE:74 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:75 [ render_logo::$80 ] : zp ZP_BYTE:75 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:76 [ render_logo::$84 ] : zp ZP_BYTE:76 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:77 [ render_logo::$88 ] : zp ZP_BYTE:77 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:78 [ render_logo::$92 ] : zp ZP_BYTE:78 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:79 [ render_logo::$96 ] : zp ZP_BYTE:79 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_DWORD:80 [ div32u16u::return#2 ] : zp ZP_DWORD:80 , 
Potential registers zp ZP_DWORD:84 [ sin16s_gen2::step#0 ] : zp ZP_DWORD:84 , 
Potential registers zp ZP_WORD:88 [ sin16s::return#0 ] : zp ZP_WORD:88 , 
Potential registers zp ZP_WORD:90 [ mul16s::a#0 ] : zp ZP_WORD:90 , 
Potential registers zp ZP_DWORD:92 [ mul16s::return#2 ] : zp ZP_DWORD:92 , 
Potential registers zp ZP_DWORD:96 [ sin16s_gen2::$5 ] : zp ZP_DWORD:96 , 
Potential registers zp ZP_WORD:100 [ sin16s_gen2::$6 ] : zp ZP_WORD:100 , 
Potential registers zp ZP_WORD:102 [ sin16s_gen2::$8 ] : zp ZP_WORD:102 , 
Potential registers zp ZP_DWORD:104 [ mul16u::return#2 ] : zp ZP_DWORD:104 , 
Potential registers zp ZP_WORD:108 [ mul16s::$6 ] : zp ZP_WORD:108 , 
Potential registers zp ZP_WORD:110 [ mul16s::$16 ] : zp ZP_WORD:110 , 
Potential registers zp ZP_DWORD:112 [ mul16s::return#0 ] : zp ZP_DWORD:112 , 
Potential registers zp ZP_BYTE:116 [ mul16u::$1 ] : zp ZP_BYTE:116 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_DWORD:117 [ sin16s::$6 ] : zp ZP_DWORD:117 , 
Potential registers zp ZP_WORD:121 [ sin16s::x1#0 ] : zp ZP_WORD:121 , 
Potential registers zp ZP_WORD:123 [ mulu16_sel::return#0 ] : zp ZP_WORD:123 , 
Potential registers zp ZP_WORD:125 [ sin16s::x2#0 ] : zp ZP_WORD:125 , 
Potential registers zp ZP_WORD:127 [ mulu16_sel::return#1 ] : zp ZP_WORD:127 , 
Potential registers zp ZP_WORD:129 [ sin16s::x3#0 ] : zp ZP_WORD:129 , 
Potential registers zp ZP_WORD:131 [ mulu16_sel::return#2 ] : zp ZP_WORD:131 , 
Potential registers zp ZP_WORD:133 [ sin16s::x3_6#0 ] : zp ZP_WORD:133 , 
Potential registers zp ZP_WORD:135 [ sin16s::usinx#0 ] : zp ZP_WORD:135 , 
Potential registers zp ZP_WORD:137 [ mulu16_sel::return#10 ] : zp ZP_WORD:137 , 
Potential registers zp ZP_WORD:139 [ sin16s::x4#0 ] : zp ZP_WORD:139 , 
Potential registers zp ZP_WORD:141 [ mulu16_sel::return#11 ] : zp ZP_WORD:141 , 
Potential registers zp ZP_WORD:143 [ sin16s::x5#0 ] : zp ZP_WORD:143 , 
Potential registers zp ZP_WORD:145 [ sin16s::x5_128#0 ] : zp ZP_WORD:145 , 
Potential registers zp ZP_WORD:147 [ sin16s::usinx#1 ] : zp ZP_WORD:147 , 
Potential registers zp ZP_DWORD:149 [ mul16u::return#3 ] : zp ZP_DWORD:149 , 
Potential registers zp ZP_DWORD:153 [ mulu16_sel::$0 ] : zp ZP_DWORD:153 , 
Potential registers zp ZP_DWORD:157 [ mulu16_sel::$1 ] : zp ZP_DWORD:157 , 
Potential registers zp ZP_WORD:161 [ mulu16_sel::return#12 ] : zp ZP_WORD:161 , 
Potential registers zp ZP_WORD:163 [ divr16u::return#2 ] : zp ZP_WORD:163 , 
Potential registers zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ] : zp ZP_WORD:165 , 
Potential registers zp ZP_WORD:167 [ divr16u::return#3 ] : zp ZP_WORD:167 , 
Potential registers zp ZP_WORD:169 [ div32u16u::quotient_lo#0 ] : zp ZP_WORD:169 , 
Potential registers zp ZP_DWORD:171 [ div32u16u::return#0 ] : zp ZP_DWORD:171 , 
Potential registers zp ZP_BYTE:175 [ divr16u::$1 ] : zp ZP_BYTE:175 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:176 [ divr16u::$2 ] : zp ZP_BYTE:176 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:177 [ rem16u#1 ] : zp ZP_WORD:177 , 
Potential registers zp ZP_WORD:179 [ fill::end#0 ] : zp ZP_WORD:179 , 

REGISTER UPLIFT SCOPES
Uplift Scope [render_logo] 501.39: zp ZP_BYTE:5 [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ] 494.18: zp ZP_BYTE:8 [ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ] 266.73: zp ZP_BYTE:7 [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ] 255.87: zp ZP_BYTE:6 [ render_logo::logo_idx#11 render_logo::logo_idx#2 ] 202: zp ZP_BYTE:67 [ render_logo::$15 ] 202: zp ZP_BYTE:68 [ render_logo::$34 ] 202: zp ZP_BYTE:69 [ render_logo::$38 ] 202: zp ZP_BYTE:70 [ render_logo::$42 ] 202: zp ZP_BYTE:71 [ render_logo::$46 ] 202: zp ZP_BYTE:72 [ render_logo::$50 ] 202: zp ZP_BYTE:74 [ render_logo::$23 ] 202: zp ZP_BYTE:75 [ render_logo::$80 ] 202: zp ZP_BYTE:76 [ render_logo::$84 ] 202: zp ZP_BYTE:77 [ render_logo::$88 ] 202: zp ZP_BYTE:78 [ render_logo::$92 ] 202: zp ZP_BYTE:79 [ render_logo::$96 ] 4: zp ZP_BYTE:61 [ render_logo::$0 ] 4: zp ZP_BYTE:62 [ render_logo::$1 ] 4: zp ZP_BYTE:63 [ render_logo::$2 ] 4: zp ZP_WORD:64 [ render_logo::$3 ] 2.43: zp ZP_WORD:59 [ render_logo::xpos#0 ] 2: zp ZP_BYTE:73 [ render_logo::$17 ] 0.36: zp ZP_BYTE:66 [ render_logo::x_char#0 ] 
Uplift Scope [mul16u] 346.86: zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 249.57: zp ZP_DWORD:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] 202: zp ZP_BYTE:116 [ mul16u::$1 ] 177.67: zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] 8: zp ZP_WORD:21 [ mul16u::b#2 mul16u::b#1 ] 4: zp ZP_DWORD:104 [ mul16u::return#2 ] 4: zp ZP_DWORD:149 [ mul16u::return#3 ] 
Uplift Scope [divr16u] 106.92: zp ZP_WORD: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 ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:175 [ divr16u::$1 ] 22: zp ZP_BYTE:176 [ divr16u::$2 ] 18.19: zp ZP_BYTE:51 [ divr16u::i#2 divr16u::i#1 ] 9.75: zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] 4: zp ZP_WORD:163 [ divr16u::return#2 ] 4: zp ZP_WORD:167 [ divr16u::return#3 ] 
Uplift Scope [sin16s_gen2] 22: zp ZP_DWORD:96 [ sin16s_gen2::$5 ] 22: zp ZP_WORD:102 [ sin16s_gen2::$8 ] 18.19: zp ZP_WORD:15 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] 11: zp ZP_WORD:100 [ sin16s_gen2::$6 ] 10.08: zp ZP_DWORD:9 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] 8.5: zp ZP_WORD:13 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] 0.81: zp ZP_DWORD:84 [ sin16s_gen2::step#0 ] 
Uplift Scope [sin16s] 27.5: zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] 22: zp ZP_WORD:88 [ sin16s::return#0 ] 13: zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] 4: zp ZP_DWORD:117 [ sin16s::$6 ] 4: zp ZP_WORD:125 [ sin16s::x2#0 ] 4: zp ZP_WORD:133 [ sin16s::x3_6#0 ] 4: zp ZP_WORD:139 [ sin16s::x4#0 ] 4: zp ZP_WORD:143 [ sin16s::x5#0 ] 4: zp ZP_WORD:145 [ sin16s::x5_128#0 ] 1: zp ZP_WORD:129 [ sin16s::x3#0 ] 1: zp ZP_WORD:147 [ sin16s::usinx#1 ] 0.64: zp ZP_WORD:121 [ sin16s::x1#0 ] 0.33: zp ZP_WORD:135 [ sin16s::usinx#0 ] 0.06: zp ZP_BYTE:33 [ sin16s::isUpper#2 ] 
Uplift Scope [mulu16_sel] 24: zp ZP_WORD: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 ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] 4: zp ZP_WORD:123 [ mulu16_sel::return#0 ] 4: zp ZP_WORD:127 [ mulu16_sel::return#1 ] 4: zp ZP_WORD:131 [ mulu16_sel::return#2 ] 4: zp ZP_WORD:137 [ mulu16_sel::return#10 ] 4: zp ZP_WORD:141 [ mulu16_sel::return#11 ] 4: zp ZP_DWORD:153 [ mulu16_sel::$0 ] 4: zp ZP_DWORD:157 [ mulu16_sel::$1 ] 1.71: zp ZP_WORD:161 [ mulu16_sel::return#12 ] 0.33: zp ZP_BYTE:44 [ mulu16_sel::select#5 ] 
Uplift Scope [mul16s] 22: zp ZP_DWORD:92 [ mul16s::return#2 ] 12: zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] 4.33: zp ZP_DWORD:112 [ mul16s::return#0 ] 4: zp ZP_WORD:108 [ mul16s::$6 ] 4: zp ZP_WORD:110 [ mul16s::$16 ] 2.6: zp ZP_WORD:90 [ mul16s::a#0 ] 
Uplift Scope [loop] 22: zp ZP_WORD:55 [ loop::$1 ] 22: zp ZP_WORD:57 [ loop::xpos#0 ] 
Uplift Scope [fill] 36: zp ZP_WORD:53 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 2.6: zp ZP_WORD:179 [ fill::end#0 ] 1.83: zp ZP_BYTE:52 [ fill::val#3 ] 
Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::ch#2 main::ch#1 ] 
Uplift Scope [] 26.71: zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] 0.8: zp ZP_WORD:177 [ rem16u#1 ] 
Uplift Scope [div32u16u] 4: zp ZP_DWORD:80 [ div32u16u::return#2 ] 4: zp ZP_WORD:169 [ div32u16u::quotient_lo#0 ] 1.33: zp ZP_DWORD:171 [ div32u16u::return#0 ] 0.8: zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ] 

Uplifting [mul16u] best 76122 combination zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp ZP_DWORD:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] zp ZP_WORD:21 [ mul16u::b#2 mul16u::b#1 ] zp ZP_DWORD:104 [ mul16u::return#2 ] zp ZP_DWORD:149 [ mul16u::return#3 ] 
Uplifting [divr16u] best 75912 combination zp ZP_WORD: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 ZP_WORD: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 ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp ZP_WORD:163 [ divr16u::return#2 ] zp ZP_WORD:167 [ divr16u::return#3 ] 
Uplifting [sin16s_gen2] best 75912 combination zp ZP_DWORD:96 [ sin16s_gen2::$5 ] zp ZP_WORD:102 [ sin16s_gen2::$8 ] zp ZP_WORD:15 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] zp ZP_WORD:100 [ sin16s_gen2::$6 ] zp ZP_DWORD:9 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_WORD:13 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] zp ZP_DWORD:84 [ sin16s_gen2::step#0 ] 
Uplifting [sin16s] best 75912 combination zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp ZP_WORD:88 [ sin16s::return#0 ] zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp ZP_DWORD:117 [ sin16s::$6 ] zp ZP_WORD:125 [ sin16s::x2#0 ] zp ZP_WORD:133 [ sin16s::x3_6#0 ] zp ZP_WORD:139 [ sin16s::x4#0 ] zp ZP_WORD:143 [ sin16s::x5#0 ] zp ZP_WORD:145 [ sin16s::x5_128#0 ] zp ZP_WORD:129 [ sin16s::x3#0 ] zp ZP_WORD:147 [ sin16s::usinx#1 ] zp ZP_WORD:121 [ sin16s::x1#0 ] zp ZP_WORD:135 [ sin16s::usinx#0 ] zp ZP_BYTE:33 [ sin16s::isUpper#2 ] 
Uplifting [mulu16_sel] best 75896 combination zp ZP_WORD: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 ZP_WORD:42 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp ZP_WORD:123 [ mulu16_sel::return#0 ] zp ZP_WORD:127 [ mulu16_sel::return#1 ] zp ZP_WORD:131 [ mulu16_sel::return#2 ] zp ZP_WORD:137 [ mulu16_sel::return#10 ] zp ZP_WORD:141 [ mulu16_sel::return#11 ] zp ZP_DWORD:153 [ mulu16_sel::$0 ] zp ZP_DWORD:157 [ mulu16_sel::$1 ] zp ZP_WORD:161 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ] 
Uplifting [mul16s] best 75896 combination zp ZP_DWORD:92 [ mul16s::return#2 ] zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] zp ZP_DWORD:112 [ mul16s::return#0 ] zp ZP_WORD:108 [ mul16s::$6 ] zp ZP_WORD:110 [ mul16s::$16 ] zp ZP_WORD:90 [ mul16s::a#0 ] 
Uplifting [loop] best 75896 combination zp ZP_WORD:55 [ loop::$1 ] zp ZP_WORD:57 [ loop::xpos#0 ] 
Uplifting [fill] best 75880 combination zp ZP_WORD:53 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp ZP_WORD:179 [ fill::end#0 ] reg byte x [ fill::val#3 ] 
Uplifting [main] best 75760 combination reg byte x [ main::ch#2 main::ch#1 ] 
Uplifting [] best 75760 combination zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] zp ZP_WORD:177 [ rem16u#1 ] 
Uplifting [div32u16u] best 75760 combination zp ZP_DWORD:80 [ div32u16u::return#2 ] zp ZP_WORD:169 [ div32u16u::quotient_lo#0 ] zp ZP_DWORD:171 [ div32u16u::return#0 ] zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ]
Uplifting [render_logo] best 70660 combination reg byte x [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ]
Uplifting [render_logo] best 65860 combination reg byte x [ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ]
Uplifting [render_logo] best 64657 combination reg byte y [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ render_logo::logo_idx#11 render_logo::logo_idx#2 ]
Uplifting [render_logo] best 63457 combination reg byte y [ render_logo::logo_idx#11 render_logo::logo_idx#2 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:67 [ render_logo::$15 ]
Uplifting [render_logo] best 62857 combination reg byte a [ render_logo::$15 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:68 [ render_logo::$34 ]
Uplifting [render_logo] best 62257 combination reg byte a [ render_logo::$34 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:69 [ render_logo::$38 ]
Uplifting [render_logo] best 61657 combination reg byte a [ render_logo::$38 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:70 [ render_logo::$42 ]
Uplifting [render_logo] best 61057 combination reg byte a [ render_logo::$42 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:71 [ render_logo::$46 ]
Uplifting [render_logo] best 60457 combination reg byte a [ render_logo::$46 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:72 [ render_logo::$50 ]
Uplifting [render_logo] best 59857 combination reg byte a [ render_logo::$50 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:74 [ render_logo::$23 ]
Uplifting [render_logo] best 59257 combination reg byte a [ render_logo::$23 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:75 [ render_logo::$80 ]
Uplifting [render_logo] best 58657 combination reg byte a [ render_logo::$80 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:76 [ render_logo::$84 ]
Uplifting [render_logo] best 58057 combination reg byte a [ render_logo::$84 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:77 [ render_logo::$88 ]
Uplifting [render_logo] best 57457 combination reg byte a [ render_logo::$88 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:78 [ render_logo::$92 ]
Uplifting [render_logo] best 56857 combination reg byte a [ render_logo::$92 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:79 [ render_logo::$96 ]
Uplifting [render_logo] best 56257 combination reg byte a [ render_logo::$96 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:61 [ render_logo::$0 ]
Uplifting [render_logo] best 56251 combination reg byte a [ render_logo::$0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:62 [ render_logo::$1 ]
Uplifting [render_logo] best 56245 combination reg byte a [ render_logo::$1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:63 [ render_logo::$2 ]
Uplifting [render_logo] best 56239 combination reg byte a [ render_logo::$2 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:73 [ render_logo::$17 ]
Uplifting [render_logo] best 56235 combination reg byte a [ render_logo::$17 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:66 [ render_logo::x_char#0 ]
Uplifting [render_logo] best 56235 combination zp ZP_BYTE:66 [ render_logo::x_char#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:33 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 56235 combination zp ZP_BYTE:33 [ sin16s::isUpper#2 ] 
Coalescing zero page register with common assignment [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp ZP_WORD:147 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD: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 ZP_WORD:129 [ sin16s::x3#0 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_WORD: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 ZP_WORD:177 [ rem16u#1 ] ] - score: 2
Coalescing zero page register with common assignment [ zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 ] ] with [ zp ZP_DWORD:104 [ mul16u::return#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 ] ] with [ zp ZP_DWORD:112 [ mul16s::return#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:21 [ mul16u::b#2 mul16u::b#1 ] ] with [ zp ZP_WORD: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 with common assignment [ zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp ZP_DWORD:149 [ mul16u::return#3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp ZP_DWORD:117 [ sin16s::$6 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp ZP_WORD:88 [ sin16s::return#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD: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 ZP_WORD:125 [ sin16s::x2#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD: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 ZP_WORD:139 [ sin16s::x4#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:163 [ divr16u::return#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:167 [ divr16u::return#3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ loop::$1 ] ] with [ zp ZP_WORD:57 [ loop::xpos#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:80 [ div32u16u::return#2 ] ] with [ zp ZP_DWORD:84 [ sin16s_gen2::step#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:80 [ div32u16u::return#2 sin16s_gen2::step#0 ] ] with [ zp ZP_DWORD:171 [ div32u16u::return#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:92 [ mul16s::return#2 ] ] with [ zp ZP_DWORD:96 [ sin16s_gen2::$5 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:100 [ sin16s_gen2::$6 ] ] with [ zp ZP_WORD:102 [ sin16s_gen2::$8 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:108 [ mul16s::$6 ] ] with [ zp ZP_WORD:110 [ mul16s::$16 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:123 [ mulu16_sel::return#0 ] ] with [ zp ZP_WORD:161 [ mulu16_sel::return#12 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:131 [ mulu16_sel::return#2 ] ] with [ zp ZP_WORD:133 [ sin16s::x3_6#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:141 [ mulu16_sel::return#11 ] ] with [ zp ZP_WORD:143 [ sin16s::x5#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:153 [ mulu16_sel::$0 ] ] with [ zp ZP_DWORD:157 [ mulu16_sel::$1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD:17 [ mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 ] ] with [ zp ZP_DWORD:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD: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 ZP_DWORD:92 [ mul16s::return#2 sin16s_gen2::$5 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 ] ] with [ zp ZP_WORD:90 [ mul16s::a#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:38 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 ] ] with [ zp ZP_WORD:135 [ sin16s::usinx#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD: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 ZP_WORD:127 [ mulu16_sel::return#1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD: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 ZP_WORD:137 [ mulu16_sel::return#10 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 ] ] with [ zp ZP_WORD:169 [ div32u16u::quotient_lo#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:55 [ loop::$1 loop::xpos#0 ] ] with [ zp ZP_WORD:59 [ render_logo::xpos#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:123 [ mulu16_sel::return#0 mulu16_sel::return#12 ] ] with [ zp ZP_WORD:131 [ mulu16_sel::return#2 sin16s::x3_6#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:123 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 ] ] with [ zp ZP_WORD:141 [ mulu16_sel::return#11 sin16s::x5#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_DWORD: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::$5 ] ] with [ zp ZP_DWORD:153 [ mulu16_sel::$0 mulu16_sel::$1 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD: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 ZP_WORD:145 [ sin16s::x5_128#0 ] ] - score: 1
Coalescing zero page register [ zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 ] ] with [ zp ZP_WORD:13 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ]
Coalescing zero page register [ zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ] ] with [ zp ZP_WORD: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 ] ]
Coalescing zero page register [ zp ZP_WORD:3 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp ZP_WORD:53 [ fill::addr#2 fill::addr#0 fill::addr#1 ] ]
Coalescing zero page register [ zp ZP_WORD:15 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] ] with [ zp ZP_WORD:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ]
Coalescing zero page register [ zp ZP_WORD:15 [ sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp ZP_WORD:55 [ loop::$1 loop::xpos#0 render_logo::xpos#0 ] ]
Coalescing zero page register [ zp ZP_WORD:15 [ sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 loop::$1 loop::xpos#0 render_logo::xpos#0 ] ] with [ zp ZP_WORD:179 [ fill::end#0 ] ]
Coalescing zero page register [ zp ZP_DWORD: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::$5 mulu16_sel::$0 mulu16_sel::$1 ] ] with [ zp ZP_DWORD:34 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 ] ]
Coalescing zero page register [ zp ZP_WORD: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 ] ] with [ zp ZP_WORD:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ]
Coalescing zero page register [ zp ZP_WORD: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 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp ZP_WORD:64 [ render_logo::$3 ] ]
Coalescing zero page register [ zp ZP_WORD: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 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 render_logo::$3 ] ] with [ zp ZP_WORD:100 [ sin16s_gen2::$6 sin16s_gen2::$8 ] ]
Coalescing zero page register [ zp ZP_WORD: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 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 render_logo::$3 sin16s_gen2::$6 sin16s_gen2::$8 ] ] with [ zp ZP_WORD:108 [ mul16s::$6 mul16s::$16 ] ]
Coalescing zero page register [ zp ZP_WORD: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 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 render_logo::$3 sin16s_gen2::$6 sin16s_gen2::$8 mul16s::$6 mul16s::$16 ] ] with [ zp ZP_WORD: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 ZP_WORD:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 ] ] with [ zp ZP_WORD:165 [ div32u16u::quotient_hi#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:33 [ sin16s::isUpper#2 ] ] with [ zp ZP_BYTE:66 [ render_logo::x_char#0 ] ]
Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
Allocated (was zp ZP_DWORD:9) zp ZP_DWORD:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
Allocated (was zp ZP_WORD:15) zp ZP_WORD:8 [ sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 loop::$1 loop::xpos#0 render_logo::xpos#0 fill::end#0 ]
Allocated (was zp ZP_DWORD:17) zp ZP_DWORD:10 [ 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::$5 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 ]
Allocated (was zp ZP_WORD:21) zp ZP_WORD:14 [ 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 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 render_logo::$3 sin16s_gen2::$6 sin16s_gen2::$8 mul16s::$6 mul16s::$16 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]
Allocated (was zp ZP_WORD:23) zp ZP_WORD:16 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 div32u16u::quotient_hi#0 ]
Allocated (was zp ZP_DWORD:29) zp ZP_DWORD:18 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
Allocated (was zp ZP_BYTE:33) zp ZP_BYTE:22 [ sin16s::isUpper#2 render_logo::x_char#0 ]
Allocated (was zp ZP_WORD:38) zp ZP_WORD:23 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
Allocated (was zp ZP_WORD:40) zp ZP_WORD:25 [ 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 ZP_DWORD:80) zp ZP_DWORD:27 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
Allocated (was zp ZP_WORD:121) zp ZP_WORD:31 [ sin16s::x1#0 ]

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 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
  .label SCREEN = $400
  .label LOGO = $2000
  .const XSIN_SIZE = $200
  .label rem16u = 2
  .label xsin_idx = 2
//SEG3 @begin
bbegin:
  jmp b25
//SEG4 @25
b25:
//SEG5 kickasm(location (const byte*) LOGO#0) {{ .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)  }}
//SEG6 [2] phi from @25 to @28 [phi:@25->@28]
b28_from_b25:
  jmp b28
//SEG7 @28
b28:
//SEG8 [3] call main 
  jsr main
//SEG9 [4] phi from @28 to @end [phi:@28->@end]
bend_from_b28:
  jmp bend
//SEG10 @end
bend:
//SEG11 main
main: {
    .const toD0181_return = (>(SCREEN&$3fff)<<2)|(>LOGO)>>2&$f
  //SEG12 asm { sei  }
    sei
  //SEG13 [6] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta BORDERCOL
  //SEG14 [7] *((const byte*) BGCOL2#0) ← (const byte) DARK_GREY#0 -- _deref_pbuc1=vbuc2 
    lda #DARK_GREY
    sta BGCOL2
  //SEG15 [8] *((const byte*) BGCOL#0) ← *((const byte*) BGCOL2#0) -- _deref_pbuc1=_deref_pbuc2 
    lda BGCOL2
    sta BGCOL
  //SEG16 [9] *((const byte*) BGCOL3#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 
    lda #BLACK
    sta BGCOL3
  //SEG17 [10] phi from main to main::toD0181 [phi:main->main::toD0181]
  toD0181_from_main:
    jmp toD0181
  //SEG18 main::toD0181
  toD0181:
    jmp b3
  //SEG19 main::@3
  b3:
  //SEG20 [11] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
  //SEG21 [12] *((const byte*) D016#0) ← (const byte) VIC_MCM#0 -- _deref_pbuc1=vbuc2 
    lda #VIC_MCM
    sta D016
  //SEG22 [13] call fill 
  //SEG23 [217] phi from main::@3 to fill [phi:main::@3->fill]
  fill_from_b3:
  //SEG24 [217] phi (byte) fill::val#3 = (const byte) BLACK#0 [phi:main::@3->fill#0] -- vbuxx=vbuc1 
    ldx #BLACK
  //SEG25 [217] phi (byte*) fill::addr#0 = (const byte*) SCREEN#0 [phi:main::@3->fill#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta fill.addr
    lda #>SCREEN
    sta fill.addr+1
    jsr fill
  //SEG26 [14] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  b4_from_b3:
    jmp b4
  //SEG27 main::@4
  b4:
  //SEG28 [15] call fill 
  //SEG29 [217] phi from main::@4 to fill [phi:main::@4->fill]
  fill_from_b4:
  //SEG30 [217] phi (byte) fill::val#3 = (const byte) WHITE#0|(byte/signed byte/word/signed word/dword/signed dword) 8 [phi:main::@4->fill#0] -- vbuxx=vbuc1 
    ldx #WHITE|8
  //SEG31 [217] phi (byte*) fill::addr#0 = (const byte*) COLS#0 [phi:main::@4->fill#1] -- pbuz1=pbuc1 
    lda #<COLS
    sta fill.addr
    lda #>COLS
    sta fill.addr+1
    jsr fill
  //SEG32 [16] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
  b1_from_b4:
  //SEG33 [16] phi (byte) main::ch#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@4->main::@1#0] -- vbuxx=vbuc1 
    ldx #0
    jmp b1
  //SEG34 [16] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  b1_from_b1:
  //SEG35 [16] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@1->main::@1#0] -- register_copy 
    jmp b1
  //SEG36 main::@1
  b1:
  //SEG37 [17] *((const byte*) SCREEN#0 + (byte) main::ch#2) ← (byte) main::ch#2 -- pbuc1_derefidx_vbuxx=vbuxx 
    txa
    sta SCREEN,x
  //SEG38 [18] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG39 [19] if((byte) main::ch#1!=(byte/word/signed word/dword/signed dword) 240) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$f0
    bne b1_from_b1
  //SEG40 [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
  //SEG41 main::@2
  b2:
  //SEG42 [21] call sin16s_gen2 
  //SEG43 [98] phi from main::@2 to sin16s_gen2 [phi:main::@2->sin16s_gen2]
  sin16s_gen2_from_b2:
    jsr sin16s_gen2
  //SEG44 [22] phi from main::@2 to main::@6 [phi:main::@2->main::@6]
  b6_from_b2:
    jmp b6
  //SEG45 main::@6
  b6:
  //SEG46 [23] call loop 
  //SEG47 [25] phi from main::@6 to loop [phi:main::@6->loop]
  loop_from_b6:
    jsr loop
    jmp breturn
  //SEG48 main::@return
  breturn:
  //SEG49 [24] return 
    rts
}
//SEG50 loop
loop: {
    .label _1 = 8
    .label xpos = 8
  //SEG51 [26] phi from loop to loop::@1 [phi:loop->loop::@1]
  b1_from_loop:
  //SEG52 [26] phi (word) xsin_idx#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop->loop::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta xsin_idx
    lda #>0
    sta xsin_idx+1
    jmp b1
  //SEG53 loop::@1
  b1:
    jmp b4
  // Wait for the raster to reach the bottom of the screen
  //SEG54 loop::@4
  b4:
  //SEG55 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b4
    jmp b6
  //SEG56 loop::@6
  b6:
  //SEG57 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
  //SEG58 [29] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word) xsin_idx#11 -- pwsz1=pwsc1_plus_vwuz2 
    lda xsin_idx
    clc
    adc #<xsin
    sta _1
    lda xsin_idx+1
    adc #>xsin
    sta _1+1
  //SEG59 [30] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) -- vwsz1=_deref_pwsz1 
    ldy #0
    lda (xpos),y
    tax
    iny
    lda (xpos),y
    stx xpos
    sta xpos+1
  //SEG60 [31] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
  //SEG61 [32] call render_logo 
    jsr render_logo
    jmp b15
  //SEG62 loop::@15
  b15:
  //SEG63 [33] (word) xsin_idx#3 ← (word) xsin_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vwuz1=vwuz1_plus_2 
    lda xsin_idx
    clc
    adc #2
    sta xsin_idx
    bcc !+
    inc xsin_idx+1
  !:
  //SEG64 [34] if((word) xsin_idx#3!=(const word) XSIN_SIZE#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto loop::@16 -- vwuz1_neq_vwuc1_then_la1 
    lda xsin_idx+1
    cmp #>XSIN_SIZE*2
    bne b16_from_b15
    lda xsin_idx
    cmp #<XSIN_SIZE*2
    bne b16_from_b15
  //SEG65 [35] phi from loop::@15 to loop::@7 [phi:loop::@15->loop::@7]
  b7_from_b15:
  //SEG66 [35] phi (word) xsin_idx#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@15->loop::@7#0] -- vwuz1=vbuc1 
    lda #<0
    sta xsin_idx
    lda #>0
    sta xsin_idx+1
    jmp b7
  //SEG67 loop::@7
  b7:
  //SEG68 [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
  //SEG69 [26] phi from loop::@7 to loop::@1 [phi:loop::@7->loop::@1]
  b1_from_b7:
  //SEG70 [26] phi (word) xsin_idx#11 = (word) xsin_idx#19 [phi:loop::@7->loop::@1#0] -- register_copy 
    jmp b1
  //SEG71 [37] phi from loop::@15 to loop::@16 [phi:loop::@15->loop::@16]
  b16_from_b15:
    jmp b16
  //SEG72 loop::@16
  b16:
  //SEG73 [35] phi from loop::@16 to loop::@7 [phi:loop::@16->loop::@7]
  b7_from_b16:
  //SEG74 [35] phi (word) xsin_idx#19 = (word) xsin_idx#3 [phi:loop::@16->loop::@7#0] -- register_copy 
    jmp b7
}
//SEG75 render_logo
// render_logo(signed word zeropage(8) xpos)
render_logo: {
    .label _3 = $e
    .label xpos = 8
    .label x_char = $16
  //SEG76 [38] (byte~) render_logo::$0 ← ((byte)) (signed word) render_logo::xpos#0 -- vbuaa=_byte_vwsz1 
    lda xpos
  //SEG77 [39] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuaa=vbuaa_band_vbuc1 
    and #7
  //SEG78 [40] (byte~) render_logo::$2 ← (const byte) VIC_MCM#0 | (byte~) render_logo::$1 -- vbuaa=vbuc1_bor_vbuaa 
    ora #VIC_MCM
  //SEG79 [41] *((const byte*) D016#0) ← (byte~) render_logo::$2 -- _deref_pbuc1=vbuaa 
    sta D016
  //SEG80 [42] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte/signed byte/word/signed word/dword/signed dword) 3 -- vwsz1=vwsz2_ror_3 
    lda xpos+1
    cmp #$80
    ror
    sta _3+1
    lda xpos
    ror
    sta _3
    lda _3+1
    cmp #$80
    ror _3+1
    ror _3
    lda _3+1
    cmp #$80
    ror _3+1
    ror _3
  //SEG81 [43] (signed byte) render_logo::x_char#0 ← ((signed byte)) (signed word~) render_logo::$3 -- vbsz1=_sbyte_vwsz2 
    lda _3
    sta x_char
  //SEG82 [44] if((signed word) render_logo::xpos#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_logo::@1 -- vwsz1_lt_0_then_la1 
    lda xpos+1
    bmi b1
  //SEG83 [45] phi from render_logo to render_logo::@2 [phi:render_logo->render_logo::@2]
  b2_from_render_logo:
  //SEG84 [45] phi (byte) render_logo::screen_idx#17 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_logo->render_logo::@2#0] -- vbuxx=vbuc1 
    ldx #0
    jmp b2
  //SEG85 render_logo::@2
  b2:
  //SEG86 [46] if((byte) render_logo::screen_idx#17!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@5 -- vbuxx_neq_vbuz1_then_la1 
    cpx x_char
    bne b5
  //SEG87 [47] phi from render_logo::@2 to render_logo::@6 [phi:render_logo::@2->render_logo::@6]
  b6_from_b2:
  //SEG88 [47] phi (byte) render_logo::logo_idx#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_logo::@2->render_logo::@6#0] -- vbuyy=vbuc1 
    ldy #0
  //SEG89 [47] phi (byte) render_logo::screen_idx#19 = (byte) render_logo::screen_idx#17 [phi:render_logo::@2->render_logo::@6#1] -- register_copy 
    jmp b6
  //SEG90 render_logo::@6
  b6:
  //SEG91 [48] if((byte) render_logo::screen_idx#19!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@9 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne b9
    jmp breturn
  //SEG92 render_logo::@return
  breturn:
  //SEG93 [49] return 
    rts
  //SEG94 render_logo::@9
  b9:
  //SEG95 [50] (byte/signed word/word/dword/signed dword~) render_logo::$15 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuaa=vbuyy_plus_0 
    tya
  //SEG96 [51] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$15 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN,x
    jmp b9_1
  //SEG97 render_logo::@9_1
  b9_1:
  //SEG98 [52] (byte/signed word/word/dword/signed dword~) render_logo::$34 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*1
  //SEG99 [53] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$34 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*1,x
    jmp b9_2
  //SEG100 render_logo::@9_2
  b9_2:
  //SEG101 [54] (byte/signed word/word/dword/signed dword~) render_logo::$38 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*2
  //SEG102 [55] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$38 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*2,x
    jmp b9_3
  //SEG103 render_logo::@9_3
  b9_3:
  //SEG104 [56] (byte/signed word/word/dword/signed dword~) render_logo::$42 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*3
  //SEG105 [57] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$42 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*3,x
    jmp b9_4
  //SEG106 render_logo::@9_4
  b9_4:
  //SEG107 [58] (byte/signed word/word/dword/signed dword~) render_logo::$46 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*4
  //SEG108 [59] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$46 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*4,x
    jmp b9_5
  //SEG109 render_logo::@9_5
  b9_5:
  //SEG110 [60] (byte/signed word/word/dword/signed dword~) render_logo::$50 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*5
  //SEG111 [61] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$50 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*5,x
    jmp b26
  //SEG112 render_logo::@26
  b26:
  //SEG113 [62] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#19 -- vbuxx=_inc_vbuxx 
    inx
  //SEG114 [63] (byte) render_logo::logo_idx#2 ← ++ (byte) render_logo::logo_idx#11 -- vbuyy=_inc_vbuyy 
    iny
  //SEG115 [47] phi from render_logo::@26 to render_logo::@6 [phi:render_logo::@26->render_logo::@6]
  b6_from_b26:
  //SEG116 [47] phi (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#2 [phi:render_logo::@26->render_logo::@6#0] -- register_copy 
  //SEG117 [47] phi (byte) render_logo::screen_idx#19 = (byte) render_logo::screen_idx#3 [phi:render_logo::@26->render_logo::@6#1] -- register_copy 
    jmp b6
  //SEG118 render_logo::@5
  b5:
  //SEG119 [64] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN,x
    jmp b5_1
  //SEG120 render_logo::@5_1
  b5_1:
  //SEG121 [65] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*1,x
    jmp b5_2
  //SEG122 render_logo::@5_2
  b5_2:
  //SEG123 [66] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*2,x
    jmp b5_3
  //SEG124 render_logo::@5_3
  b5_3:
  //SEG125 [67] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*3,x
    jmp b5_4
  //SEG126 render_logo::@5_4
  b5_4:
  //SEG127 [68] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*4,x
    jmp b5_5
  //SEG128 render_logo::@5_5
  b5_5:
  //SEG129 [69] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*5,x
    jmp b22
  //SEG130 render_logo::@22
  b22:
  //SEG131 [70] (byte) render_logo::screen_idx#2 ← ++ (byte) render_logo::screen_idx#17 -- vbuxx=_inc_vbuxx 
    inx
  //SEG132 [45] phi from render_logo::@22 to render_logo::@2 [phi:render_logo::@22->render_logo::@2]
  b2_from_b22:
  //SEG133 [45] phi (byte) render_logo::screen_idx#17 = (byte) render_logo::screen_idx#2 [phi:render_logo::@22->render_logo::@2#0] -- register_copy 
    jmp b2
  //SEG134 render_logo::@1
  b1:
  //SEG135 [71] (signed byte~) render_logo::$17 ← - (signed byte) render_logo::x_char#0 -- vbsaa=_neg_vbsz1 
    lda x_char
    eor #$ff
    clc
    adc #1
  //SEG136 [72] (byte~) render_logo::logo_idx#13 ← (byte)(signed byte~) render_logo::$17 -- vbuyy=vbuaa 
    tay
  //SEG137 [73] phi from render_logo::@1 to render_logo::@11 [phi:render_logo::@1->render_logo::@11]
  b11_from_b1:
  //SEG138 [73] phi (byte) render_logo::screen_idx#20 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_logo::@1->render_logo::@11#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG139 [73] phi (byte) render_logo::logo_idx#10 = (byte~) render_logo::logo_idx#13 [phi:render_logo::@1->render_logo::@11#1] -- register_copy 
    jmp b11
  //SEG140 render_logo::@11
  b11:
  //SEG141 [74] if((byte) render_logo::logo_idx#10!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@14 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne b14
  //SEG142 [75] phi from render_logo::@11 render_logo::@35 to render_logo::@15 [phi:render_logo::@11/render_logo::@35->render_logo::@15]
  b15_from_b11:
  b15_from_b35:
  //SEG143 [75] phi (byte) render_logo::screen_idx#14 = (byte) render_logo::screen_idx#20 [phi:render_logo::@11/render_logo::@35->render_logo::@15#0] -- register_copy 
    jmp b15
  //SEG144 render_logo::@15
  b15:
  //SEG145 [76] if((byte) render_logo::screen_idx#14!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@18 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne b18
    jmp breturn
  //SEG146 render_logo::@18
  b18:
  //SEG147 [77] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN,x
    jmp b18_1
  //SEG148 render_logo::@18_1
  b18_1:
  //SEG149 [78] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*1,x
    jmp b18_2
  //SEG150 render_logo::@18_2
  b18_2:
  //SEG151 [79] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*2,x
    jmp b18_3
  //SEG152 render_logo::@18_3
  b18_3:
  //SEG153 [80] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*3,x
    jmp b18_4
  //SEG154 render_logo::@18_4
  b18_4:
  //SEG155 [81] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*4,x
    jmp b18_5
  //SEG156 render_logo::@18_5
  b18_5:
  //SEG157 [82] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN+$28*5,x
    jmp b35
  //SEG158 render_logo::@35
  b35:
  //SEG159 [83] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#14 -- vbuxx=_inc_vbuxx 
    inx
    jmp b15_from_b35
  //SEG160 render_logo::@14
  b14:
  //SEG161 [84] (byte/signed word/word/dword/signed dword~) render_logo::$23 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuaa=vbuyy_plus_0 
    tya
  //SEG162 [85] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$23 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN,x
    jmp b14_1
  //SEG163 render_logo::@14_1
  b14_1:
  //SEG164 [86] (byte/signed word/word/dword/signed dword~) render_logo::$80 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*1
  //SEG165 [87] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$80 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*1,x
    jmp b14_2
  //SEG166 render_logo::@14_2
  b14_2:
  //SEG167 [88] (byte/signed word/word/dword/signed dword~) render_logo::$84 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*2
  //SEG168 [89] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$84 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*2,x
    jmp b14_3
  //SEG169 render_logo::@14_3
  b14_3:
  //SEG170 [90] (byte/signed word/word/dword/signed dword~) render_logo::$88 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*3
  //SEG171 [91] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$88 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*3,x
    jmp b14_4
  //SEG172 render_logo::@14_4
  b14_4:
  //SEG173 [92] (byte/signed word/word/dword/signed dword~) render_logo::$92 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*4
  //SEG174 [93] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$92 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*4,x
    jmp b14_5
  //SEG175 render_logo::@14_5
  b14_5:
  //SEG176 [94] (byte/signed word/word/dword/signed dword~) render_logo::$96 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*5
  //SEG177 [95] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$96 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*5,x
    jmp b31
  //SEG178 render_logo::@31
  b31:
  //SEG179 [96] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#20 -- vbuxx=_inc_vbuxx 
    inx
  //SEG180 [97] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10 -- vbuyy=_inc_vbuyy 
    iny
  //SEG181 [73] phi from render_logo::@31 to render_logo::@11 [phi:render_logo::@31->render_logo::@11]
  b11_from_b31:
  //SEG182 [73] phi (byte) render_logo::screen_idx#20 = (byte) render_logo::screen_idx#4 [phi:render_logo::@31->render_logo::@11#0] -- register_copy 
  //SEG183 [73] phi (byte) render_logo::logo_idx#10 = (byte) render_logo::logo_idx#3 [phi:render_logo::@31->render_logo::@11#1] -- register_copy 
    jmp b11
}
//SEG184 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* zeropage(2) sintab)
sin16s_gen2: {
    .const min = -$140
    .const max = $140
    .label ampl = max-min
    .const offs = min+(ampl>>1)
    .label _5 = $a
    .label _6 = $e
    .label _8 = $e
    .label step = $1b
    .label sintab = 2
    .label x = 4
    .label i = 8
  //SEG185 [99] call div32u16u 
  //SEG186 [189] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u]
  div32u16u_from_sin16s_gen2:
    jsr div32u16u
  //SEG187 [100] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
    jmp b3
  //SEG188 sin16s_gen2::@3
  b3:
  //SEG189 [101] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2
  //SEG190 [102] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1]
  b1_from_b3:
  //SEG191 [102] phi (word) sin16s_gen2::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta i
    lda #>0
    sta i+1
  //SEG192 [102] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[XSIN_SIZE#0]) xsin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- pwsz1=pwsc1 
    lda #<xsin
    sta sintab
    lda #>xsin
    sta sintab+1
  //SEG193 [102] phi (dword) sin16s_gen2::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vduz1=vbuc1 
    lda #0
    sta x
    lda #0
    sta x+1
    sta x+2
    sta x+3
    jmp b1
  // u[4.28]
  //SEG194 [102] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1]
  b1_from_b5:
  //SEG195 [102] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy 
  //SEG196 [102] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy 
  //SEG197 [102] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy 
    jmp b1
  //SEG198 sin16s_gen2::@1
  b1:
  //SEG199 [103] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 
    lda x
    sta sin16s.x
    lda x+1
    sta sin16s.x+1
    lda x+2
    sta sin16s.x+2
    lda x+3
    sta sin16s.x+3
  //SEG200 [104] call sin16s 
    jsr sin16s
  //SEG201 [105] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
    jmp b4
  //SEG202 sin16s_gen2::@4
  b4:
  //SEG203 [106] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0
  //SEG204 [107] call mul16s 
    jsr mul16s
  //SEG205 [108] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0
    jmp b5
  //SEG206 sin16s_gen2::@5
  b5:
  //SEG207 [109] (signed dword~) sin16s_gen2::$5 ← (signed dword) mul16s::return#2
  //SEG208 [110] (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5 -- vwuz1=_hi_vdsz2 
    lda _5+2
    sta _6
    lda _5+3
    sta _6+1
  //SEG209 [111] (signed word~) sin16s_gen2::$8 ← (const signed word) sin16s_gen2::offs#0 + (signed word)(word~) sin16s_gen2::$6 -- vwsz1=vwsc1_plus_vwsz1 
    clc
    lda _8
    adc #<offs
    sta _8
    lda _8+1
    adc #>offs
    sta _8+1
  //SEG210 [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word~) sin16s_gen2::$8 -- _deref_pwsz1=vwsz2 
    ldy #0
    lda _8
    sta (sintab),y
    iny
    lda _8+1
    sta (sintab),y
  //SEG211 [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 
    lda sintab
    clc
    adc #2
    sta sintab
    bcc !+
    inc sintab+1
  !:
  //SEG212 [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 
    lda x
    clc
    adc step
    sta x
    lda x+1
    adc step+1
    sta x+1
    lda x+2
    adc step+2
    sta x+2
    lda x+3
    adc step+3
    sta x+3
  //SEG213 [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 
    inc i
    bne !+
    inc i+1
  !:
  //SEG214 [116] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@1 -- vwuz1_lt_vwuc1_then_la1 
    lda i+1
    cmp #>XSIN_SIZE
    bcc b1_from_b5
    bne !+
    lda i
    cmp #<XSIN_SIZE
    bcc b1_from_b5
  !:
    jmp breturn
  //SEG215 sin16s_gen2::@return
  breturn:
  //SEG216 [117] return 
    rts
}
//SEG217 mul16s
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage($17) a)
mul16s: {
    .label _6 = $e
    .label _16 = $e
    .label m = $a
    .label return = $a
    .label a = $17
  //SEG218 [118] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#0 -- vwuz1=vwuz2 
    lda a
    sta mul16u.a
    lda a+1
    sta mul16u.a+1
  //SEG219 [119] call mul16u 
  //SEG220 [129] phi from mul16s to mul16u [phi:mul16s->mul16u]
  mul16u_from_mul16s:
  //SEG221 [129] phi (word) mul16u::a#6 = (word~) mul16u::a#8 [phi:mul16s->mul16u#0] -- register_copy 
  //SEG222 [129] phi (word) mul16u::b#2 = ((word))(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 
    lda #<sin16s_gen2.ampl
    sta mul16u.b
    lda #>sin16s_gen2.ampl
    sta mul16u.b+1
    jsr mul16u
  //SEG223 [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2
    jmp b6
  //SEG224 mul16s::@6
  b6:
  //SEG225 [121] (dword) mul16s::m#0 ← (dword) mul16u::return#2
  //SEG226 [122] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1 -- vwsz1_ge_0_then_la1 
    lda a+1
    bpl b1_from_b6
    jmp b3
  //SEG227 mul16s::@3
  b3:
  //SEG228 [123] (word~) mul16s::$6 ← > (dword) mul16s::m#0 -- vwuz1=_hi_vduz2 
    lda m+2
    sta _6
    lda m+3
    sta _6+1
  //SEG229 [124] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda _16
    sec
    sbc #<sin16s_gen2.ampl
    sta _16
    lda _16+1
    sbc #>sin16s_gen2.ampl
    sta _16+1
  //SEG230 [125] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 -- vduz1=vduz1_sethi_vwuz2 
    lda _16
    sta m+2
    lda _16+1
    sta m+3
  //SEG231 [126] phi from mul16s::@3 mul16s::@6 to mul16s::@1 [phi:mul16s::@3/mul16s::@6->mul16s::@1]
  b1_from_b3:
  b1_from_b6:
  //SEG232 [126] phi (dword) mul16s::m#4 = (dword) mul16s::m#1 [phi:mul16s::@3/mul16s::@6->mul16s::@1#0] -- register_copy 
    jmp b1
  //SEG233 mul16s::@1
  b1:
    jmp b2
  //SEG234 mul16s::@2
  b2:
  //SEG235 [127] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4 -- vdsz1=_sdword_vduz1 
    jmp breturn
  //SEG236 mul16s::@return
  breturn:
  //SEG237 [128] return 
    rts
}
//SEG238 mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($10) a, word zeropage($e) b)
mul16u: {
    .label mb = $12
    .label a = $10
    .label res = $a
    .label return = $a
    .label b = $e
  //SEG239 [130] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2 -- vduz1=_dword_vwuz2 
    lda b
    sta mb
    lda b+1
    sta mb+1
    lda #0
    sta mb+2
    sta mb+3
  //SEG240 [131] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
  b1_from_mul16u:
  //SEG241 [131] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy 
  //SEG242 [131] phi (dword) mul16u::res#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 
    lda #0
    sta res
    lda #0
    sta res+1
    sta res+2
    sta res+3
  //SEG243 [131] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy 
    jmp b1
  //SEG244 mul16u::@1
  b1:
  //SEG245 [132] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 
    lda a
    bne b2
    lda a+1
    bne b2
    jmp breturn
  //SEG246 mul16u::@return
  breturn:
  //SEG247 [133] return 
    rts
  //SEG248 mul16u::@2
  b2:
  //SEG249 [134] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vwuz1_band_vbuc1 
    lda a
    and #1
  //SEG250 [135] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b4_from_b2
    jmp b7
  //SEG251 mul16u::@7
  b7:
  //SEG252 [136] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 
    lda res
    clc
    adc mb
    sta res
    lda res+1
    adc mb+1
    sta res+1
    lda res+2
    adc mb+2
    sta res+2
    lda res+3
    adc mb+3
    sta res+3
  //SEG253 [137] phi from mul16u::@2 mul16u::@7 to mul16u::@4 [phi:mul16u::@2/mul16u::@7->mul16u::@4]
  b4_from_b2:
  b4_from_b7:
  //SEG254 [137] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@7->mul16u::@4#0] -- register_copy 
    jmp b4
  //SEG255 mul16u::@4
  b4:
  //SEG256 [138] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_ror_1 
    clc
    ror a+1
    ror a
  //SEG257 [139] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vduz1=vduz1_rol_1 
    asl mb
    rol mb+1
    rol mb+2
    rol mb+3
  //SEG258 [131] phi from mul16u::@4 to mul16u::@1 [phi:mul16u::@4->mul16u::@1]
  b1_from_b4:
  //SEG259 [131] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@4->mul16u::@1#0] -- register_copy 
  //SEG260 [131] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@4->mul16u::@1#1] -- register_copy 
  //SEG261 [131] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@4->mul16u::@1#2] -- register_copy 
    jmp b1
}
//SEG262 sin16s
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range  -$7fff - $7fff
// sin16s(dword zeropage($a) x)
sin16s: {
    .label _6 = $a
    .label x = $a
    .label return = $17
    .label x1 = $1f
    .label x2 = $19
    .label x3 = $19
    .label x3_6 = $e
    .label usinx = $17
    .label x4 = $19
    .label x5 = $e
    .label x5_128 = $e
    .label sinx = $17
    .label isUpper = $16
  //SEG263 [140] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_u4f28>>$10
    bcc b1_from_sin16s
    bne !+
    lda x+2
    cmp #<PI_u4f28>>$10
    bcc b1_from_sin16s
    bne !+
    lda x+1
    cmp #>PI_u4f28
    bcc b1_from_sin16s
    bne !+
    lda x
    cmp #<PI_u4f28
    bcc b1_from_sin16s
  !:
    jmp b4
  //SEG264 sin16s::@4
  b4:
  //SEG265 [141] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 -- vduz1=vduz1_minus_vduc1 
    lda x
    sec
    sbc #<PI_u4f28
    sta x
    lda x+1
    sbc #>PI_u4f28
    sta x+1
    lda x+2
    sbc #<PI_u4f28>>$10
    sta x+2
    lda x+3
    sbc #>PI_u4f28>>$10
    sta x+3
  //SEG266 [142] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
  b1_from_b4:
  //SEG267 [142] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #1
    sta isUpper
  //SEG268 [142] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG269 [142] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
  b1_from_sin16s:
  //SEG270 [142] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta isUpper
  //SEG271 [142] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG272 sin16s::@1
  b1:
  //SEG273 [143] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_HALF_u4f28>>$10
    bcc b2_from_b1
    bne !+
    lda x+2
    cmp #<PI_HALF_u4f28>>$10
    bcc b2_from_b1
    bne !+
    lda x+1
    cmp #>PI_HALF_u4f28
    bcc b2_from_b1
    bne !+
    lda x
    cmp #<PI_HALF_u4f28
    bcc b2_from_b1
  !:
    jmp b5
  //SEG274 sin16s::@5
  b5:
  //SEG275 [144] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 
    lda #<PI_u4f28
    sec
    sbc x
    sta x
    lda #>PI_u4f28
    sbc x+1
    sta x+1
    lda #<PI_u4f28>>$10
    sbc x+2
    sta x+2
    lda #>PI_u4f28>>$10
    sbc x+3
    sta x+3
  //SEG276 [145] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2]
  b2_from_b1:
  b2_from_b5:
  //SEG277 [145] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy 
    jmp b2
  //SEG278 sin16s::@2
  b2:
  //SEG279 [146] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vduz1=vduz1_rol_3 
    ldy #3
  !:
    asl _6
    rol _6+1
    rol _6+2
    rol _6+3
    dey
    bne !-
  //SEG280 [147] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 -- vwuz1=_hi_vduz2 
    lda _6+2
    sta x1
    lda _6+3
    sta x1+1
  //SEG281 [148] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v1
    lda x1+1
    sta mulu16_sel.v1+1
  //SEG282 [149] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG283 [150] call mulu16_sel 
  //SEG284 [180] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel]
  mulu16_sel_from_b2:
  //SEG285 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG286 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy 
  //SEG287 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG288 [151] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
    jmp b8
  //SEG289 sin16s::@8
  b8:
  //SEG290 [152] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta x2
    lda mulu16_sel.return+1
    sta x2+1
  //SEG291 [153] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
  //SEG292 [154] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG293 [155] call mulu16_sel 
  //SEG294 [180] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel]
  mulu16_sel_from_b8:
  //SEG295 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
  //SEG296 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@8->mulu16_sel#1] -- register_copy 
  //SEG297 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@8->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG298 [156] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta mulu16_sel.return_1
    lda mulu16_sel.return+1
    sta mulu16_sel.return_1+1
    jmp b9
  //SEG299 sin16s::@9
  b9:
  //SEG300 [157] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
  //SEG301 [158] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
  //SEG302 [159] call mulu16_sel 
  //SEG303 [180] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel]
  mulu16_sel_from_b9:
  //SEG304 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
  //SEG305 [180] phi (word) mulu16_sel::v2#5 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 [phi:sin16s::@9->mulu16_sel#1] -- vwuz1=vwuc1 
    lda #<$10000/6
    sta mulu16_sel.v2
    lda #>$10000/6
    sta mulu16_sel.v2+1
  //SEG306 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@9->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG307 [160] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
    jmp b10
  //SEG308 sin16s::@10
  b10:
  //SEG309 [161] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
  //SEG310 [162] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 
    lda x1
    sec
    sbc x3_6
    sta usinx
    lda x1+1
    sbc x3_6+1
    sta usinx+1
  //SEG311 [163] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
  //SEG312 [164] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG313 [165] call mulu16_sel 
  //SEG314 [180] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel]
  mulu16_sel_from_b10:
  //SEG315 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG316 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@10->mulu16_sel#1] -- register_copy 
  //SEG317 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@10->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG318 [166] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta mulu16_sel.return_10
    lda mulu16_sel.return+1
    sta mulu16_sel.return_10+1
    jmp b11
  //SEG319 sin16s::@11
  b11:
  //SEG320 [167] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
  //SEG321 [168] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
  //SEG322 [169] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG323 [170] call mulu16_sel 
  //SEG324 [180] phi from sin16s::@11 to mulu16_sel [phi:sin16s::@11->mulu16_sel]
  mulu16_sel_from_b11:
  //SEG325 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG326 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@11->mulu16_sel#1] -- register_copy 
  //SEG327 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@11->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG328 [171] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
    jmp b12
  //SEG329 sin16s::@12
  b12:
  //SEG330 [172] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
  //SEG331 [173] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vwuz1=vwuz1_ror_4 
    ldy #4
  !:
    lsr x5_128+1
    ror x5_128
    dey
    bne !-
  //SEG332 [174] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda usinx
    clc
    adc x5_128
    sta usinx
    lda usinx+1
    adc x5_128+1
    sta usinx+1
  //SEG333 [175] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15 -- vbuz1_eq_0_then_la1 
    lda isUpper
    cmp #0
    beq b15
    jmp b6
  //SEG334 sin16s::@6
  b6:
  //SEG335 [176] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 
    sec
    lda sinx
    eor #$ff
    adc #0
    sta sinx
    lda sinx+1
    eor #$ff
    adc #0
    sta sinx+1
  //SEG336 [177] phi from sin16s::@15 sin16s::@6 to sin16s::@3 [phi:sin16s::@15/sin16s::@6->sin16s::@3]
  b3_from_b15:
  b3_from_b6:
  //SEG337 [177] phi (signed word) sin16s::return#1 = (signed word~) sin16s::return#5 [phi:sin16s::@15/sin16s::@6->sin16s::@3#0] -- register_copy 
    jmp b3
  //SEG338 sin16s::@3
  b3:
    jmp breturn
  //SEG339 sin16s::@return
  breturn:
  //SEG340 [178] return 
    rts
  //SEG341 sin16s::@15
  b15:
  //SEG342 [179] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
    jmp b3_from_b15
}
//SEG343 mulu16_sel
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($19) v1, word zeropage($e) v2, byte register(X) select)
mulu16_sel: {
    .label _0 = $a
    .label _1 = $a
    .label v1 = $19
    .label v2 = $e
    .label return = $e
    .label return_1 = $19
    .label return_10 = $19
  //SEG344 [181] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 
    lda v1
    sta mul16u.a
    lda v1+1
    sta mul16u.a+1
  //SEG345 [182] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
  //SEG346 [183] call mul16u 
  //SEG347 [129] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u]
  mul16u_from_mulu16_sel:
  //SEG348 [129] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy 
  //SEG349 [129] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy 
    jsr mul16u
  //SEG350 [184] (dword) mul16u::return#3 ← (dword) mul16u::res#2
    jmp b2
  //SEG351 mulu16_sel::@2
  b2:
  //SEG352 [185] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
  //SEG353 [186] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx 
    cpx #0
    beq !e+
  !:
    asl _1
    rol _1+1
    rol _1+2
    rol _1+3
    dex
    bne !-
  !e:
  //SEG354 [187] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 
    lda _1+2
    sta return
    lda _1+3
    sta return+1
    jmp breturn
  //SEG355 mulu16_sel::@return
  breturn:
  //SEG356 [188] return 
    rts
}
//SEG357 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 = $10
    .label quotient_lo = $e
    .label return = $1b
  //SEG358 [190] call divr16u 
  //SEG359 [199] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
  divr16u_from_div32u16u:
  //SEG360 [199] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28#0 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28>>$10
    sta divr16u.dividend
    lda #>PI2_u4f28>>$10
    sta divr16u.dividend+1
  //SEG361 [199] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 
    lda #<0
    sta divr16u.rem
    lda #>0
    sta divr16u.rem+1
    jsr divr16u
  //SEG362 [191] (word) divr16u::return#2 ← (word) divr16u::return#0
    jmp b2
  //SEG363 div32u16u::@2
  b2:
  //SEG364 [192] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 
    lda divr16u.return
    sta quotient_hi
    lda divr16u.return+1
    sta quotient_hi+1
  //SEG365 [193] (word) divr16u::rem#4 ← (word) rem16u#1
  //SEG366 [194] call divr16u 
  //SEG367 [199] phi from div32u16u::@2 to divr16u [phi:div32u16u::@2->divr16u]
  divr16u_from_b2:
  //SEG368 [199] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28#0 [phi:div32u16u::@2->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28&$ffff
    sta divr16u.dividend
    lda #>PI2_u4f28&$ffff
    sta divr16u.dividend+1
  //SEG369 [199] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@2->divr16u#1] -- register_copy 
    jsr divr16u
  //SEG370 [195] (word) divr16u::return#3 ← (word) divr16u::return#0
    jmp b3
  //SEG371 div32u16u::@3
  b3:
  //SEG372 [196] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
  //SEG373 [197] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 
    lda quotient_hi
    sta return+2
    lda quotient_hi+1
    sta return+3
    lda quotient_lo
    sta return
    lda quotient_lo+1
    sta return+1
    jmp breturn
  //SEG374 div32u16u::@return
  breturn:
  //SEG375 [198] return 
    rts
}
//SEG376 divr16u
// Performs division on two 16 bit unsigned words and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage(8) dividend, word zeropage(2) rem)
divr16u: {
    .label rem = 2
    .label dividend = 8
    .label quotient = $e
    .label return = $e
  //SEG377 [200] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
  b1_from_divr16u:
  //SEG378 [200] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG379 [200] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 
    lda #<0
    sta quotient
    lda #>0
    sta quotient+1
  //SEG380 [200] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy 
  //SEG381 [200] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy 
    jmp b1
  //SEG382 [200] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
  b1_from_b3:
  //SEG383 [200] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
  //SEG384 [200] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
  //SEG385 [200] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
  //SEG386 [200] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
    jmp b1
  //SEG387 divr16u::@1
  b1:
  //SEG388 [201] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl rem
    rol rem+1
  //SEG389 [202] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 
    lda dividend+1
  //SEG390 [203] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 -- vbuaa=vbuaa_band_vbuc1 
    and #$80
  //SEG391 [204] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b2_from_b1
    jmp b4
  //SEG392 divr16u::@4
  b4:
  //SEG393 [205] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora rem
    sta rem
  //SEG394 [206] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
  b2_from_b1:
  b2_from_b4:
  //SEG395 [206] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
    jmp b2
  //SEG396 divr16u::@2
  b2:
  //SEG397 [207] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl dividend
    rol dividend+1
  //SEG398 [208] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl quotient
    rol quotient+1
  //SEG399 [209] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 
    lda rem+1
    cmp #>XSIN_SIZE
    bcc b3_from_b2
    bne !+
    lda rem
    cmp #<XSIN_SIZE
    bcc b3_from_b2
  !:
    jmp b5
  //SEG400 divr16u::@5
  b5:
  //SEG401 [210] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc quotient
    bne !+
    inc quotient+1
  !:
  //SEG402 [211] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda rem
    sec
    sbc #<XSIN_SIZE
    sta rem
    lda rem+1
    sbc #>XSIN_SIZE
    sta rem+1
  //SEG403 [212] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
  b3_from_b2:
  b3_from_b5:
  //SEG404 [212] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
  //SEG405 [212] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
    jmp b3
  //SEG406 divr16u::@3
  b3:
  //SEG407 [213] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG408 [214] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne b1_from_b3
    jmp b6
  //SEG409 divr16u::@6
  b6:
  //SEG410 [215] (word) rem16u#1 ← (word) divr16u::rem#11
    jmp breturn
  //SEG411 divr16u::@return
  breturn:
  //SEG412 [216] return 
    rts
}
//SEG413 fill
// Fill some memory with a value
// fill(byte register(X) val)
fill: {
    .label end = 8
    .label addr = 2
  //SEG414 [218] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000 -- pbuz1=pbuz2_plus_vwuc1 
    lda addr
    clc
    adc #<$3e8
    sta end
    lda addr+1
    adc #>$3e8
    sta end+1
  //SEG415 [219] phi from fill fill::@1 to fill::@1 [phi:fill/fill::@1->fill::@1]
  b1_from_fill:
  b1_from_b1:
  //SEG416 [219] phi (byte*) fill::addr#2 = (byte*) fill::addr#0 [phi:fill/fill::@1->fill::@1#0] -- register_copy 
    jmp b1
  //SEG417 fill::@1
  b1:
  //SEG418 [220] *((byte*) fill::addr#2) ← (byte) fill::val#3 -- _deref_pbuz1=vbuxx 
    txa
    ldy #0
    sta (addr),y
  //SEG419 [221] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2 -- pbuz1=_inc_pbuz1 
    inc addr
    bne !+
    inc addr+1
  !:
  //SEG420 [222] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1 -- pbuz1_neq_pbuz2_then_la1 
    lda addr+1
    cmp end+1
    bne b1_from_b1
    lda addr
    cmp end
    bne b1_from_b1
    jmp breturn
  //SEG421 fill::@return
  breturn:
  //SEG422 [223] return 
    rts
}
  .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 b25
Removing instruction jmp b28
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 b6
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b4
Removing instruction jmp b6
Removing instruction jmp b15
Removing instruction jmp b7
Removing instruction jmp b16
Removing instruction jmp b2
Removing instruction jmp b6
Removing instruction jmp breturn
Removing instruction jmp b9_1
Removing instruction jmp b9_2
Removing instruction jmp b9_3
Removing instruction jmp b9_4
Removing instruction jmp b9_5
Removing instruction jmp b26
Removing instruction jmp b5_1
Removing instruction jmp b5_2
Removing instruction jmp b5_3
Removing instruction jmp b5_4
Removing instruction jmp b5_5
Removing instruction jmp b22
Removing instruction jmp b11
Removing instruction jmp b15
Removing instruction jmp b18_1
Removing instruction jmp b18_2
Removing instruction jmp b18_3
Removing instruction jmp b18_4
Removing instruction jmp b18_5
Removing instruction jmp b35
Removing instruction jmp b14_1
Removing instruction jmp b14_2
Removing instruction jmp b14_3
Removing instruction jmp b14_4
Removing instruction jmp b14_5
Removing instruction jmp b31
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp breturn
Removing instruction jmp b6
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 b7
Removing instruction jmp b4
Removing instruction jmp b4
Removing instruction jmp b1
Removing instruction jmp b5
Removing instruction jmp b2
Removing instruction jmp b8
Removing instruction jmp b9
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp b12
Removing instruction jmp b6
Removing instruction jmp b3
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b4
Removing instruction jmp b2
Removing instruction jmp b5
Removing instruction jmp b3
Removing instruction jmp b6
Removing instruction jmp breturn
Removing instruction jmp b1
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 b1_from_b1 with b1
Replacing label b16_from_b15 with b16
Replacing label b16_from_b15 with b16
Replacing label b15_from_b35 with b15
Replacing label b1_from_b5 with b1
Replacing label b1_from_b5 with b1
Replacing label b1_from_b6 with b2
Replacing label b4_from_b2 with b4
Replacing label b2_from_b1 with b2
Replacing label b2_from_b1 with b2
Replacing label b2_from_b1 with b2
Replacing label b2_from_b1 with b2
Replacing label b3_from_b15 with b3
Replacing label 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 b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction b25:
Removing instruction b28_from_b25:
Removing instruction b28:
Removing instruction bend_from_b28:
Removing instruction toD0181_from_main:
Removing instruction toD0181:
Removing instruction b4_from_b3:
Removing instruction fill_from_b4:
Removing instruction b1_from_b1:
Removing instruction b2_from_b1:
Removing instruction sin16s_gen2_from_b2:
Removing instruction b6_from_b2:
Removing instruction loop_from_b6:
Removing instruction b16_from_b15:
Removing instruction b7_from_b16:
Removing instruction b15_from_b11:
Removing instruction b15_from_b35:
Removing instruction b1_from_b3:
Removing instruction b1_from_b5:
Removing instruction b1_from_b3:
Removing instruction b1_from_b6:
Removing instruction b1:
Removing instruction breturn:
Removing instruction b4_from_b2:
Removing instruction b4_from_b7:
Removing instruction b2_from_b1:
Removing instruction b2_from_b5:
Removing instruction mulu16_sel_from_b9:
Removing instruction b3_from_b15:
Removing instruction b3_from_b6:
Removing instruction breturn:
Removing instruction b1_from_b3:
Removing instruction b2_from_b1:
Removing instruction b2_from_b4:
Removing instruction b3_from_b2:
Removing instruction b3_from_b5:
Removing instruction breturn:
Removing instruction b1_from_fill:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction b3:
Removing instruction fill_from_b3:
Removing instruction b4:
Removing instruction b1_from_b4:
Removing instruction b2:
Removing instruction b6:
Removing instruction breturn:
Removing instruction b1_from_loop:
Removing instruction b6:
Removing instruction b15:
Removing instruction b7_from_b15:
Removing instruction b1_from_b7:
Removing instruction b2_from_render_logo:
Removing instruction b6_from_b2:
Removing instruction b9_1:
Removing instruction b9_2:
Removing instruction b9_3:
Removing instruction b9_4:
Removing instruction b9_5:
Removing instruction b26:
Removing instruction b6_from_b26:
Removing instruction b5_1:
Removing instruction b5_2:
Removing instruction b5_3:
Removing instruction b5_4:
Removing instruction b5_5:
Removing instruction b22:
Removing instruction b2_from_b22:
Removing instruction b11_from_b1:
Removing instruction b18_1:
Removing instruction b18_2:
Removing instruction b18_3:
Removing instruction b18_4:
Removing instruction b18_5:
Removing instruction b35:
Removing instruction b14_1:
Removing instruction b14_2:
Removing instruction b14_3:
Removing instruction b14_4:
Removing instruction b14_5:
Removing instruction b31:
Removing instruction b11_from_b31:
Removing instruction div32u16u_from_sin16s_gen2:
Removing instruction b3:
Removing instruction b4:
Removing instruction b5:
Removing instruction breturn:
Removing instruction mul16u_from_mul16s:
Removing instruction b6:
Removing instruction b3:
Removing instruction b1_from_mul16u:
Removing instruction breturn:
Removing instruction b7:
Removing instruction b1_from_b4:
Removing instruction b4:
Removing instruction b1_from_b4:
Removing instruction b5:
Removing instruction mulu16_sel_from_b2:
Removing instruction b8:
Removing instruction mulu16_sel_from_b8:
Removing instruction b9:
Removing instruction b10:
Removing instruction mulu16_sel_from_b10:
Removing instruction b11:
Removing instruction mulu16_sel_from_b11:
Removing instruction b12:
Removing instruction b6:
Removing instruction mul16u_from_mulu16_sel:
Removing instruction b2:
Removing instruction breturn:
Removing instruction divr16u_from_div32u16u:
Removing instruction b2:
Removing instruction divr16u_from_b2:
Removing instruction b3:
Removing instruction breturn:
Removing instruction b1_from_divr16u:
Removing instruction b4:
Removing instruction b5:
Removing instruction b6:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Skipping double jump to b7 in bne b16
Skipping double jump to b7 in bne b16
Skipping double jump to b3 in beq b15
Succesful ASM optimization Pass5DoubleJumpElimination
Relabelling long label b1_from_sin16s to b4
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b1
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 bbegin:
Removing instruction b16:
Removing instruction b15:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction jmp b7
Removing unreachable instruction jmp b3
Succesful ASM optimization Pass5UnreachableCodeElimination

FINAL SYMBOL TABLE
(label) @25
(label) @28
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(const byte*) BGCOL2#0 BGCOL2 = ((byte*))(word/dword/signed dword) 53282
(byte*) BGCOL3
(const byte*) BGCOL3#0 BGCOL3 = ((byte*))(word/dword/signed dword) 53283
(byte*) BGCOL4
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte) CYAN
(byte*) D011
(byte*) D016
(const byte*) D016#0 D016 = ((byte*))(word/dword/signed dword) 53270
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DARK_GREY
(const byte) DARK_GREY#0 DARK_GREY = (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte*) LOGO
(const byte*) LOGO#0 LOGO = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) ORANGE
(word) PI2_u4f12
(dword) PI2_u4f28
(const dword) PI2_u4f28#0 PI2_u4f28 = (dword/signed dword) 1686629713
(byte) PINK
(word) PI_HALF_u4f12
(dword) PI_HALF_u4f28
(const dword) PI_HALF_u4f28#0 PI_HALF_u4f28 = (dword/signed dword) 421657428
(word) PI_u4f12
(dword) PI_u4f28
(const dword) PI_u4f28#0 PI_u4f28 = (dword/signed dword) 843314857
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(const byte) VIC_MCM#0 VIC_MCM = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(word) XSIN_SIZE
(const word) XSIN_SIZE#0 XSIN_SIZE = (word/signed word/dword/signed dword) 512
(byte) YELLOW
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(label) div32u16u::@2
(label) div32u16u::@3
(label) div32u16u::@return
(dword) div32u16u::dividend
(word) div32u16u::divisor
(dword) div32u16u::quotient
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp ZP_WORD:16 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp ZP_WORD:14 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp ZP_DWORD:27 1.3333333333333333
(dword) div32u16u::return#2 return zp ZP_DWORD:27 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
(label) divr16u::@1
(label) divr16u::@2
(label) divr16u::@3
(label) divr16u::@4
(label) divr16u::@5
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp ZP_WORD:8 2.75
(word) divr16u::dividend#3 dividend zp ZP_WORD:8 5.0
(word) divr16u::dividend#5 dividend zp ZP_WORD:8 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp ZP_WORD:14 16.5
(word) divr16u::quotient#2 quotient zp ZP_WORD:14 11.0
(word) divr16u::quotient#3 quotient zp ZP_WORD:14 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp ZP_WORD:2 8.25
(word) divr16u::rem#1 rem zp ZP_WORD:2 22.0
(word) divr16u::rem#10 rem zp ZP_WORD:2 4.0
(word) divr16u::rem#11 rem zp ZP_WORD:2 11.666666666666666
(word) divr16u::rem#2 rem zp ZP_WORD:2 22.0
(word) divr16u::rem#4 rem zp ZP_WORD:2 4.0
(word) divr16u::rem#5 rem zp ZP_WORD:2 24.0
(word) divr16u::rem#6 rem zp ZP_WORD:2 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp ZP_WORD:14 5.285714285714286
(word) divr16u::return#2 return zp ZP_WORD:14 4.0
(word) divr16u::return#3 return zp ZP_WORD:14 4.0
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return
(byte*) fill::addr
(byte*) fill::addr#0 addr zp ZP_WORD:2 2.0
(byte*) fill::addr#1 addr zp ZP_WORD:2 16.5
(byte*) fill::addr#2 addr zp ZP_WORD:2 17.5
(byte*) fill::end
(byte*) fill::end#0 end zp ZP_WORD:8 2.6
(word) fill::size
(byte*) fill::start
(byte) fill::val
(byte) fill::val#3 reg byte x 1.8333333333333333
(void()) loop()
(signed word*~) loop::$1 $1 zp ZP_WORD:8 22.0
(label) loop::@1
(label) loop::@15
(label) loop::@16
(label) loop::@4
(label) loop::@6
(label) loop::@7
(signed word) loop::xpos
(signed word) loop::xpos#0 xpos zp ZP_WORD:8 22.0
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@6
(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
(word~) main::toD0181_$0
(word~) main::toD0181_$1
(word~) main::toD0181_$2
(byte~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(byte~) main::toD0181_$6
(byte~) main::toD0181_$7
(byte~) main::toD0181_$8
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) 16383<<(byte/signed byte/word/signed word/dword/signed dword) 2|>((word))(const byte*) LOGO#0>>(byte/signed byte/word/signed word/dword/signed dword) 2&(byte/signed byte/word/signed word/dword/signed dword) 15
(byte*) main::toD0181_screen
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 $16 zp ZP_WORD:14 4.0
(word~) mul16s::$6 $6 zp ZP_WORD:14 4.0
(label) mul16s::@1
(label) mul16s::@2
(label) mul16s::@3
(label) mul16s::@6
(label) mul16s::@return
(signed word) mul16s::a
(signed word) mul16s::a#0 a zp ZP_WORD:23 2.6
(signed word) mul16s::b
(dword) mul16s::m
(dword) mul16s::m#0 m zp ZP_DWORD:10 2.0
(dword) mul16s::m#1 m zp ZP_DWORD:10 4.0
(dword) mul16s::m#4 m zp ZP_DWORD:10 6.0
(signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp ZP_DWORD:10 4.333333333333333
(signed dword) mul16s::return#2 return zp ZP_DWORD:10 22.0
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte/word~) mul16u::$1 reg byte a 202.0
(label) mul16u::@1
(label) mul16u::@2
(label) mul16u::@4
(label) mul16u::@7
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp ZP_WORD:16 101.0
(word) mul16u::a#2 a zp ZP_WORD:16 2.0
(word) mul16u::a#3 a zp ZP_WORD:16 67.66666666666666
(word) mul16u::a#6 a zp ZP_WORD:16 3.0
(word~) mul16u::a#8 a zp ZP_WORD:16 4.0
(word) mul16u::b
(word) mul16u::b#1 b zp ZP_WORD:14 4.0
(word) mul16u::b#2 b zp ZP_WORD:14 4.0
(dword) mul16u::mb
(dword) mul16u::mb#0 mb zp ZP_DWORD:18 4.0
(dword) mul16u::mb#1 mb zp ZP_DWORD:18 202.0
(dword) mul16u::mb#2 mb zp ZP_DWORD:18 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp ZP_DWORD:10 202.0
(dword) mul16u::res#2 res zp ZP_DWORD:10 43.85714285714286
(dword) mul16u::res#6 res zp ZP_DWORD:10 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp ZP_DWORD:10 4.0
(dword) mul16u::return#3 return zp ZP_DWORD:10 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 $0 zp ZP_DWORD:10 4.0
(dword~) mulu16_sel::$1 $1 zp ZP_DWORD:10 4.0
(label) mulu16_sel::@2
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp ZP_WORD:14 4.0
(word) mulu16_sel::return#1 return#1 zp ZP_WORD:25 4.0
(word) mulu16_sel::return#10 return#10 zp ZP_WORD:25 4.0
(word) mulu16_sel::return#11 return zp ZP_WORD:14 4.0
(word) mulu16_sel::return#12 return zp ZP_WORD:14 1.714285714285714
(word) mulu16_sel::return#2 return zp ZP_WORD:14 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp ZP_WORD:25 2.0
(word) mulu16_sel::v1#1 v1 zp ZP_WORD:25 2.0
(word) mulu16_sel::v1#2 v1 zp ZP_WORD:25 4.0
(word) mulu16_sel::v1#3 v1 zp ZP_WORD:25 2.0
(word) mulu16_sel::v1#4 v1 zp ZP_WORD:25 2.0
(word) mulu16_sel::v1#5 v1 zp ZP_WORD:25 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#1 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#3 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#4 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#5 v2 zp ZP_WORD:14 5.0
(signed word) rem16s
(word) rem16u
(word) rem16u#1 rem16u zp ZP_WORD:2 0.8
(signed byte) rem8s
(byte) rem8u
(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/signed word/word/dword/signed dword~) render_logo::$15 reg byte a 202.0
(signed byte~) render_logo::$17 reg byte a 2.0
(byte~) render_logo::$2 reg byte a 4.0
(byte/signed word/word/dword/signed dword~) render_logo::$23 reg byte a 202.0
(signed word~) render_logo::$3 $3 zp ZP_WORD:14 4.0
(byte/signed word/word/dword/signed dword~) render_logo::$34 reg byte a 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$38 reg byte a 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$42 reg byte a 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$46 reg byte a 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$50 reg byte a 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$80 reg byte a 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$84 reg byte a 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$88 reg byte a 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$92 reg byte a 202.0
(byte/signed word/word/dword/signed dword~) render_logo::$96 reg byte a 202.0
(label) render_logo::@1
(label) render_logo::@11
(label) render_logo::@14
(label) render_logo::@14_1
(label) render_logo::@14_2
(label) render_logo::@14_3
(label) render_logo::@14_4
(label) render_logo::@14_5
(label) render_logo::@15
(label) render_logo::@18
(label) render_logo::@18_1
(label) render_logo::@18_2
(label) render_logo::@18_3
(label) render_logo::@18_4
(label) render_logo::@18_5
(label) render_logo::@2
(label) render_logo::@22
(label) render_logo::@26
(label) render_logo::@31
(label) render_logo::@35
(label) render_logo::@5
(label) render_logo::@5_1
(label) render_logo::@5_2
(label) render_logo::@5_3
(label) render_logo::@5_4
(label) render_logo::@5_5
(label) render_logo::@6
(label) render_logo::@9
(label) render_logo::@9_1
(label) render_logo::@9_2
(label) render_logo::@9_3
(label) render_logo::@9_4
(label) render_logo::@9_5
(label) render_logo::@return
(byte) render_logo::line
(byte) render_logo::logo_idx
(byte) render_logo::logo_idx#10 reg byte y 60.73333333333334
(byte) render_logo::logo_idx#11 reg byte y 53.86666666666667
(byte~) render_logo::logo_idx#13 reg byte y 4.0
(byte) render_logo::logo_idx#2 reg byte y 202.0
(byte) render_logo::logo_idx#3 reg byte y 202.0
(byte) render_logo::logo_start
(byte) render_logo::screen_idx
(byte) render_logo::screen_idx#14 reg byte x 126.25
(byte) render_logo::screen_idx#17 reg byte x 126.25
(byte) render_logo::screen_idx#19 reg byte x 72.14285714285714
(byte) render_logo::screen_idx#2 reg byte x 202.0
(byte) render_logo::screen_idx#20 reg byte x 64.92857142857143
(byte) render_logo::screen_idx#3 reg byte x 101.0
(byte) render_logo::screen_idx#4 reg byte x 101.0
(byte) render_logo::screen_idx#5 reg byte x 202.0
(signed byte) render_logo::x_char
(signed byte) render_logo::x_char#0 x_char zp ZP_BYTE:22 0.36363636363636365
(signed word) render_logo::xpos
(signed word) render_logo::xpos#0 xpos zp ZP_WORD:8 2.4285714285714284
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$6 $6 zp ZP_DWORD:10 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
(label) sin16s::@12
(label) sin16s::@15
(label) sin16s::@2
(label) sin16s::@3
(label) sin16s::@4
(label) sin16s::@5
(label) sin16s::@6
(label) sin16s::@8
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp ZP_BYTE:22 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp ZP_WORD:23 22.0
(signed word) sin16s::return#1 return zp ZP_WORD:23 5.0
(signed word~) sin16s::return#5 return zp ZP_WORD:23 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp ZP_WORD:23 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp ZP_WORD:23 0.3333333333333333
(word) sin16s::usinx#1 usinx zp ZP_WORD:23 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp ZP_DWORD:10 8.5
(dword) sin16s::x#1 x zp ZP_DWORD:10 4.0
(dword) sin16s::x#2 x zp ZP_DWORD:10 4.0
(dword) sin16s::x#4 x zp ZP_DWORD:10 5.0
(dword) sin16s::x#6 x zp ZP_DWORD:10 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp ZP_WORD:31 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp ZP_WORD:25 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp ZP_WORD:25 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp ZP_WORD:14 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp ZP_WORD:25 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp ZP_WORD:14 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:14 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::$5 $5 zp ZP_DWORD:10 22.0
(word~) sin16s_gen2::$6 $6 zp ZP_WORD:14 11.0
(signed word~) sin16s_gen2::$8 $8 zp ZP_WORD:14 22.0
(label) sin16s_gen2::@1
(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 ZP_WORD:8 16.5
(word) sin16s_gen2::i#2 i zp ZP_WORD:8 1.6923076923076923
(signed word) sin16s_gen2::max
(const signed word) sin16s_gen2::max#0 max = (word/signed word/dword/signed dword) 320
(signed word) sin16s_gen2::min
(const signed word) sin16s_gen2::min#0 min = -(word/signed word/dword/signed dword) 320
(signed word) sin16s_gen2::offs
(const signed word) sin16s_gen2::offs#0 offs = (const signed word) sin16s_gen2::min#0+(const signed word) sin16s_gen2::ampl#0>>(byte/signed byte/word/signed word/dword/signed dword) 1
(signed word*) sin16s_gen2::sintab
(signed word*) sin16s_gen2::sintab#0 sintab zp ZP_WORD:2 5.5
(signed word*) sin16s_gen2::sintab#2 sintab zp ZP_WORD:2 3.0
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 step zp ZP_DWORD:27 0.8125
(word) sin16s_gen2::wavelength
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#1 x zp ZP_DWORD:4 7.333333333333333
(dword) sin16s_gen2::x#2 x zp ZP_DWORD:4 2.75
(signed word[XSIN_SIZE#0]) xsin
(const signed word[XSIN_SIZE#0]) xsin#0 xsin = { fill( XSIN_SIZE#0, 0) }
(word) xsin_idx
(word) xsin_idx#11 xsin_idx zp ZP_WORD:2 4.714285714285714
(word) xsin_idx#19 xsin_idx zp ZP_WORD:2 11.0
(word) xsin_idx#3 xsin_idx zp ZP_WORD:2 11.0

reg byte x [ main::ch#2 main::ch#1 ]
zp ZP_WORD:2 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
reg byte x [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ]
reg byte y [ render_logo::logo_idx#11 render_logo::logo_idx#2 ]
reg byte y [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ]
reg byte x [ render_logo::screen_idx#14 render_logo::screen_idx#20 render_logo::screen_idx#4 render_logo::screen_idx#5 ]
zp ZP_DWORD:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
zp ZP_WORD:8 [ sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 loop::$1 loop::xpos#0 render_logo::xpos#0 fill::end#0 ]
zp ZP_DWORD:10 [ 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::$5 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$6 ]
zp ZP_WORD:14 [ 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 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 render_logo::$3 sin16s_gen2::$6 sin16s_gen2::$8 mul16s::$6 mul16s::$16 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 ]
zp ZP_WORD:16 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 div32u16u::quotient_hi#0 ]
zp ZP_DWORD:18 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp ZP_BYTE:22 [ sin16s::isUpper#2 render_logo::x_char#0 ]
zp ZP_WORD:23 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
zp ZP_WORD:25 [ 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 x [ mulu16_sel::select#5 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
reg byte x [ fill::val#3 ]
reg byte a [ render_logo::$0 ]
reg byte a [ render_logo::$1 ]
reg byte a [ render_logo::$2 ]
reg byte a [ render_logo::$15 ]
reg byte a [ render_logo::$34 ]
reg byte a [ render_logo::$38 ]
reg byte a [ render_logo::$42 ]
reg byte a [ render_logo::$46 ]
reg byte a [ render_logo::$50 ]
reg byte a [ render_logo::$17 ]
reg byte a [ render_logo::$23 ]
reg byte a [ render_logo::$80 ]
reg byte a [ render_logo::$84 ]
reg byte a [ render_logo::$88 ]
reg byte a [ render_logo::$92 ]
reg byte a [ render_logo::$96 ]
zp ZP_DWORD:27 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
reg byte a [ mul16u::$1 ]
zp ZP_WORD:31 [ sin16s::x1#0 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]


FINAL ASSEMBLER
Score: 41389

//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 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
  .label SCREEN = $400
  .label LOGO = $2000
  .const XSIN_SIZE = $200
  .label rem16u = 2
  .label xsin_idx = 2
//SEG3 @begin
//SEG4 @25
//SEG5 kickasm(location (const byte*) LOGO#0) {{ .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)  }}
//SEG6 [2] phi from @25 to @28 [phi:@25->@28]
//SEG7 @28
//SEG8 [3] call main 
//SEG9 [4] phi from @28 to @end [phi:@28->@end]
//SEG10 @end
//SEG11 main
main: {
    .const toD0181_return = (>(SCREEN&$3fff)<<2)|(>LOGO)>>2&$f
  //SEG12 asm { sei  }
    sei
  //SEG13 [6] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 -- _deref_pbuc1=vbuc2 
    lda #WHITE
    sta BORDERCOL
  //SEG14 [7] *((const byte*) BGCOL2#0) ← (const byte) DARK_GREY#0 -- _deref_pbuc1=vbuc2 
    lda #DARK_GREY
    sta BGCOL2
  //SEG15 [8] *((const byte*) BGCOL#0) ← *((const byte*) BGCOL2#0) -- _deref_pbuc1=_deref_pbuc2 
    sta BGCOL
  //SEG16 [9] *((const byte*) BGCOL3#0) ← (const byte) BLACK#0 -- _deref_pbuc1=vbuc2 
    lda #BLACK
    sta BGCOL3
  //SEG17 [10] phi from main to main::toD0181 [phi:main->main::toD0181]
  //SEG18 main::toD0181
  //SEG19 main::@3
  //SEG20 [11] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 -- _deref_pbuc1=vbuc2 
    lda #toD0181_return
    sta D018
  //SEG21 [12] *((const byte*) D016#0) ← (const byte) VIC_MCM#0 -- _deref_pbuc1=vbuc2 
    lda #VIC_MCM
    sta D016
  //SEG22 [13] call fill 
  //SEG23 [217] phi from main::@3 to fill [phi:main::@3->fill]
  //SEG24 [217] phi (byte) fill::val#3 = (const byte) BLACK#0 [phi:main::@3->fill#0] -- vbuxx=vbuc1 
    ldx #BLACK
  //SEG25 [217] phi (byte*) fill::addr#0 = (const byte*) SCREEN#0 [phi:main::@3->fill#1] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta fill.addr
    lda #>SCREEN
    sta fill.addr+1
    jsr fill
  //SEG26 [14] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
  //SEG27 main::@4
  //SEG28 [15] call fill 
  //SEG29 [217] phi from main::@4 to fill [phi:main::@4->fill]
  //SEG30 [217] phi (byte) fill::val#3 = (const byte) WHITE#0|(byte/signed byte/word/signed word/dword/signed dword) 8 [phi:main::@4->fill#0] -- vbuxx=vbuc1 
    ldx #WHITE|8
  //SEG31 [217] phi (byte*) fill::addr#0 = (const byte*) COLS#0 [phi:main::@4->fill#1] -- pbuz1=pbuc1 
    lda #<COLS
    sta fill.addr
    lda #>COLS
    sta fill.addr+1
    jsr fill
  //SEG32 [16] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
  //SEG33 [16] phi (byte) main::ch#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@4->main::@1#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG34 [16] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  //SEG35 [16] phi (byte) main::ch#2 = (byte) main::ch#1 [phi:main::@1->main::@1#0] -- register_copy 
  //SEG36 main::@1
  b1:
  //SEG37 [17] *((const byte*) SCREEN#0 + (byte) main::ch#2) ← (byte) main::ch#2 -- pbuc1_derefidx_vbuxx=vbuxx 
    txa
    sta SCREEN,x
  //SEG38 [18] (byte) main::ch#1 ← ++ (byte) main::ch#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG39 [19] if((byte) main::ch#1!=(byte/word/signed word/dword/signed dword) 240) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$f0
    bne b1
  //SEG40 [20] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  //SEG41 main::@2
  //SEG42 [21] call sin16s_gen2 
  //SEG43 [98] phi from main::@2 to sin16s_gen2 [phi:main::@2->sin16s_gen2]
    jsr sin16s_gen2
  //SEG44 [22] phi from main::@2 to main::@6 [phi:main::@2->main::@6]
  //SEG45 main::@6
  //SEG46 [23] call loop 
  //SEG47 [25] phi from main::@6 to loop [phi:main::@6->loop]
    jsr loop
  //SEG48 main::@return
  //SEG49 [24] return 
    rts
}
//SEG50 loop
loop: {
    .label _1 = 8
    .label xpos = 8
  //SEG51 [26] phi from loop to loop::@1 [phi:loop->loop::@1]
  //SEG52 [26] phi (word) xsin_idx#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop->loop::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta xsin_idx
    sta xsin_idx+1
  //SEG53 loop::@1
  b1:
  // Wait for the raster to reach the bottom of the screen
  //SEG54 loop::@4
  b4:
  //SEG55 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@4 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda RASTER
    cmp #$ff
    bne b4
  //SEG56 loop::@6
  //SEG57 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1 
    inc BORDERCOL
  //SEG58 [29] (signed word*~) loop::$1 ← (const signed word[XSIN_SIZE#0]) xsin#0 + (word) xsin_idx#11 -- pwsz1=pwsc1_plus_vwuz2 
    lda xsin_idx
    clc
    adc #<xsin
    sta _1
    lda xsin_idx+1
    adc #>xsin
    sta _1+1
  //SEG59 [30] (signed word) loop::xpos#0 ← *((signed word*~) loop::$1) -- vwsz1=_deref_pwsz1 
    ldy #0
    lda (xpos),y
    tax
    iny
    lda (xpos),y
    stx xpos
    sta xpos+1
  //SEG60 [31] (signed word) render_logo::xpos#0 ← (signed word) loop::xpos#0
  //SEG61 [32] call render_logo 
    jsr render_logo
  //SEG62 loop::@15
  //SEG63 [33] (word) xsin_idx#3 ← (word) xsin_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- vwuz1=vwuz1_plus_2 
    lda xsin_idx
    clc
    adc #2
    sta xsin_idx
    bcc !+
    inc xsin_idx+1
  !:
  //SEG64 [34] if((word) xsin_idx#3!=(const word) XSIN_SIZE#0*(byte/signed byte/word/signed word/dword/signed dword) 2) goto loop::@16 -- vwuz1_neq_vwuc1_then_la1 
    lda xsin_idx+1
    cmp #>XSIN_SIZE*2
    bne b7
    lda xsin_idx
    cmp #<XSIN_SIZE*2
    bne b7
  //SEG65 [35] phi from loop::@15 to loop::@7 [phi:loop::@15->loop::@7]
  //SEG66 [35] phi (word) xsin_idx#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:loop::@15->loop::@7#0] -- vwuz1=vbuc1 
    lda #<0
    sta xsin_idx
    sta xsin_idx+1
  //SEG67 loop::@7
  b7:
  //SEG68 [36] *((const byte*) BORDERCOL#0) ← -- *((const byte*) BORDERCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1 
    dec BORDERCOL
  //SEG69 [26] phi from loop::@7 to loop::@1 [phi:loop::@7->loop::@1]
  //SEG70 [26] phi (word) xsin_idx#11 = (word) xsin_idx#19 [phi:loop::@7->loop::@1#0] -- register_copy 
    jmp b1
  //SEG71 [37] phi from loop::@15 to loop::@16 [phi:loop::@15->loop::@16]
  //SEG72 loop::@16
  //SEG73 [35] phi from loop::@16 to loop::@7 [phi:loop::@16->loop::@7]
  //SEG74 [35] phi (word) xsin_idx#19 = (word) xsin_idx#3 [phi:loop::@16->loop::@7#0] -- register_copy 
}
//SEG75 render_logo
// render_logo(signed word zeropage(8) xpos)
render_logo: {
    .label _3 = $e
    .label xpos = 8
    .label x_char = $16
  //SEG76 [38] (byte~) render_logo::$0 ← ((byte)) (signed word) render_logo::xpos#0 -- vbuaa=_byte_vwsz1 
    lda xpos
  //SEG77 [39] (byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte/signed byte/word/signed word/dword/signed dword) 7 -- vbuaa=vbuaa_band_vbuc1 
    and #7
  //SEG78 [40] (byte~) render_logo::$2 ← (const byte) VIC_MCM#0 | (byte~) render_logo::$1 -- vbuaa=vbuc1_bor_vbuaa 
    ora #VIC_MCM
  //SEG79 [41] *((const byte*) D016#0) ← (byte~) render_logo::$2 -- _deref_pbuc1=vbuaa 
    sta D016
  //SEG80 [42] (signed word~) render_logo::$3 ← (signed word) render_logo::xpos#0 >> (byte/signed byte/word/signed word/dword/signed dword) 3 -- vwsz1=vwsz2_ror_3 
    lda xpos+1
    cmp #$80
    ror
    sta _3+1
    lda xpos
    ror
    sta _3
    lda _3+1
    cmp #$80
    ror _3+1
    ror _3
    lda _3+1
    cmp #$80
    ror _3+1
    ror _3
  //SEG81 [43] (signed byte) render_logo::x_char#0 ← ((signed byte)) (signed word~) render_logo::$3 -- vbsz1=_sbyte_vwsz2 
    lda _3
    sta x_char
  //SEG82 [44] if((signed word) render_logo::xpos#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto render_logo::@1 -- vwsz1_lt_0_then_la1 
    lda xpos+1
    bmi b1
  //SEG83 [45] phi from render_logo to render_logo::@2 [phi:render_logo->render_logo::@2]
  //SEG84 [45] phi (byte) render_logo::screen_idx#17 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_logo->render_logo::@2#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG85 render_logo::@2
  b2:
  //SEG86 [46] if((byte) render_logo::screen_idx#17!=(byte)(signed byte) render_logo::x_char#0) goto render_logo::@5 -- vbuxx_neq_vbuz1_then_la1 
    cpx x_char
    bne b5
  //SEG87 [47] phi from render_logo::@2 to render_logo::@6 [phi:render_logo::@2->render_logo::@6]
  //SEG88 [47] phi (byte) render_logo::logo_idx#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_logo::@2->render_logo::@6#0] -- vbuyy=vbuc1 
    ldy #0
  //SEG89 [47] phi (byte) render_logo::screen_idx#19 = (byte) render_logo::screen_idx#17 [phi:render_logo::@2->render_logo::@6#1] -- register_copy 
  //SEG90 render_logo::@6
  b6:
  //SEG91 [48] if((byte) render_logo::screen_idx#19!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@9 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne b9
  //SEG92 render_logo::@return
  breturn:
  //SEG93 [49] return 
    rts
  //SEG94 render_logo::@9
  b9:
  //SEG95 [50] (byte/signed word/word/dword/signed dword~) render_logo::$15 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuaa=vbuyy_plus_0 
    tya
  //SEG96 [51] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$15 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN,x
  //SEG97 render_logo::@9_1
  //SEG98 [52] (byte/signed word/word/dword/signed dword~) render_logo::$34 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*1
  //SEG99 [53] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$34 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*1,x
  //SEG100 render_logo::@9_2
  //SEG101 [54] (byte/signed word/word/dword/signed dword~) render_logo::$38 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*2
  //SEG102 [55] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$38 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*2,x
  //SEG103 render_logo::@9_3
  //SEG104 [56] (byte/signed word/word/dword/signed dword~) render_logo::$42 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*3
  //SEG105 [57] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$42 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*3,x
  //SEG106 render_logo::@9_4
  //SEG107 [58] (byte/signed word/word/dword/signed dword~) render_logo::$46 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*4
  //SEG108 [59] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$46 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*4,x
  //SEG109 render_logo::@9_5
  //SEG110 [60] (byte/signed word/word/dword/signed dword~) render_logo::$50 ← (byte) render_logo::logo_idx#11 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*5
  //SEG111 [61] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#19) ← (byte/signed word/word/dword/signed dword~) render_logo::$50 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*5,x
  //SEG112 render_logo::@26
  //SEG113 [62] (byte) render_logo::screen_idx#3 ← ++ (byte) render_logo::screen_idx#19 -- vbuxx=_inc_vbuxx 
    inx
  //SEG114 [63] (byte) render_logo::logo_idx#2 ← ++ (byte) render_logo::logo_idx#11 -- vbuyy=_inc_vbuyy 
    iny
  //SEG115 [47] phi from render_logo::@26 to render_logo::@6 [phi:render_logo::@26->render_logo::@6]
  //SEG116 [47] phi (byte) render_logo::logo_idx#11 = (byte) render_logo::logo_idx#2 [phi:render_logo::@26->render_logo::@6#0] -- register_copy 
  //SEG117 [47] phi (byte) render_logo::screen_idx#19 = (byte) render_logo::screen_idx#3 [phi:render_logo::@26->render_logo::@6#1] -- register_copy 
    jmp b6
  //SEG118 render_logo::@5
  b5:
  //SEG119 [64] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN,x
  //SEG120 render_logo::@5_1
  //SEG121 [65] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*1,x
  //SEG122 render_logo::@5_2
  //SEG123 [66] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*2,x
  //SEG124 render_logo::@5_3
  //SEG125 [67] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*3,x
  //SEG126 render_logo::@5_4
  //SEG127 [68] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*4,x
  //SEG128 render_logo::@5_5
  //SEG129 [69] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#17) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*5,x
  //SEG130 render_logo::@22
  //SEG131 [70] (byte) render_logo::screen_idx#2 ← ++ (byte) render_logo::screen_idx#17 -- vbuxx=_inc_vbuxx 
    inx
  //SEG132 [45] phi from render_logo::@22 to render_logo::@2 [phi:render_logo::@22->render_logo::@2]
  //SEG133 [45] phi (byte) render_logo::screen_idx#17 = (byte) render_logo::screen_idx#2 [phi:render_logo::@22->render_logo::@2#0] -- register_copy 
    jmp b2
  //SEG134 render_logo::@1
  b1:
  //SEG135 [71] (signed byte~) render_logo::$17 ← - (signed byte) render_logo::x_char#0 -- vbsaa=_neg_vbsz1 
    lda x_char
    eor #$ff
    clc
    adc #1
  //SEG136 [72] (byte~) render_logo::logo_idx#13 ← (byte)(signed byte~) render_logo::$17 -- vbuyy=vbuaa 
    tay
  //SEG137 [73] phi from render_logo::@1 to render_logo::@11 [phi:render_logo::@1->render_logo::@11]
  //SEG138 [73] phi (byte) render_logo::screen_idx#20 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render_logo::@1->render_logo::@11#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG139 [73] phi (byte) render_logo::logo_idx#10 = (byte~) render_logo::logo_idx#13 [phi:render_logo::@1->render_logo::@11#1] -- register_copy 
  //SEG140 render_logo::@11
  b11:
  //SEG141 [74] if((byte) render_logo::logo_idx#10!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@14 -- vbuyy_neq_vbuc1_then_la1 
    cpy #$28
    bne b14
  //SEG142 [75] phi from render_logo::@11 render_logo::@35 to render_logo::@15 [phi:render_logo::@11/render_logo::@35->render_logo::@15]
  //SEG143 [75] phi (byte) render_logo::screen_idx#14 = (byte) render_logo::screen_idx#20 [phi:render_logo::@11/render_logo::@35->render_logo::@15#0] -- register_copy 
  //SEG144 render_logo::@15
  b15:
  //SEG145 [76] if((byte) render_logo::screen_idx#14!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@18 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$28
    bne b18
    jmp breturn
  //SEG146 render_logo::@18
  b18:
  //SEG147 [77] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #0
    sta SCREEN,x
  //SEG148 render_logo::@18_1
  //SEG149 [78] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*1,x
  //SEG150 render_logo::@18_2
  //SEG151 [79] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*2,x
  //SEG152 render_logo::@18_3
  //SEG153 [80] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*3,x
  //SEG154 render_logo::@18_4
  //SEG155 [81] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*4,x
  //SEG156 render_logo::@18_5
  //SEG157 [82] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#14) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- pbuc1_derefidx_vbuxx=vbuc2 
    sta SCREEN+$28*5,x
  //SEG158 render_logo::@35
  //SEG159 [83] (byte) render_logo::screen_idx#5 ← ++ (byte) render_logo::screen_idx#14 -- vbuxx=_inc_vbuxx 
    inx
    jmp b15
  //SEG160 render_logo::@14
  b14:
  //SEG161 [84] (byte/signed word/word/dword/signed dword~) render_logo::$23 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 0 -- vbuaa=vbuyy_plus_0 
    tya
  //SEG162 [85] *((const byte*) SCREEN#0 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$23 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN,x
  //SEG163 render_logo::@14_1
  //SEG164 [86] (byte/signed word/word/dword/signed dword~) render_logo::$80 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*1
  //SEG165 [87] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$80 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*1,x
  //SEG166 render_logo::@14_2
  //SEG167 [88] (byte/signed word/word/dword/signed dword~) render_logo::$84 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*2
  //SEG168 [89] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$84 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*2,x
  //SEG169 render_logo::@14_3
  //SEG170 [90] (byte/signed word/word/dword/signed dword~) render_logo::$88 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*3
  //SEG171 [91] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$88 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*3,x
  //SEG172 render_logo::@14_4
  //SEG173 [92] (byte/signed word/word/dword/signed dword~) render_logo::$92 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*4
  //SEG174 [93] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 4 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$92 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*4,x
  //SEG175 render_logo::@14_5
  //SEG176 [94] (byte/signed word/word/dword/signed dword~) render_logo::$96 ← (byte) render_logo::logo_idx#10 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 -- vbuaa=vbuyy_plus_vbuc1 
    tya
    clc
    adc #$28*5
  //SEG177 [95] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 5 + (byte) render_logo::screen_idx#20) ← (byte/signed word/word/dword/signed dword~) render_logo::$96 -- pbuc1_derefidx_vbuxx=vbuaa 
    sta SCREEN+$28*5,x
  //SEG178 render_logo::@31
  //SEG179 [96] (byte) render_logo::screen_idx#4 ← ++ (byte) render_logo::screen_idx#20 -- vbuxx=_inc_vbuxx 
    inx
  //SEG180 [97] (byte) render_logo::logo_idx#3 ← ++ (byte) render_logo::logo_idx#10 -- vbuyy=_inc_vbuyy 
    iny
  //SEG181 [73] phi from render_logo::@31 to render_logo::@11 [phi:render_logo::@31->render_logo::@11]
  //SEG182 [73] phi (byte) render_logo::screen_idx#20 = (byte) render_logo::screen_idx#4 [phi:render_logo::@31->render_logo::@11#0] -- register_copy 
  //SEG183 [73] phi (byte) render_logo::logo_idx#10 = (byte) render_logo::logo_idx#3 [phi:render_logo::@31->render_logo::@11#1] -- register_copy 
    jmp b11
}
//SEG184 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* zeropage(2) sintab)
sin16s_gen2: {
    .const min = -$140
    .const max = $140
    .label ampl = max-min
    .const offs = min+(ampl>>1)
    .label _5 = $a
    .label _6 = $e
    .label _8 = $e
    .label step = $1b
    .label sintab = 2
    .label x = 4
    .label i = 8
  //SEG185 [99] call div32u16u 
  //SEG186 [189] phi from sin16s_gen2 to div32u16u [phi:sin16s_gen2->div32u16u]
    jsr div32u16u
  //SEG187 [100] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0
  //SEG188 sin16s_gen2::@3
  //SEG189 [101] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2
  //SEG190 [102] phi from sin16s_gen2::@3 to sin16s_gen2::@1 [phi:sin16s_gen2::@3->sin16s_gen2::@1]
  //SEG191 [102] phi (word) sin16s_gen2::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#0] -- vwuz1=vbuc1 
    lda #<0
    sta i
    sta i+1
  //SEG192 [102] phi (signed word*) sin16s_gen2::sintab#2 = (const signed word[XSIN_SIZE#0]) xsin#0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#1] -- pwsz1=pwsc1 
    lda #<xsin
    sta sintab
    lda #>xsin
    sta sintab+1
  //SEG193 [102] phi (dword) sin16s_gen2::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s_gen2::@3->sin16s_gen2::@1#2] -- vduz1=vbuc1 
    lda #0
    sta x
    sta x+1
    sta x+2
    sta x+3
  // u[4.28]
  //SEG194 [102] phi from sin16s_gen2::@5 to sin16s_gen2::@1 [phi:sin16s_gen2::@5->sin16s_gen2::@1]
  //SEG195 [102] phi (word) sin16s_gen2::i#2 = (word) sin16s_gen2::i#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#0] -- register_copy 
  //SEG196 [102] phi (signed word*) sin16s_gen2::sintab#2 = (signed word*) sin16s_gen2::sintab#0 [phi:sin16s_gen2::@5->sin16s_gen2::@1#1] -- register_copy 
  //SEG197 [102] phi (dword) sin16s_gen2::x#2 = (dword) sin16s_gen2::x#1 [phi:sin16s_gen2::@5->sin16s_gen2::@1#2] -- register_copy 
  //SEG198 sin16s_gen2::@1
  b1:
  //SEG199 [103] (dword) sin16s::x#0 ← (dword) sin16s_gen2::x#2 -- vduz1=vduz2 
    lda x
    sta sin16s.x
    lda x+1
    sta sin16s.x+1
    lda x+2
    sta sin16s.x+2
    lda x+3
    sta sin16s.x+3
  //SEG200 [104] call sin16s 
    jsr sin16s
  //SEG201 [105] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1
  //SEG202 sin16s_gen2::@4
  //SEG203 [106] (signed word) mul16s::a#0 ← (signed word) sin16s::return#0
  //SEG204 [107] call mul16s 
    jsr mul16s
  //SEG205 [108] (signed dword) mul16s::return#2 ← (signed dword) mul16s::return#0
  //SEG206 sin16s_gen2::@5
  //SEG207 [109] (signed dword~) sin16s_gen2::$5 ← (signed dword) mul16s::return#2
  //SEG208 [110] (word~) sin16s_gen2::$6 ← > (signed dword~) sin16s_gen2::$5 -- vwuz1=_hi_vdsz2 
    lda _5+2
    sta _6
    lda _5+3
    sta _6+1
  //SEG209 [111] (signed word~) sin16s_gen2::$8 ← (const signed word) sin16s_gen2::offs#0 + (signed word)(word~) sin16s_gen2::$6 -- vwsz1=vwsc1_plus_vwsz1 
    clc
    lda _8
    adc #<offs
    sta _8
    lda _8+1
    adc #>offs
    sta _8+1
  //SEG210 [112] *((signed word*) sin16s_gen2::sintab#2) ← (signed word~) sin16s_gen2::$8 -- _deref_pwsz1=vwsz2 
    ldy #0
    lda _8
    sta (sintab),y
    iny
    lda _8+1
    sta (sintab),y
  //SEG211 [113] (signed word*) sin16s_gen2::sintab#0 ← (signed word*) sin16s_gen2::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 
    lda sintab
    clc
    adc #2
    sta sintab
    bcc !+
    inc sintab+1
  !:
  //SEG212 [114] (dword) sin16s_gen2::x#1 ← (dword) sin16s_gen2::x#2 + (dword) sin16s_gen2::step#0 -- vduz1=vduz1_plus_vduz2 
    lda x
    clc
    adc step
    sta x
    lda x+1
    adc step+1
    sta x+1
    lda x+2
    adc step+2
    sta x+2
    lda x+3
    adc step+3
    sta x+3
  //SEG213 [115] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 -- vwuz1=_inc_vwuz1 
    inc i
    bne !+
    inc i+1
  !:
  //SEG214 [116] if((word) sin16s_gen2::i#1<(const word) XSIN_SIZE#0) goto sin16s_gen2::@1 -- vwuz1_lt_vwuc1_then_la1 
    lda i+1
    cmp #>XSIN_SIZE
    bcc b1
    bne !+
    lda i
    cmp #<XSIN_SIZE
    bcc b1
  !:
  //SEG215 sin16s_gen2::@return
  //SEG216 [117] return 
    rts
}
//SEG217 mul16s
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage($17) a)
mul16s: {
    .label _6 = $e
    .label _16 = $e
    .label m = $a
    .label return = $a
    .label a = $17
  //SEG218 [118] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#0 -- vwuz1=vwuz2 
    lda a
    sta mul16u.a
    lda a+1
    sta mul16u.a+1
  //SEG219 [119] call mul16u 
  //SEG220 [129] phi from mul16s to mul16u [phi:mul16s->mul16u]
  //SEG221 [129] phi (word) mul16u::a#6 = (word~) mul16u::a#8 [phi:mul16s->mul16u#0] -- register_copy 
  //SEG222 [129] phi (word) mul16u::b#2 = ((word))(const signed word) sin16s_gen2::ampl#0 [phi:mul16s->mul16u#1] -- vwuz1=vwuc1 
    lda #<sin16s_gen2.ampl
    sta mul16u.b
    lda #>sin16s_gen2.ampl
    sta mul16u.b+1
    jsr mul16u
  //SEG223 [120] (dword) mul16u::return#2 ← (dword) mul16u::res#2
  //SEG224 mul16s::@6
  //SEG225 [121] (dword) mul16s::m#0 ← (dword) mul16u::return#2
  //SEG226 [122] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1 -- vwsz1_ge_0_then_la1 
    lda a+1
    bpl b2
  //SEG227 mul16s::@3
  //SEG228 [123] (word~) mul16s::$6 ← > (dword) mul16s::m#0 -- vwuz1=_hi_vduz2 
    lda m+2
    sta _6
    lda m+3
    sta _6+1
  //SEG229 [124] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda _16
    sec
    sbc #<sin16s_gen2.ampl
    sta _16
    lda _16+1
    sbc #>sin16s_gen2.ampl
    sta _16+1
  //SEG230 [125] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 -- vduz1=vduz1_sethi_vwuz2 
    lda _16
    sta m+2
    lda _16+1
    sta m+3
  //SEG231 [126] phi from mul16s::@3 mul16s::@6 to mul16s::@1 [phi:mul16s::@3/mul16s::@6->mul16s::@1]
  //SEG232 [126] phi (dword) mul16s::m#4 = (dword) mul16s::m#1 [phi:mul16s::@3/mul16s::@6->mul16s::@1#0] -- register_copy 
  //SEG233 mul16s::@1
  //SEG234 mul16s::@2
  b2:
  //SEG235 [127] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4 -- vdsz1=_sdword_vduz1 
  //SEG236 mul16s::@return
  //SEG237 [128] return 
    rts
}
//SEG238 mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($10) a, word zeropage($e) b)
mul16u: {
    .label mb = $12
    .label a = $10
    .label res = $a
    .label return = $a
    .label b = $e
  //SEG239 [130] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2 -- vduz1=_dword_vwuz2 
    lda b
    sta mb
    lda b+1
    sta mb+1
    lda #0
    sta mb+2
    sta mb+3
  //SEG240 [131] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
  //SEG241 [131] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#0 [phi:mul16u->mul16u::@1#0] -- register_copy 
  //SEG242 [131] phi (dword) mul16u::res#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:mul16u->mul16u::@1#1] -- vduz1=vbuc1 
    sta res
    sta res+1
    sta res+2
    sta res+3
  //SEG243 [131] phi (word) mul16u::a#3 = (word) mul16u::a#6 [phi:mul16u->mul16u::@1#2] -- register_copy 
  //SEG244 mul16u::@1
  b1:
  //SEG245 [132] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 -- vwuz1_neq_0_then_la1 
    lda a
    bne b2
    lda a+1
    bne b2
  //SEG246 mul16u::@return
  //SEG247 [133] return 
    rts
  //SEG248 mul16u::@2
  b2:
  //SEG249 [134] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1 -- vbuaa=vwuz1_band_vbuc1 
    lda a
    and #1
  //SEG250 [135] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b4
  //SEG251 mul16u::@7
  //SEG252 [136] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2 -- vduz1=vduz1_plus_vduz2 
    lda res
    clc
    adc mb
    sta res
    lda res+1
    adc mb+1
    sta res+1
    lda res+2
    adc mb+2
    sta res+2
    lda res+3
    adc mb+3
    sta res+3
  //SEG253 [137] phi from mul16u::@2 mul16u::@7 to mul16u::@4 [phi:mul16u::@2/mul16u::@7->mul16u::@4]
  //SEG254 [137] phi (dword) mul16u::res#6 = (dword) mul16u::res#2 [phi:mul16u::@2/mul16u::@7->mul16u::@4#0] -- register_copy 
  //SEG255 mul16u::@4
  b4:
  //SEG256 [138] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_ror_1 
    clc
    ror a+1
    ror a
  //SEG257 [139] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vduz1=vduz1_rol_1 
    asl mb
    rol mb+1
    rol mb+2
    rol mb+3
  //SEG258 [131] phi from mul16u::@4 to mul16u::@1 [phi:mul16u::@4->mul16u::@1]
  //SEG259 [131] phi (dword) mul16u::mb#2 = (dword) mul16u::mb#1 [phi:mul16u::@4->mul16u::@1#0] -- register_copy 
  //SEG260 [131] phi (dword) mul16u::res#2 = (dword) mul16u::res#6 [phi:mul16u::@4->mul16u::@1#1] -- register_copy 
  //SEG261 [131] phi (word) mul16u::a#3 = (word) mul16u::a#0 [phi:mul16u::@4->mul16u::@1#2] -- register_copy 
    jmp b1
}
//SEG262 sin16s
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range  -$7fff - $7fff
// sin16s(dword zeropage($a) x)
sin16s: {
    .label _6 = $a
    .label x = $a
    .label return = $17
    .label x1 = $1f
    .label x2 = $19
    .label x3 = $19
    .label x3_6 = $e
    .label usinx = $17
    .label x4 = $19
    .label x5 = $e
    .label x5_128 = $e
    .label sinx = $17
    .label isUpper = $16
  //SEG263 [140] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_u4f28>>$10
    bcc b4
    bne !+
    lda x+2
    cmp #<PI_u4f28>>$10
    bcc b4
    bne !+
    lda x+1
    cmp #>PI_u4f28
    bcc b4
    bne !+
    lda x
    cmp #<PI_u4f28
    bcc b4
  !:
  //SEG264 sin16s::@4
  //SEG265 [141] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 -- vduz1=vduz1_minus_vduc1 
    lda x
    sec
    sbc #<PI_u4f28
    sta x
    lda x+1
    sbc #>PI_u4f28
    sta x+1
    lda x+2
    sbc #<PI_u4f28>>$10
    sta x+2
    lda x+3
    sbc #>PI_u4f28>>$10
    sta x+3
  //SEG266 [142] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
  //SEG267 [142] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #1
    sta isUpper
  //SEG268 [142] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy 
    jmp b1
  //SEG269 [142] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
  b4:
  //SEG270 [142] phi (byte) sin16s::isUpper#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta isUpper
  //SEG271 [142] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy 
  //SEG272 sin16s::@1
  b1:
  //SEG273 [143] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2 -- vduz1_lt_vduc1_then_la1 
    lda x+3
    cmp #>PI_HALF_u4f28>>$10
    bcc b2
    bne !+
    lda x+2
    cmp #<PI_HALF_u4f28>>$10
    bcc b2
    bne !+
    lda x+1
    cmp #>PI_HALF_u4f28
    bcc b2
    bne !+
    lda x
    cmp #<PI_HALF_u4f28
    bcc b2
  !:
  //SEG274 sin16s::@5
  //SEG275 [144] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4 -- vduz1=vduc1_minus_vduz1 
    lda #<PI_u4f28
    sec
    sbc x
    sta x
    lda #>PI_u4f28
    sbc x+1
    sta x+1
    lda #<PI_u4f28>>$10
    sbc x+2
    sta x+2
    lda #>PI_u4f28>>$10
    sbc x+3
    sta x+3
  //SEG276 [145] phi from sin16s::@1 sin16s::@5 to sin16s::@2 [phi:sin16s::@1/sin16s::@5->sin16s::@2]
  //SEG277 [145] phi (dword) sin16s::x#6 = (dword) sin16s::x#4 [phi:sin16s::@1/sin16s::@5->sin16s::@2#0] -- register_copy 
  //SEG278 sin16s::@2
  b2:
  //SEG279 [146] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3 -- vduz1=vduz1_rol_3 
    ldy #3
  !:
    asl _6
    rol _6+1
    rol _6+2
    rol _6+3
    dey
    bne !-
  //SEG280 [147] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 -- vwuz1=_hi_vduz2 
    lda _6+2
    sta x1
    lda _6+3
    sta x1+1
  //SEG281 [148] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v1
    lda x1+1
    sta mulu16_sel.v1+1
  //SEG282 [149] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG283 [150] call mulu16_sel 
  //SEG284 [180] phi from sin16s::@2 to mulu16_sel [phi:sin16s::@2->mulu16_sel]
  //SEG285 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@2->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG286 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#0 [phi:sin16s::@2->mulu16_sel#1] -- register_copy 
  //SEG287 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#0 [phi:sin16s::@2->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG288 [151] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
  //SEG289 sin16s::@8
  //SEG290 [152] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta x2
    lda mulu16_sel.return+1
    sta x2+1
  //SEG291 [153] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
  //SEG292 [154] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG293 [155] call mulu16_sel 
  //SEG294 [180] phi from sin16s::@8 to mulu16_sel [phi:sin16s::@8->mulu16_sel]
  //SEG295 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@8->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
  //SEG296 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#1 [phi:sin16s::@8->mulu16_sel#1] -- register_copy 
  //SEG297 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#1 [phi:sin16s::@8->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG298 [156] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta mulu16_sel.return_1
    lda mulu16_sel.return+1
    sta mulu16_sel.return_1+1
  //SEG299 sin16s::@9
  //SEG300 [157] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
  //SEG301 [158] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
  //SEG302 [159] call mulu16_sel 
  //SEG303 [180] phi from sin16s::@9 to mulu16_sel [phi:sin16s::@9->mulu16_sel]
  //SEG304 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:sin16s::@9->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #1
  //SEG305 [180] phi (word) mulu16_sel::v2#5 = (dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 [phi:sin16s::@9->mulu16_sel#1] -- vwuz1=vwuc1 
    lda #<$10000/6
    sta mulu16_sel.v2
    lda #>$10000/6
    sta mulu16_sel.v2+1
  //SEG306 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#2 [phi:sin16s::@9->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG307 [160] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
  //SEG308 sin16s::@10
  //SEG309 [161] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
  //SEG310 [162] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0 -- vwuz1=vwuz2_minus_vwuz3 
    lda x1
    sec
    sbc x3_6
    sta usinx
    lda x1+1
    sbc x3_6+1
    sta usinx+1
  //SEG311 [163] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
  //SEG312 [164] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG313 [165] call mulu16_sel 
  //SEG314 [180] phi from sin16s::@10 to mulu16_sel [phi:sin16s::@10->mulu16_sel]
  //SEG315 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@10->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG316 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#3 [phi:sin16s::@10->mulu16_sel#1] -- register_copy 
  //SEG317 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#3 [phi:sin16s::@10->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG318 [166] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12 -- vwuz1=vwuz2 
    lda mulu16_sel.return
    sta mulu16_sel.return_10
    lda mulu16_sel.return+1
    sta mulu16_sel.return_10+1
  //SEG319 sin16s::@11
  //SEG320 [167] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
  //SEG321 [168] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
  //SEG322 [169] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0 -- vwuz1=vwuz2 
    lda x1
    sta mulu16_sel.v2
    lda x1+1
    sta mulu16_sel.v2+1
  //SEG323 [170] call mulu16_sel 
  //SEG324 [180] phi from sin16s::@11 to mulu16_sel [phi:sin16s::@11->mulu16_sel]
  //SEG325 [180] phi (byte) mulu16_sel::select#5 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:sin16s::@11->mulu16_sel#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG326 [180] phi (word) mulu16_sel::v2#5 = (word) mulu16_sel::v2#4 [phi:sin16s::@11->mulu16_sel#1] -- register_copy 
  //SEG327 [180] phi (word) mulu16_sel::v1#5 = (word) mulu16_sel::v1#4 [phi:sin16s::@11->mulu16_sel#2] -- register_copy 
    jsr mulu16_sel
  //SEG328 [171] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
  //SEG329 sin16s::@12
  //SEG330 [172] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
  //SEG331 [173] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4 -- vwuz1=vwuz1_ror_4 
    ldy #4
  !:
    lsr x5_128+1
    ror x5_128
    dey
    bne !-
  //SEG332 [174] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0 -- vwuz1=vwuz1_plus_vwuz2 
    lda usinx
    clc
    adc x5_128
    sta usinx
    lda usinx+1
    adc x5_128+1
    sta usinx+1
  //SEG333 [175] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15 -- vbuz1_eq_0_then_la1 
    lda isUpper
    cmp #0
    beq b3
  //SEG334 sin16s::@6
  //SEG335 [176] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 -- vwsz1=_neg_vwsz1 
    sec
    lda sinx
    eor #$ff
    adc #0
    sta sinx
    lda sinx+1
    eor #$ff
    adc #0
    sta sinx+1
  //SEG336 [177] phi from sin16s::@15 sin16s::@6 to sin16s::@3 [phi:sin16s::@15/sin16s::@6->sin16s::@3]
  //SEG337 [177] phi (signed word) sin16s::return#1 = (signed word~) sin16s::return#5 [phi:sin16s::@15/sin16s::@6->sin16s::@3#0] -- register_copy 
  //SEG338 sin16s::@3
  b3:
  //SEG339 sin16s::@return
  //SEG340 [178] return 
    rts
  //SEG341 sin16s::@15
  //SEG342 [179] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
}
//SEG343 mulu16_sel
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($19) v1, word zeropage($e) v2, byte register(X) select)
mulu16_sel: {
    .label _0 = $a
    .label _1 = $a
    .label v1 = $19
    .label v2 = $e
    .label return = $e
    .label return_1 = $19
    .label return_10 = $19
  //SEG344 [181] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2 
    lda v1
    sta mul16u.a
    lda v1+1
    sta mul16u.a+1
  //SEG345 [182] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
  //SEG346 [183] call mul16u 
  //SEG347 [129] phi from mulu16_sel to mul16u [phi:mulu16_sel->mul16u]
  //SEG348 [129] phi (word) mul16u::a#6 = (word) mul16u::a#2 [phi:mulu16_sel->mul16u#0] -- register_copy 
  //SEG349 [129] phi (word) mul16u::b#2 = (word) mul16u::b#1 [phi:mulu16_sel->mul16u#1] -- register_copy 
    jsr mul16u
  //SEG350 [184] (dword) mul16u::return#3 ← (dword) mul16u::res#2
  //SEG351 mulu16_sel::@2
  //SEG352 [185] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
  //SEG353 [186] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 -- vduz1=vduz1_rol_vbuxx 
    cpx #0
    beq !e+
  !:
    asl _1
    rol _1+1
    rol _1+2
    rol _1+3
    dex
    bne !-
  !e:
  //SEG354 [187] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 -- vwuz1=_hi_vduz2 
    lda _1+2
    sta return
    lda _1+3
    sta return+1
  //SEG355 mulu16_sel::@return
  //SEG356 [188] return 
    rts
}
//SEG357 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 = $10
    .label quotient_lo = $e
    .label return = $1b
  //SEG358 [190] call divr16u 
  //SEG359 [199] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
  //SEG360 [199] phi (word) divr16u::dividend#5 = >(const dword) PI2_u4f28#0 [phi:div32u16u->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28>>$10
    sta divr16u.dividend
    lda #>PI2_u4f28>>$10
    sta divr16u.dividend+1
  //SEG361 [199] phi (word) divr16u::rem#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:div32u16u->divr16u#1] -- vwuz1=vbuc1 
    lda #<0
    sta divr16u.rem
    sta divr16u.rem+1
    jsr divr16u
  //SEG362 [191] (word) divr16u::return#2 ← (word) divr16u::return#0
  //SEG363 div32u16u::@2
  //SEG364 [192] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 -- vwuz1=vwuz2 
    lda divr16u.return
    sta quotient_hi
    lda divr16u.return+1
    sta quotient_hi+1
  //SEG365 [193] (word) divr16u::rem#4 ← (word) rem16u#1
  //SEG366 [194] call divr16u 
  //SEG367 [199] phi from div32u16u::@2 to divr16u [phi:div32u16u::@2->divr16u]
  //SEG368 [199] phi (word) divr16u::dividend#5 = <(const dword) PI2_u4f28#0 [phi:div32u16u::@2->divr16u#0] -- vwuz1=vwuc1 
    lda #<PI2_u4f28&$ffff
    sta divr16u.dividend
    lda #>PI2_u4f28&$ffff
    sta divr16u.dividend+1
  //SEG369 [199] phi (word) divr16u::rem#10 = (word) divr16u::rem#4 [phi:div32u16u::@2->divr16u#1] -- register_copy 
    jsr divr16u
  //SEG370 [195] (word) divr16u::return#3 ← (word) divr16u::return#0
  //SEG371 div32u16u::@3
  //SEG372 [196] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
  //SEG373 [197] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 -- vduz1=vwuz2_dword_vwuz3 
    lda quotient_hi
    sta return+2
    lda quotient_hi+1
    sta return+3
    lda quotient_lo
    sta return
    lda quotient_lo+1
    sta return+1
  //SEG374 div32u16u::@return
  //SEG375 [198] return 
    rts
}
//SEG376 divr16u
// Performs division on two 16 bit unsigned words and an initial remainder
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage(8) dividend, word zeropage(2) rem)
divr16u: {
    .label rem = 2
    .label dividend = 8
    .label quotient = $e
    .label return = $e
  //SEG377 [200] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
  //SEG378 [200] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 
    ldx #0
  //SEG379 [200] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 
    txa
    sta quotient
    sta quotient+1
  //SEG380 [200] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#5 [phi:divr16u->divr16u::@1#2] -- register_copy 
  //SEG381 [200] phi (word) divr16u::rem#5 = (word) divr16u::rem#10 [phi:divr16u->divr16u::@1#3] -- register_copy 
  //SEG382 [200] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1]
  //SEG383 [200] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy 
  //SEG384 [200] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy 
  //SEG385 [200] phi (word) divr16u::dividend#3 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy 
  //SEG386 [200] phi (word) divr16u::rem#5 = (word) divr16u::rem#11 [phi:divr16u::@3->divr16u::@1#3] -- register_copy 
  //SEG387 divr16u::@1
  b1:
  //SEG388 [201] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl rem
    rol rem+1
  //SEG389 [202] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 -- vbuaa=_hi_vwuz1 
    lda dividend+1
  //SEG390 [203] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 -- vbuaa=vbuaa_band_vbuc1 
    and #$80
  //SEG391 [204] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 -- vbuaa_eq_0_then_la1 
    cmp #0
    beq b2
  //SEG392 divr16u::@4
  //SEG393 [205] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_bor_vbuc1 
    lda #1
    ora rem
    sta rem
  //SEG394 [206] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2]
  //SEG395 [206] phi (word) divr16u::rem#6 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy 
  //SEG396 divr16u::@2
  b2:
  //SEG397 [207] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl dividend
    rol dividend+1
  //SEG398 [208] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 -- vwuz1=vwuz1_rol_1 
    asl quotient
    rol quotient+1
  //SEG399 [209] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3 -- vwuz1_lt_vwuc1_then_la1 
    lda rem+1
    cmp #>XSIN_SIZE
    bcc b3
    bne !+
    lda rem
    cmp #<XSIN_SIZE
    bcc b3
  !:
  //SEG400 divr16u::@5
  //SEG401 [210] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 -- vwuz1=_inc_vwuz1 
    inc quotient
    bne !+
    inc quotient+1
  !:
  //SEG402 [211] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0 -- vwuz1=vwuz1_minus_vwuc1 
    lda rem
    sec
    sbc #<XSIN_SIZE
    sta rem
    lda rem+1
    sbc #>XSIN_SIZE
    sta rem+1
  //SEG403 [212] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3]
  //SEG404 [212] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy 
  //SEG405 [212] phi (word) divr16u::rem#11 = (word) divr16u::rem#6 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy 
  //SEG406 divr16u::@3
  b3:
  //SEG407 [213] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG408 [214] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne b1
  //SEG409 divr16u::@6
  //SEG410 [215] (word) rem16u#1 ← (word) divr16u::rem#11
  //SEG411 divr16u::@return
  //SEG412 [216] return 
    rts
}
//SEG413 fill
// Fill some memory with a value
// fill(byte register(X) val)
fill: {
    .label end = 8
    .label addr = 2
  //SEG414 [218] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000 -- pbuz1=pbuz2_plus_vwuc1 
    lda addr
    clc
    adc #<$3e8
    sta end
    lda addr+1
    adc #>$3e8
    sta end+1
  //SEG415 [219] phi from fill fill::@1 to fill::@1 [phi:fill/fill::@1->fill::@1]
  //SEG416 [219] phi (byte*) fill::addr#2 = (byte*) fill::addr#0 [phi:fill/fill::@1->fill::@1#0] -- register_copy 
  //SEG417 fill::@1
  b1:
  //SEG418 [220] *((byte*) fill::addr#2) ← (byte) fill::val#3 -- _deref_pbuz1=vbuxx 
    txa
    ldy #0
    sta (addr),y
  //SEG419 [221] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2 -- pbuz1=_inc_pbuz1 
    inc addr
    bne !+
    inc addr+1
  !:
  //SEG420 [222] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1 -- pbuz1_neq_pbuz2_then_la1 
    lda addr+1
    cmp end+1
    bne b1
    lda addr
    cmp end
    bne b1
  //SEG421 fill::@return
  //SEG422 [223] return 
    rts
}
  .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)


