1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Added a sinus plotter to test the sinus curves against macro-generated sinus.

This commit is contained in:
jespergravgaard 2018-07-10 11:56:01 +02:00
parent ad0512cc9d
commit cda0a9b498
20 changed files with 14544 additions and 117 deletions

View File

@ -108,7 +108,7 @@ public class AsmFormat {
} else {
return getAsmConstant(program, new ConstantBinary(new ConstantInteger((long)0xff), Operators.BOOL_AND, operand), outerPrecedence, codeScope);
}
} else if(Operators.CAST_WORD.equals(operator) || Operators.CAST_SWORD.equals(operator) || Operators.CAST_PTRBY.equals(operator)|| Operators.CAST_PTRBO.equals(operator)) {
} else if(Operators.CAST_WORD.equals(operator) || Operators.CAST_SWORD.equals(operator) || Operators.CAST_PTRBY.equals(operator)|| Operators.CAST_PTRSBY.equals(operator)|| Operators.CAST_PTRWO.equals(operator)|| Operators.CAST_PTRSWO.equals(operator)|| Operators.CAST_PTRDWO.equals(operator)|| Operators.CAST_PTRSDWO.equals(operator)|| Operators.CAST_PTRBO.equals(operator)) {
SymbolType operandType = SymbolTypeInference.inferType(program.getScope(), operand);
if(SymbolType.isWord(operandType) || SymbolType.isSWord(operandType) || SymbolType.isByte(operandType) || SymbolType.isSByte(operandType) || operandType instanceof SymbolTypePointer) {
// No cast needed

View File

@ -0,0 +1,8 @@
lda {z1}
cmp #{c1}
lda {z1}+1
sbc #0
bvc !+
eor #$80
!:
bpl {la1}

View File

@ -0,0 +1,30 @@
package dk.camelot64.kickc.model.operators;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.types.SymbolTypeSimple;
import dk.camelot64.kickc.model.values.ConstantInteger;
import dk.camelot64.kickc.model.values.ConstantLiteral;
import dk.camelot64.kickc.model.values.ConstantPointer;
/** Unary Cast to double word pointer operator ( (word*) x ) */
public class OperatorCastPtrDWord extends OperatorUnary {
public OperatorCastPtrDWord(int precedence) {
super("((dword*))", "_ptrdwo_", precedence);
}
@Override
public ConstantLiteral calculateLiteral(ConstantLiteral value) {
if(value instanceof ConstantInteger) {
return new ConstantPointer(((ConstantInteger) value).getInteger(), SymbolType.DWORD);
}
throw new CompileError("Calculation not implemented " + getOperator() + " " + value );
}
@Override
public SymbolType inferType(SymbolTypeSimple operandType) {
return new SymbolTypePointer(SymbolType.DWORD);
}
}

View File

@ -0,0 +1,30 @@
package dk.camelot64.kickc.model.operators;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.types.SymbolTypeSimple;
import dk.camelot64.kickc.model.values.ConstantInteger;
import dk.camelot64.kickc.model.values.ConstantLiteral;
import dk.camelot64.kickc.model.values.ConstantPointer;
/** Unary Cast to signed byte pointer operator ( (signed byte*) x ) */
public class OperatorCastPtrSignedByte extends OperatorUnary {
public OperatorCastPtrSignedByte(int precedence) {
super("((signed byte*))", "_ptrsby_", precedence);
}
@Override
public ConstantLiteral calculateLiteral(ConstantLiteral value) {
if(value instanceof ConstantInteger) {
return new ConstantPointer(((ConstantInteger) value).getInteger(), SymbolType.SBYTE);
}
throw new CompileError("Calculation not implemented " + getOperator() + " " + value );
}
@Override
public SymbolType inferType(SymbolTypeSimple operandType) {
return new SymbolTypePointer(SymbolType.SBYTE);
}
}

View File

@ -0,0 +1,30 @@
package dk.camelot64.kickc.model.operators;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.types.SymbolTypeSimple;
import dk.camelot64.kickc.model.values.ConstantInteger;
import dk.camelot64.kickc.model.values.ConstantLiteral;
import dk.camelot64.kickc.model.values.ConstantPointer;
/** Unary Cast to signed double word pointer operator ( (signed word*) x ) */
public class OperatorCastPtrSignedDWord extends OperatorUnary {
public OperatorCastPtrSignedDWord(int precedence) {
super("((signed dword*))", "_ptrsdwo_", precedence);
}
@Override
public ConstantLiteral calculateLiteral(ConstantLiteral value) {
if(value instanceof ConstantInteger) {
return new ConstantPointer(((ConstantInteger) value).getInteger(), SymbolType.SDWORD);
}
throw new CompileError("Calculation not implemented " + getOperator() + " " + value );
}
@Override
public SymbolType inferType(SymbolTypeSimple operandType) {
return new SymbolTypePointer(SymbolType.SDWORD);
}
}

View File

@ -0,0 +1,30 @@
package dk.camelot64.kickc.model.operators;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.types.SymbolTypeSimple;
import dk.camelot64.kickc.model.values.ConstantInteger;
import dk.camelot64.kickc.model.values.ConstantLiteral;
import dk.camelot64.kickc.model.values.ConstantPointer;
/** Unary Cast to signed word pointer operator ( (signed word*) x ) */
public class OperatorCastPtrSignedWord extends OperatorUnary {
public OperatorCastPtrSignedWord(int precedence) {
super("((signed word*))", "_ptrswo_", precedence);
}
@Override
public ConstantLiteral calculateLiteral(ConstantLiteral value) {
if(value instanceof ConstantInteger) {
return new ConstantPointer(((ConstantInteger) value).getInteger(), SymbolType.SWORD);
}
throw new CompileError("Calculation not implemented " + getOperator() + " " + value );
}
@Override
public SymbolType inferType(SymbolTypeSimple operandType) {
return new SymbolTypePointer(SymbolType.SWORD);
}
}

View File

@ -0,0 +1,30 @@
package dk.camelot64.kickc.model.operators;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.types.SymbolTypeSimple;
import dk.camelot64.kickc.model.values.ConstantInteger;
import dk.camelot64.kickc.model.values.ConstantLiteral;
import dk.camelot64.kickc.model.values.ConstantPointer;
/** Unary Cast to word pointer operator ( (word*) x ) */
public class OperatorCastPtrWord extends OperatorUnary {
public OperatorCastPtrWord(int precedence) {
super("((word*))", "_ptrwo_", precedence);
}
@Override
public ConstantLiteral calculateLiteral(ConstantLiteral value) {
if(value instanceof ConstantInteger) {
return new ConstantPointer(((ConstantInteger) value).getInteger(), SymbolType.WORD);
}
throw new CompileError("Calculation not implemented " + getOperator() + " " + value );
}
@Override
public SymbolType inferType(SymbolTypeSimple operandType) {
return new SymbolTypePointer(SymbolType.WORD);
}
}

View File

@ -26,6 +26,11 @@ public class Operators {
public static final OperatorUnary CAST_DWORD = new OperatorCastDWord(2);
public static final OperatorUnary CAST_SDWORD = new OperatorCastSDWord(2);
public static final OperatorUnary CAST_PTRBY = new OperatorCastPtrByte(2);
public static final OperatorUnary CAST_PTRSBY = new OperatorCastPtrSignedByte(2);
public static final OperatorUnary CAST_PTRWO = new OperatorCastPtrWord(2);
public static final OperatorUnary CAST_PTRSWO = new OperatorCastPtrSignedWord(2);
public static final OperatorUnary CAST_PTRDWO = new OperatorCastPtrDWord(2);
public static final OperatorUnary CAST_PTRSDWO = new OperatorCastPtrSignedDWord(2);
public static final OperatorUnary CAST_PTRBO = new OperatorCastPtrBool(2);
public static final OperatorUnary CAST_BOOL= new OperatorCastBool(2);
public static final OperatorBinary MULTIPLY = new OperatorMultiply(3);
@ -152,6 +157,16 @@ public class Operators {
return CAST_BOOL;
} else if(castType instanceof SymbolTypePointer && SymbolType.BYTE.equals(((SymbolTypePointer) castType).getElementType())) {
return CAST_PTRBY;
} else if(castType instanceof SymbolTypePointer && SymbolType.SBYTE.equals(((SymbolTypePointer) castType).getElementType())) {
return CAST_PTRSBY;
} else if(castType instanceof SymbolTypePointer && SymbolType.WORD.equals(((SymbolTypePointer) castType).getElementType())) {
return CAST_PTRWO;
} else if(castType instanceof SymbolTypePointer && SymbolType.SWORD.equals(((SymbolTypePointer) castType).getElementType())) {
return CAST_PTRSWO;
} else if(castType instanceof SymbolTypePointer && SymbolType.DWORD.equals(((SymbolTypePointer) castType).getElementType())) {
return CAST_PTRDWO;
} else if(castType instanceof SymbolTypePointer && SymbolType.SDWORD.equals(((SymbolTypePointer) castType).getElementType())) {
return CAST_PTRSDWO;
} else if(castType instanceof SymbolTypePointer && SymbolType.BOOLEAN.equals(((SymbolTypePointer) castType).getElementType())) {
return CAST_PTRBO;
} else {

View File

@ -243,6 +243,11 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
case "((dword))":
case "((signed dword))":
case "((byte*))":
case "((signed byte*))":
case "((word*))":
case "((signed word*))":
case "((dword*))":
case "((signed dword*))":
case "((boolean*))":
case "!":
return new ConstantUnary(operator, c);

View File

@ -54,6 +54,21 @@ public class Pass2NopCastElimination extends Pass2SsaOptimization {
} else if(SymbolType.isWord(rValType) && Operators.CAST_PTRBY.equals(assignment.getOperator())) {
isNopCast = true;
toType = new SymbolTypePointer(SymbolType.BYTE);
} else if(SymbolType.isWord(rValType) && Operators.CAST_PTRSBY.equals(assignment.getOperator())) {
isNopCast = true;
toType = new SymbolTypePointer(SymbolType.SBYTE);
} else if(SymbolType.isWord(rValType) && Operators.CAST_PTRWO.equals(assignment.getOperator())) {
isNopCast = true;
toType = new SymbolTypePointer(SymbolType.WORD);
} else if(SymbolType.isWord(rValType) && Operators.CAST_PTRSWO.equals(assignment.getOperator())) {
isNopCast = true;
toType = new SymbolTypePointer(SymbolType.SWORD);
} else if(SymbolType.isWord(rValType) && Operators.CAST_PTRDWO.equals(assignment.getOperator())) {
isNopCast = true;
toType = new SymbolTypePointer(SymbolType.DWORD);
} else if(SymbolType.isWord(rValType) && Operators.CAST_PTRSDWO.equals(assignment.getOperator())) {
isNopCast = true;
toType = new SymbolTypePointer(SymbolType.SDWORD);
} else if(rValType instanceof SymbolTypePointer && Operators.CAST_WORD.equals(assignment.getOperator())) {
isNopCast = true;
toType = SymbolType.WORD;

View File

@ -46,6 +46,11 @@ public class TestPrograms {
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
}
@Test
public void testSinePlotter() throws IOException, URISyntaxException {
compileAndCompare("sine-plotter");
}
@Test
public void testScrollLogo() throws IOException, URISyntaxException {
compileAndCompare("scrolllogo");

View File

@ -0,0 +1,50 @@
// Fill the screen with a specific char
void screen_fill(byte* screen, byte ch) {
for( byte y: 0..24) {
for(byte x:0..39) {
*screen++ = ch;
}
}
}
// Tables for the plotter - initialized by calling bitmap_init();
const byte[256] bitmap_plot_ylo;
const byte[256] bitmap_plot_yhi;
const byte[256] bitmap_plot_bit;
// Initialize bitmap plotting tables
void bitmap_init(byte* bitmap) {
byte bits = $80;
for(byte x : 0..255) {
bitmap_plot_bit[x] = bits;
bits >>= 1;
if(bits==0) {
bits = $80;
}
}
byte* yoffs = bitmap;
for(byte y : 0..255) {
bitmap_plot_ylo[y] = y&$7 | <yoffs;
bitmap_plot_yhi[y] = >yoffs;
if((y&$7)==7) {
yoffs = yoffs + 40*8;
}
}
}
// Clear all graphics on the bitmap
void bitmap_clear() {
byte* bitmap = (byte*) { bitmap_plot_yhi[0], bitmap_plot_ylo[0] };
for( byte y: 0..39 ) {
for( byte x: 0..199 ) {
*bitmap++ = 0;
}
}
}
// Plot a single dot in the bitmap
void bitmap_plot(word x, byte y) {
byte* plotter = (byte*) { bitmap_plot_yhi[y], bitmap_plot_ylo[y] };
plotter += ( x & $fff8 );
*plotter |= bitmap_plot_bit[<x];
}

View File

@ -0,0 +1,9 @@
// Simple outines for working with memory
// Fill some memory with a value
void fill(byte* start, word size, byte val) {
byte* end = start + size;
for(byte* addr = start; addr!=end; addr++) {
*addr = val;
}
}

View File

@ -1,5 +1,6 @@
import "c64.kc"
import "sinus.kc"
import "memory.kc"
byte* SCREEN = $400;
byte* LOGO = $2000;
@ -98,14 +99,6 @@ void render_logo(signed word xpos) {
}
// Fill some memory with a value
void fill(byte* start, word size, byte val) {
byte* end = start + size;
for(byte* addr = start; addr!=end; addr++) {
*addr = val;
}
}
kickasm(resources "logo.png" ) {{
.label pc_restore = *
.pc = $2000

View File

@ -0,0 +1,72 @@
// Generate a big sinus and plot it on a bitmap
import "c64.kc"
import "sinus.kc"
import "memory.kc"
import "bitmap2.kc"
byte* SCREEN = $400;
byte* BITMAP = $2000;
const word SIN_SIZE = 512;
signed word[512] align($100) sin;
signed word* sin2 = $1400;
kickasm {{
.label pc_restore = *
.pc = $1400
.for(var i=0; i<512; i++) {
.word sin(toRadians([i*360]/512))*320
}
.pc = pc_restore
}}
void main() {
asm { sei } // Disable normal interrupt
// Disable kernal & basic
*PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK;
*PROCPORT = PROCPORT_RAM_IO;
*D011 = VIC_BMM|VIC_DEN|VIC_RSEL|3;
vicSelectGfxBank(SCREEN);
*D016 = VIC_CSEL;
*D018 = toD018(SCREEN, BITMAP);
fill(SCREEN, 1000, WHITE);
bitmap_init(BITMAP);
bitmap_clear();
sin16s_gen2(sin, SIN_SIZE, -320, 320);
render_sine();
while(true) {
(*BGCOL)++;
}
}
void render_sine() {
word xpos = 0;
for(word sin_idx=0; sin_idx<SIN_SIZE; sin_idx++) {
signed word sin_val = *(sin+sin_idx<<1);
byte ypos = wrap_y(sin_val);
bitmap_plot(xpos,ypos);
signed word sin2_val = *(sin2+sin_idx<<1);
byte ypos2 = wrap_y(sin2_val+10);
bitmap_plot(xpos,ypos2);
xpos++;
if(xpos==320) {
xpos = 0;
}
}
}
byte wrap_y(signed word y) {
while(y>=200) {
y -= 200;
}
while(y<0) {
y += 200;
}
return (byte)y;
}

View File

@ -1,6 +1,7 @@
PARSING src/test/java/dk/camelot64/kickc/test/kc/scrolllogo.kc
import "c64.kc"
import "sinus.kc"
import "memory.kc"
byte* SCREEN = $400;
byte* LOGO = $2000;
@ -99,14 +100,6 @@ void render_logo(signed word xpos) {
}
// Fill some memory with a value
void fill(byte* start, word size, byte val) {
byte* end = start + size;
for(byte* addr = start; addr!=end; addr++) {
*addr = val;
}
}
kickasm(resources "logo.png" ) {{
.label pc_restore = *
.pc = $2000
@ -616,6 +609,19 @@ Adding pre/post-modifier (word) sin16s_gen2::i ← ++ (word) sin16s_gen2::i
Adding pre/post-modifier (signed byte*) sin8s_gen::sintab ← ++ (signed byte*) sin8s_gen::sintab
Adding pre/post-modifier (word) sin8s_gen::i ← ++ (word) sin8s_gen::i
Adding pre/post-modifier (byte) sin8s::usinx ← -- (byte) sin8s::usinx
Importing memory.kc
PARSING src/test/java/dk/camelot64/kickc/test/kc/memory.kc
// Simple outines for working with memory
// Fill some memory with a value
void fill(byte* start, word size, byte val) {
byte* end = start + size;
for(byte* addr = start; addr!=end; addr++) {
*addr = val;
}
}
Adding pre/post-modifier (byte*) fill::addr ← ++ (byte*) fill::addr
Adding pre/post-modifier *((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL)
Adding pre/post-modifier *((byte*) BORDERCOL) ← -- *((byte*) BORDERCOL)
Adding pre/post-modifier (byte) render_logo::screen_idx ← ++ (byte) render_logo::screen_idx
@ -624,7 +630,6 @@ Adding pre/post-modifier (byte) render_logo::logo_idx ← ++ (byte) render_logo:
Adding pre/post-modifier (byte) render_logo::screen_idx ← ++ (byte) render_logo::screen_idx
Adding pre/post-modifier (byte) render_logo::logo_idx ← ++ (byte) render_logo::logo_idx
Adding pre/post-modifier (byte) render_logo::screen_idx ← ++ (byte) render_logo::screen_idx
Adding pre/post-modifier (byte*) fill::addr ← ++ (byte*) fill::addr
Added resource src/test/java/dk/camelot64/kickc/test/kc/logo.png
SYMBOLS
(label) @1
@ -2276,11 +2281,29 @@ mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel mulu8_sel::@1
mulu8_sel::@1: scope:[mulu8_sel] from
to:mulu8_sel::@return
@23: scope:[] from @22
to:@24
fill: scope:[fill] from
(byte*~) fill::$0 ← (byte*) fill::start + (word) fill::size
(byte*) fill::end ← (byte*~) fill::$0
(byte*) fill::addr ← (byte*) fill::start
to:fill::@1
fill::@1: scope:[fill] from fill fill::@1
*((byte*) fill::addr) ← (byte) fill::val
(byte*) fill::addr ← ++ (byte*) fill::addr
(bool~) fill::$1 ← (byte*) fill::addr != (byte*) fill::end
if((bool~) fill::$1) goto fill::@1
to:fill::@2
fill::@2: scope:[fill] from fill::@1
to:fill::@return
fill::@return: scope:[fill] from fill::@2
return
to:@return
@24: scope:[] from @23
(byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) LOGO ← ((byte*)) (word/signed word/dword/signed dword) 8192
(word) XSIN_SIZE ← (word/signed word/dword/signed dword) 512
(signed word[512]) xsin ← { fill( 512, 0) }
to:@24
to:@25
main: scope:[main] from
asm { sei }
*((byte*) BORDERCOL) ← (byte) WHITE
@ -2309,9 +2332,9 @@ main::@2: scope:[main] from main::@1
main::@return: scope:[main] from main::@2
return
to:@return
@24: scope:[] from @23
@25: scope:[] from @24
(word) xsin_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@25
to:@26
loop: scope:[loop] from
to:loop::@1
loop::@1: scope:[loop] from loop loop::@7
@ -2359,8 +2382,8 @@ loop::@14: scope:[loop] from
loop::@return: scope:[loop] from loop::@3
return
to:@return
@25: scope:[] from @24
to:@26
@26: scope:[] from @25
to:@27
render_logo: scope:[render_logo] from
(byte~) render_logo::$0 ← ((byte)) (signed word) render_logo::xpos
(byte~) render_logo::$1 ← (byte~) render_logo::$0 & (byte/signed byte/word/signed word/dword/signed dword) 7
@ -2537,24 +2560,6 @@ render_logo::@28: scope:[render_logo] from
render_logo::@return: scope:[render_logo] from render_logo::@8
return
to:@return
@26: scope:[] from @25
to:@27
fill: scope:[fill] from
(byte*~) fill::$0 ← (byte*) fill::start + (word) fill::size
(byte*) fill::end ← (byte*~) fill::$0
(byte*) fill::addr ← (byte*) fill::start
to:fill::@1
fill::@1: scope:[fill] from fill fill::@1
*((byte*) fill::addr) ← (byte) fill::val
(byte*) fill::addr ← ++ (byte*) fill::addr
(bool~) fill::$1 ← (byte*) fill::addr != (byte*) fill::end
if((bool~) fill::$1) goto fill::@1
to:fill::@2
fill::@2: scope:[fill] from fill::@1
to:fill::@return
fill::@return: scope:[fill] from fill::@2
return
to:@return
@27: scope:[] from @26
kickasm {{ .label pc_restore = *
.pc = $2000
@ -2684,6 +2689,8 @@ Removing empty block @20
Removing empty block @21
Removing empty block mulu16_sel::@1
Removing empty block @22
Removing empty block @23
Removing empty block fill::@2
Removing empty block main::toD0181_@1
Removing empty block loop::@8
Removing empty block loop::@3
@ -2692,7 +2699,7 @@ Removing empty block loop::@10
Removing empty block loop::@11
Removing empty block loop::@12
Removing empty block loop::@14
Removing empty block @25
Removing empty block @26
Removing empty block render_logo::@16
Removing empty block render_logo::@17
Removing empty block render_logo::@18
@ -2710,8 +2717,6 @@ Removing empty block render_logo::@26
Removing empty block render_logo::@14
Removing empty block render_logo::@27
Removing empty block render_logo::@28
Removing empty block @26
Removing empty block fill::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
divr16u modifies rem16u
div32u16u modifies rem16u
@ -2979,7 +2984,7 @@ mul16s::@return: scope:[mul16s] from mul16s::@2
(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
to:@23
to:@24
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 )
@ -3210,13 +3215,33 @@ mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@2
(word) mulu16_sel::return#6 ← (word) mulu16_sel::return#12
return
to:@return
@23: scope:[] from @16
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
@24: scope:[] from @16
(word) rem16u#31 ← phi( @16/(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
(word) XSIN_SIZE#0 ← (word/signed word/dword/signed dword) 512
(signed word[512]) xsin#0 ← { fill( 512, 0) }
to:@24
to:@25
main: scope:[main] from @27
(word) xsin_idx#28 ← phi( @27/(word) xsin_idx#16 )
(word) rem16u#37 ← phi( @27/(word) rem16u#25 )
@ -3323,10 +3348,10 @@ main::@return: scope:[main] from main::@7
(word) xsin_idx#1 ← (word) xsin_idx#8
return
to:@return
@24: scope:[] from @23
(word) rem16u#28 ← phi( @23/(word) rem16u#31 )
(byte*) LOGO#3 ← phi( @23/(byte*) LOGO#0 )
(byte*) SCREEN#20 ← phi( @23/(byte*) SCREEN#0 )
@25: scope:[] from @24
(word) rem16u#28 ← phi( @24/(word) rem16u#31 )
(byte*) LOGO#3 ← phi( @24/(byte*) LOGO#0 )
(byte*) SCREEN#20 ← phi( @24/(byte*) SCREEN#0 )
(word) xsin_idx#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@27
loop: scope:[loop] from main::@6
@ -3556,31 +3581,11 @@ render_logo::@13: scope:[render_logo] from render_logo::@12
render_logo::@return: scope:[render_logo] from render_logo::@12 render_logo::@5
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
@27: scope:[] from @24
(word) xsin_idx#16 ← phi( @24/(word) xsin_idx#2 )
(word) rem16u#25 ← phi( @24/(word) rem16u#28 )
(byte*) LOGO#2 ← phi( @24/(byte*) LOGO#3 )
(byte*) SCREEN#8 ← phi( @24/(byte*) SCREEN#20 )
@27: scope:[] from @25
(word) xsin_idx#16 ← phi( @25/(word) xsin_idx#2 )
(word) rem16u#25 ← phi( @25/(word) rem16u#28 )
(byte*) LOGO#2 ← phi( @25/(byte*) LOGO#3 )
(byte*) SCREEN#8 ← phi( @25/(byte*) SCREEN#20 )
kickasm {{ .label pc_restore = *
.pc = $2000
logo:
@ -3603,8 +3608,8 @@ fill::@return: scope:[fill] from fill::@1
SYMBOL TABLE SSA
(label) @16
(label) @23
(label) @24
(label) @25
(label) @27
(label) @28
(label) @5
@ -4448,6 +4453,9 @@ Not aliassing across scopes: mul16u::a#2 mulu16_sel::v1#5
Not aliassing across scopes: mul16u::b#1 mulu16_sel::v2#5
Not aliassing across scopes: mul16u::return#3 mul16u::return#1
Not aliassing across scopes: mulu16_sel::$0 mul16u::return#6
Not aliassing across scopes: fill::start#2 fill::start#0
Not aliassing across scopes: fill::size#2 fill::size#0
Not aliassing across scopes: fill::val#3 fill::val#0
Not aliassing across scopes: SCREEN#1 SCREEN#8
Not aliassing across scopes: LOGO#1 LOGO#2
Not aliassing across scopes: rem16u#37 rem16u#25
@ -4469,9 +4477,6 @@ Not aliassing across scopes: SCREEN#27 SCREEN#29
Not aliassing across scopes: render_logo::xpos#0 loop::xpos#0
Not aliassing across scopes: render_logo::xpos#1 render_logo::xpos#0
Not aliassing across scopes: SCREEN#21 SCREEN#22
Not aliassing across scopes: fill::start#2 fill::start#0
Not aliassing across scopes: fill::size#2 fill::size#0
Not aliassing across scopes: fill::val#3 fill::val#0
Not aliassing across scopes: rem16u#19 rem16u#9
Not aliassing across scopes: xsin_idx#12 xsin_idx#1
Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7
@ -4565,6 +4570,8 @@ 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
@ -4599,8 +4606,6 @@ Alias (byte*) SCREEN#13 = (byte*) SCREEN#6
Alias (byte) render_logo::screen_idx#10 = (byte) render_logo::screen_idx#14
Alias (byte*) SCREEN#14 = (byte*) SCREEN#7
Alias (byte) render_logo::screen_idx#11 = (byte) render_logo::screen_idx#12
Alias (byte*) fill::end#0 = (byte*~) fill::$0
Alias (byte*) fill::addr#0 = (byte*) fill::start#2
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
@ -4670,6 +4675,9 @@ Not aliassing across scopes: mul16u::a#2 mulu16_sel::v1#5
Not aliassing across scopes: mul16u::b#1 mulu16_sel::v2#5
Not aliassing across scopes: mul16u::return#3 mul16u::res#2
Not aliassing across scopes: mulu16_sel::$0 mul16u::return#3
Not aliassing across scopes: fill::addr#0 fill::start#0
Not aliassing across scopes: fill::size#2 fill::size#0
Not aliassing across scopes: fill::val#3 fill::val#0
Not aliassing across scopes: SCREEN#1 SCREEN#0
Not aliassing across scopes: LOGO#1 LOGO#0
Not aliassing across scopes: rem16u#30 rem16u#0
@ -4692,9 +4700,6 @@ Not aliassing across scopes: render_logo::xpos#0 loop::xpos#0
Not aliassing across scopes: render_logo::xpos#1 render_logo::xpos#0
Not aliassing across scopes: SCREEN#17 SCREEN#22
Not aliassing identity: SCREEN#14 SCREEN#14
Not aliassing across scopes: fill::addr#0 fill::start#0
Not aliassing across scopes: fill::size#2 fill::size#0
Not aliassing across scopes: fill::val#3 fill::val#0
Not aliassing across scopes: rem16u#10 rem16u#17
Not aliassing across scopes: xsin_idx#12 xsin_idx#0
Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#4
@ -4774,6 +4779,9 @@ Not aliassing across scopes: mul16u::a#2 mulu16_sel::v1#5
Not aliassing across scopes: mul16u::b#1 mulu16_sel::v2#5
Not aliassing across scopes: mul16u::return#3 mul16u::res#2
Not aliassing across scopes: mulu16_sel::$0 mul16u::return#3
Not aliassing across scopes: fill::addr#0 fill::start#0
Not aliassing across scopes: fill::size#2 fill::size#0
Not aliassing across scopes: fill::val#3 fill::val#0
Not aliassing across scopes: SCREEN#1 SCREEN#0
Not aliassing across scopes: LOGO#1 LOGO#0
Not aliassing across scopes: rem16u#30 rem16u#0
@ -4796,9 +4804,6 @@ Not aliassing across scopes: render_logo::xpos#0 loop::xpos#0
Not aliassing across scopes: render_logo::xpos#1 render_logo::xpos#0
Not aliassing across scopes: SCREEN#17 SCREEN#22
Not aliassing identity: SCREEN#14 SCREEN#14
Not aliassing across scopes: fill::addr#0 fill::start#0
Not aliassing across scopes: fill::size#2 fill::size#0
Not aliassing across scopes: fill::val#3 fill::val#0
Not aliassing across scopes: rem16u#10 rem16u#17
Not aliassing across scopes: xsin_idx#12 xsin_idx#0
Self Phi Eliminated (word) divr16u::divisor#2
@ -4807,6 +4812,8 @@ 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#29
Self Phi Eliminated (word) rem16u#23
Self Phi Eliminated (word) xsin_idx#13
@ -4817,8 +4824,6 @@ Self Phi Eliminated (byte*) SCREEN#11
Self Phi Eliminated (byte*) SCREEN#12
Self Phi Eliminated (byte*) SCREEN#13
Self Phi Eliminated (byte*) SCREEN#14
Self Phi Eliminated (byte) fill::val#2
Self Phi Eliminated (byte*) fill::end#1
Succesful SSA optimization Pass2SelfPhiElimination
Redundant Phi (word) divr16u::divisor#2 (word) divr16u::divisor#6
Redundant Phi (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0
@ -4840,6 +4845,8 @@ 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
@ -4860,8 +4867,6 @@ Redundant Phi (byte*) SCREEN#11 (byte*) SCREEN#17
Redundant Phi (byte*) SCREEN#12 (byte*) SCREEN#11
Redundant Phi (byte*) SCREEN#13 (byte*) SCREEN#17
Redundant Phi (byte*) SCREEN#14 (byte*) SCREEN#13
Redundant Phi (byte) fill::val#2 (byte) fill::val#3
Redundant Phi (byte*) fill::end#1 (byte*) fill::end#0
Redundant Phi (word) rem16u#10 (word) rem16u#17
Redundant Phi (word) xsin_idx#12 (word) xsin_idx#0
Succesful SSA optimization Pass2RedundantPhiElimination
@ -4876,6 +4881,7 @@ Simple Condition (bool~) sin16s_gen2::$11 if((word) sin16s_gen2::i#1<(word) sin1
Simple Condition (bool~) sin16s::$1 if((dword) sin16s::x#0<(dword) PI_u4f28#0) goto sin16s::@1
Simple Condition (bool~) sin16s::$4 if((dword) sin16s::x#4<(dword) PI_HALF_u4f28#0) goto sin16s::@2
Simple Condition (bool~) sin16s::$19 if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@3
Simple Condition (bool~) fill::$1 if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
Simple Condition (bool~) main::$4 if((byte) main::ch#1!=(byte/word/signed word/dword/signed dword) 240) goto main::@1
Simple Condition (bool~) loop::$0 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto loop::@5
Simple Condition (bool~) loop::$5 if((word) xsin_idx#3!=(word/signed dword/dword~) loop::$3) goto loop::@7
@ -4884,7 +4890,6 @@ Simple Condition (bool~) render_logo::$7 if((byte) render_logo::screen_idx#13!=(
Simple Condition (bool~) render_logo::$18 if((byte) render_logo::screen_idx#8!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@6
Simple Condition (bool~) render_logo::$41 if((byte) render_logo::logo_idx#5!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@10
Simple Condition (bool~) render_logo::$62 if((byte) render_logo::screen_idx#11!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@13
Simple Condition (bool~) fill::$1 if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
@ -5022,11 +5027,11 @@ Succesful SSA optimization Pass2EliminateUnusedBlocks
Culled Empty Block (label) @5
Culled Empty Block (label) mul16u::@3
Culled Empty Block (label) @16
Culled Empty Block (label) @23
Culled Empty Block (label) @24
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@7
Culled Empty Block (label) @24
Culled Empty Block (label) @25
Culled Empty Block (label) loop::@2
Culled Empty Block (label) loop::@5
Not culling empty block because it shares successor with its predecessor. (label) loop::@13
@ -5251,33 +5256,33 @@ Inlining constant with different constant siblings (const byte) mulu16_sel::sele
Inlining constant with var siblings (const byte) mulu16_sel::select#4
Inlining constant with different constant siblings (const byte) mulu16_sel::select#4
Inlining constant with different constant siblings (const byte) mulu16_sel::select#4
Inlining constant with var siblings (const byte) main::ch#0
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#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#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 var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#1
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 different constant 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) 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#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#0
Inlining constant with var siblings (const byte) render_logo::screen_idx#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 var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::screen_idx#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#1
Inlining constant with var siblings (const byte) render_logo::logo_idx#1
Inlining constant with var siblings (const word) xsin_idx#16
Inlining constant with var siblings (const word) xsin_idx#16
Inlining constant with var siblings (const word) xsin_idx#16

View File

@ -0,0 +1,784 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.label PROCPORT_DDR = 0
.const PROCPORT_DDR_MEMORY_MASK = 7
.label PROCPORT = 1
.const PROCPORT_RAM_IO = $35
.label BGCOL = $d021
.label D011 = $d011
.const VIC_BMM = $20
.const VIC_DEN = $10
.const VIC_RSEL = 8
.label D016 = $d016
.const VIC_CSEL = 8
.label D018 = $d018
.label CIA2_PORT_A = $dd00
.label CIA2_PORT_A_DDR = $dd02
.const WHITE = 1
.const PI2_u4f28 = $6487ed51
.const PI_u4f28 = $3243f6a9
.const PI_HALF_u4f28 = $1921fb54
.label SCREEN = $400
.label BITMAP = $2000
.const SIN_SIZE = $200
.label sin2 = $1400
.label rem16u = 2
.label pc_restore = *
.pc = $1400
.for(var i=0; i<512; i++) {
.word sin(toRadians([i*360]/512))*320
}
.pc = pc_restore
jsr main
main: {
.const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)>>6
.const toD0181_return = (>(SCREEN&$3fff)<<2)|(>BITMAP)>>2&$f
sei
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
lda #PROCPORT_RAM_IO
sta PROCPORT
lda #VIC_BMM|VIC_DEN|VIC_RSEL|3
sta D011
lda #3
sta CIA2_PORT_A_DDR
lda #vicSelectGfxBank1_toDd001_return
sta CIA2_PORT_A
lda #VIC_CSEL
sta D016
lda #toD0181_return
sta D018
jsr fill
jsr bitmap_init
jsr bitmap_clear
jsr sin16s_gen2
jsr render_sine
b2:
inc BGCOL
jmp b2
}
render_sine: {
.label _0 = 6
.label _1 = 6
.label _4 = 6
.label _5 = 6
.label sin_val = 6
.label sin2_val = 6
.label xpos = 4
.label sin_idx = 2
lda #<0
sta xpos
sta xpos+1
sta sin_idx
sta sin_idx+1
b1:
lda sin_idx
asl
sta _0
lda sin_idx+1
rol
sta _0+1
clc
lda _1
adc #<sin
sta _1
lda _1+1
adc #>sin
sta _1+1
ldy #0
lda (sin_val),y
tax
iny
lda (sin_val),y
stx sin_val
sta sin_val+1
jsr wrap_y
tax
jsr bitmap_plot
lda sin_idx
asl
sta _4
lda sin_idx+1
rol
sta _4+1
clc
lda _5
adc #<sin2
sta _5
lda _5+1
adc #>sin2
sta _5+1
ldy #0
lda (sin2_val),y
tax
iny
lda (sin2_val),y
stx sin2_val
sta sin2_val+1
clc
lda wrap_y.y
adc #<$a
sta wrap_y.y
lda wrap_y.y+1
adc #>$a
sta wrap_y.y+1
jsr wrap_y
tax
jsr bitmap_plot
inc xpos
bne !+
inc xpos+1
!:
lda xpos+1
cmp #>$140
bne b2
lda xpos
cmp #<$140
bne b2
lda #<0
sta xpos
sta xpos+1
b2:
inc sin_idx
bne !+
inc sin_idx+1
!:
lda sin_idx+1
cmp #>SIN_SIZE
bcs !b1+
jmp b1
!b1:
bne !+
lda sin_idx
cmp #<SIN_SIZE
bcs !b1+
jmp b1
!b1:
!:
rts
}
bitmap_plot: {
.label _1 = $10
.label plotter = 6
.label x = 4
.label _3 = 6
lda bitmap_plot_yhi,x
sta _3+1
lda bitmap_plot_ylo,x
sta _3
lda x
and #<$fff8
sta _1
lda x+1
and #>$fff8
sta _1+1
lda plotter
clc
adc _1
sta plotter
lda plotter+1
adc _1+1
sta plotter+1
lda x
tay
lda bitmap_plot_bit,y
ldy #0
ora (plotter),y
sta (plotter),y
rts
}
wrap_y: {
.label y = 6
b1:
lda y
cmp #$c8
lda y+1
sbc #0
bvc !+
eor #$80
!:
bpl b2
b4:
lda y+1
bmi b5
lda y
rts
b5:
clc
lda y
adc #<$c8
sta y
lda y+1
adc #>$c8
sta y+1
jmp b4
b2:
lda y
sec
sbc #<$c8
sta y
lda y+1
sbc #>$c8
sta y+1
jmp b1
}
sin16s_gen2: {
.const min = -$140
.const max = $140
.label ampl = max-min
.const offs = min+(ampl>>1)
.label _5 = $c
.label _6 = 6
.label _8 = 6
.label step = $1b
.label sintab = 2
.label x = 8
.label i = 4
jsr div32u16u
lda #<0
sta i
sta i+1
lda #<sin
sta sintab
lda #>sin
sta sintab+1
lda #0
sta x
sta x+1
sta x+2
sta x+3
b1:
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
jsr sin16s
jsr mul16s
lda _5+2
sta _6
lda _5+3
sta _6+1
clc
lda _8
adc #<offs
sta _8
lda _8+1
adc #>offs
sta _8+1
ldy #0
lda _8
sta (sintab),y
iny
lda _8+1
sta (sintab),y
lda sintab
clc
adc #2
sta sintab
bcc !+
inc sintab+1
!:
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
inc i
bne !+
inc i+1
!:
lda i+1
cmp #>SIN_SIZE
bcc b1
bne !+
lda i
cmp #<SIN_SIZE
bcc b1
!:
rts
}
mul16s: {
.label _6 = 6
.label _16 = 6
.label m = $c
.label return = $c
.label a = $17
lda a
sta mul16u.a
lda a+1
sta mul16u.a+1
lda #<sin16s_gen2.ampl
sta mul16u.b
lda #>sin16s_gen2.ampl
sta mul16u.b+1
jsr mul16u
lda a+1
bpl b2
lda m+2
sta _6
lda m+3
sta _6+1
lda _16
sec
sbc #<sin16s_gen2.ampl
sta _16
lda _16+1
sbc #>sin16s_gen2.ampl
sta _16+1
lda _16
sta m+2
lda _16+1
sta m+3
b2:
rts
}
mul16u: {
.label mb = $12
.label a = $10
.label res = $c
.label return = $c
.label b = 6
lda b
sta mb
lda b+1
sta mb+1
lda #0
sta mb+2
sta mb+3
sta res
sta res+1
sta res+2
sta res+3
b1:
lda a
bne b2
lda a+1
bne b2
rts
b2:
lda a
and #1
cmp #0
beq b4
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
b4:
clc
ror a+1
ror a
asl mb
rol mb+1
rol mb+2
rol mb+3
jmp b1
}
sin16s: {
.label _6 = $c
.label x = $c
.label return = $17
.label x1 = $1f
.label x2 = $19
.label x3 = $19
.label x3_6 = 6
.label usinx = $17
.label x4 = $19
.label x5 = 6
.label x5_128 = 6
.label sinx = $17
.label isUpper = $16
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
!:
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
lda #1
sta isUpper
jmp b1
b4:
lda #0
sta isUpper
b1:
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
!:
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
b2:
ldy #3
!:
asl _6
rol _6+1
rol _6+2
rol _6+3
dey
bne !-
lda _6+2
sta x1
lda _6+3
sta x1+1
lda x1
sta mulu16_sel.v1
lda x1+1
sta mulu16_sel.v1+1
lda x1
sta mulu16_sel.v2
lda x1+1
sta mulu16_sel.v2+1
ldx #0
jsr mulu16_sel
lda mulu16_sel.return
sta x2
lda mulu16_sel.return+1
sta x2+1
lda x1
sta mulu16_sel.v2
lda x1+1
sta mulu16_sel.v2+1
ldx #1
jsr mulu16_sel
lda mulu16_sel.return
sta mulu16_sel.return_1
lda mulu16_sel.return+1
sta mulu16_sel.return_1+1
ldx #1
lda #<$10000/6
sta mulu16_sel.v2
lda #>$10000/6
sta mulu16_sel.v2+1
jsr mulu16_sel
lda x1
sec
sbc x3_6
sta usinx
lda x1+1
sbc x3_6+1
sta usinx+1
lda x1
sta mulu16_sel.v2
lda x1+1
sta mulu16_sel.v2+1
ldx #0
jsr mulu16_sel
lda mulu16_sel.return
sta mulu16_sel.return_10
lda mulu16_sel.return+1
sta mulu16_sel.return_10+1
lda x1
sta mulu16_sel.v2
lda x1+1
sta mulu16_sel.v2+1
ldx #0
jsr mulu16_sel
ldy #4
!:
lsr x5_128+1
ror x5_128
dey
bne !-
lda usinx
clc
adc x5_128
sta usinx
lda usinx+1
adc x5_128+1
sta usinx+1
lda isUpper
beq b3
sec
lda sinx
eor #$ff
adc #0
sta sinx
lda sinx+1
eor #$ff
adc #0
sta sinx+1
b3:
rts
}
mulu16_sel: {
.label _0 = $c
.label _1 = $c
.label v1 = $19
.label v2 = 6
.label return = 6
.label return_1 = $19
.label return_10 = $19
lda v1
sta mul16u.a
lda v1+1
sta mul16u.a+1
jsr mul16u
cpx #0
beq !e+
!:
asl _1
rol _1+1
rol _1+2
rol _1+3
dex
bne !-
!e:
lda _1+2
sta return
lda _1+3
sta return+1
rts
}
div32u16u: {
.label quotient_hi = $10
.label quotient_lo = 6
.label return = $1b
lda #<PI2_u4f28>>$10
sta divr16u.dividend
lda #>PI2_u4f28>>$10
sta divr16u.dividend+1
lda #<0
sta divr16u.rem
sta divr16u.rem+1
jsr divr16u
lda divr16u.return
sta quotient_hi
lda divr16u.return+1
sta quotient_hi+1
lda #<PI2_u4f28&$ffff
sta divr16u.dividend
lda #>PI2_u4f28&$ffff
sta divr16u.dividend+1
jsr divr16u
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
rts
}
divr16u: {
.label rem = 2
.label dividend = 4
.label quotient = 6
.label return = 6
ldx #0
txa
sta quotient
sta quotient+1
b1:
asl rem
rol rem+1
lda dividend+1
and #$80
cmp #0
beq b2
lda #1
ora rem
sta rem
b2:
asl dividend
rol dividend+1
asl quotient
rol quotient+1
lda rem+1
cmp #>SIN_SIZE
bcc b3
bne !+
lda rem
cmp #<SIN_SIZE
bcc b3
!:
inc quotient
bne !+
inc quotient+1
!:
lda rem
sec
sbc #<SIN_SIZE
sta rem
lda rem+1
sbc #>SIN_SIZE
sta rem+1
b3:
inx
cpx #$10
bne b1
rts
}
bitmap_clear: {
.label bitmap = 2
.label y = $16
.label _3 = 2
lda bitmap_plot_ylo+0
sta _3
lda bitmap_plot_yhi+0
sta _3+1
lda #0
sta y
b1:
ldx #0
b2:
lda #0
tay
sta (bitmap),y
inc bitmap
bne !+
inc bitmap+1
!:
inx
cpx #$c8
bne b2
inc y
lda y
cmp #$28
bne b1
rts
}
bitmap_init: {
.label _3 = $16
.label yoffs = 2
ldx #0
lda #$80
b1:
sta bitmap_plot_bit,x
lsr
cmp #0
bne b2
lda #$80
b2:
inx
cpx #0
bne b1
lda #<BITMAP
sta yoffs
lda #>BITMAP
sta yoffs+1
ldx #0
b3:
txa
and #7
sta _3
lda yoffs
ora _3
sta bitmap_plot_ylo,x
lda yoffs+1
sta bitmap_plot_yhi,x
txa
and #7
cmp #7
bne b4
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1
adc #>$28*8
sta yoffs+1
b4:
inx
cpx #0
bne b3
rts
}
fill: {
.const size = $3e8
.label end = SCREEN+size
.label addr = 2
lda #<SCREEN
sta addr
lda #>SCREEN
sta addr+1
b1:
lda #WHITE
ldy #0
sta (addr),y
inc addr
bne !+
inc addr+1
!:
lda addr+1
cmp #>end
bne b1
lda addr
cmp #<end
bne b1
rts
}
bitmap_plot_ylo: .fill $100, 0
bitmap_plot_yhi: .fill $100, 0
bitmap_plot_bit: .fill $100, 0
.align $100
sin: .fill $400, 0

View File

@ -0,0 +1,447 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@28
@28: scope:[] from @begin
kickasm {{ .label pc_restore = *
.pc = $1400
.for(var i=0; i<512; i++) {
.word sin(toRadians([i*360]/512))*320
}
.pc = pc_restore
}}
to:@31
@31: scope:[] from @28
[2] phi() [ ] ( )
[3] call main [ ] ( )
to:@end
@end: scope:[] from @31
[4] phi() [ ] ( )
main: scope:[main] from @31
asm { sei }
[6] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:3 [ ] )
[7] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:3 [ ] )
[8] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:3 [ ] )
to:main::vicSelectGfxBank1
main::vicSelectGfxBank1: scope:[main] from main
[9] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:3 [ ] )
to:main::vicSelectGfxBank1_toDd001
main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1
[10] phi() [ ] ( main:3 [ ] )
to:main::vicSelectGfxBank1_@1
main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001
[11] *((const byte*) CIA2_PORT_A#0) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:3 [ ] )
to:main::@7
main::@7: scope:[main] from main::vicSelectGfxBank1_@1
[12] *((const byte*) D016#0) ← (const byte) VIC_CSEL#0 [ ] ( main:3 [ ] )
to:main::toD0181
main::toD0181: scope:[main] from main::@7
[13] phi() [ ] ( main:3 [ ] )
to:main::@8
main::@8: scope:[main] from main::toD0181
[14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:3 [ ] )
[15] call fill [ ] ( main:3 [ ] )
to:main::@9
main::@9: scope:[main] from main::@8
[16] phi() [ ] ( main:3 [ ] )
[17] call bitmap_init [ ] ( main:3 [ ] )
to:main::@10
main::@10: scope:[main] from main::@9
[18] phi() [ ] ( main:3 [ ] )
[19] call bitmap_clear [ ] ( main:3 [ ] )
to:main::@11
main::@11: scope:[main] from main::@10
[20] phi() [ ] ( main:3 [ ] )
[21] call sin16s_gen2 [ ] ( main:3 [ ] )
to:main::@12
main::@12: scope:[main] from main::@11
[22] phi() [ ] ( main:3 [ ] )
[23] call render_sine [ ] ( main:3 [ ] )
to:main::@2
main::@2: scope:[main] from main::@12 main::@2
[24] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) [ ] ( main:3 [ ] )
to:main::@2
render_sine: scope:[render_sine] from main::@12
[25] phi() [ ] ( main:3::render_sine:23 [ ] )
to:render_sine::@1
render_sine::@1: scope:[render_sine] from render_sine render_sine::@2
[26] (word) render_sine::xpos#3 ← phi( render_sine/(byte/signed byte/word/signed word/dword/signed dword) 0 render_sine::@2/(word) render_sine::xpos#8 ) [ render_sine::sin_idx#2 render_sine::xpos#3 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 ] )
[26] (word) render_sine::sin_idx#2 ← phi( render_sine/(byte/signed byte/word/signed word/dword/signed dword) 0 render_sine::@2/(word) render_sine::sin_idx#1 ) [ render_sine::sin_idx#2 render_sine::xpos#3 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 ] )
[27] (word~) render_sine::$0 ← (word) render_sine::sin_idx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$0 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$0 ] )
[28] (signed word*~) render_sine::$1 ← (const signed word[512]) sin#0 + (word~) render_sine::$0 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$1 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$1 ] )
[29] (signed word) render_sine::sin_val#0 ← *((signed word*~) render_sine::$1) [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::sin_val#0 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::sin_val#0 ] )
[30] (signed word) wrap_y::y#0 ← (signed word) render_sine::sin_val#0 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#0 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#0 ] )
[31] call wrap_y [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] )
[32] (byte) wrap_y::return#0 ← (byte) wrap_y::return#2 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#0 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#0 ] )
to:render_sine::@5
render_sine::@5: scope:[render_sine] from render_sine::@1
[33] (byte) render_sine::ypos#0 ← (byte) wrap_y::return#0 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos#0 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos#0 ] )
[34] (word) bitmap_plot::x#0 ← (word) render_sine::xpos#3 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos#0 bitmap_plot::x#0 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos#0 bitmap_plot::x#0 ] )
[35] (byte) bitmap_plot::y#0 ← (byte) render_sine::ypos#0 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#0 bitmap_plot::y#0 ] )
[36] call bitmap_plot [ render_sine::sin_idx#2 render_sine::xpos#3 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 ] )
to:render_sine::@6
render_sine::@6: scope:[render_sine] from render_sine::@5
[37] (word~) render_sine::$4 ← (word) render_sine::sin_idx#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$4 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$4 ] )
[38] (signed word*~) render_sine::$5 ← (const signed word*) sin2#0 + (word~) render_sine::$4 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$5 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::$5 ] )
[39] (signed word) render_sine::sin2_val#0 ← *((signed word*~) render_sine::$5) [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::sin2_val#0 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::sin2_val#0 ] )
[40] (signed word) wrap_y::y#1 ← (signed word) render_sine::sin2_val#0 + (byte/signed byte/word/signed word/dword/signed dword) 10 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#1 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#1 ] )
[41] call wrap_y [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] )
[42] (byte) wrap_y::return#1 ← (byte) wrap_y::return#2 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#1 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#1 ] )
to:render_sine::@7
render_sine::@7: scope:[render_sine] from render_sine::@6
[43] (byte) render_sine::ypos2#0 ← (byte) wrap_y::return#1 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos2#0 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos2#0 ] )
[44] (word) bitmap_plot::x#1 ← (word) render_sine::xpos#3 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos2#0 bitmap_plot::x#1 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 render_sine::ypos2#0 bitmap_plot::x#1 ] )
[45] (byte) bitmap_plot::y#1 ← (byte) render_sine::ypos2#0 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#1 bitmap_plot::y#1 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#1 bitmap_plot::y#1 ] )
[46] call bitmap_plot [ render_sine::sin_idx#2 render_sine::xpos#3 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#3 ] )
to:render_sine::@8
render_sine::@8: scope:[render_sine] from render_sine::@7
[47] (word) render_sine::xpos#1 ← ++ (word) render_sine::xpos#3 [ render_sine::sin_idx#2 render_sine::xpos#1 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#1 ] )
[48] if((word) render_sine::xpos#1!=(word/signed word/dword/signed dword) 320) goto render_sine::@10 [ render_sine::sin_idx#2 render_sine::xpos#1 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#1 ] )
to:render_sine::@2
render_sine::@2: scope:[render_sine] from render_sine::@10 render_sine::@8
[49] (word) render_sine::xpos#8 ← phi( render_sine::@8/(byte/signed byte/word/signed word/dword/signed dword) 0 render_sine::@10/(word) render_sine::xpos#1 ) [ render_sine::sin_idx#2 render_sine::xpos#8 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#8 ] )
[50] (word) render_sine::sin_idx#1 ← ++ (word) render_sine::sin_idx#2 [ render_sine::sin_idx#1 render_sine::xpos#8 ] ( main:3::render_sine:23 [ render_sine::sin_idx#1 render_sine::xpos#8 ] )
[51] if((word) render_sine::sin_idx#1<(const word) SIN_SIZE#0) goto render_sine::@1 [ render_sine::sin_idx#1 render_sine::xpos#8 ] ( main:3::render_sine:23 [ render_sine::sin_idx#1 render_sine::xpos#8 ] )
to:render_sine::@return
render_sine::@return: scope:[render_sine] from render_sine::@2
[52] return [ ] ( main:3::render_sine:23 [ ] )
to:@return
render_sine::@10: scope:[render_sine] from render_sine::@8
[53] phi() [ render_sine::sin_idx#2 render_sine::xpos#1 ] ( main:3::render_sine:23 [ render_sine::sin_idx#2 render_sine::xpos#1 ] )
to:render_sine::@2
bitmap_plot: scope:[bitmap_plot] from render_sine::@5 render_sine::@7
[54] (word) bitmap_plot::x#2 ← phi( render_sine::@5/(word) bitmap_plot::x#0 render_sine::@7/(word) bitmap_plot::x#1 ) [ bitmap_plot::y#2 bitmap_plot::x#2 ] ( main:3::render_sine:23::bitmap_plot:36 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::y#2 bitmap_plot::x#2 ] main:3::render_sine:23::bitmap_plot:46 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::y#2 bitmap_plot::x#2 ] )
[54] (byte) bitmap_plot::y#2 ← phi( render_sine::@5/(byte) bitmap_plot::y#0 render_sine::@7/(byte) bitmap_plot::y#1 ) [ bitmap_plot::y#2 bitmap_plot::x#2 ] ( main:3::render_sine:23::bitmap_plot:36 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::y#2 bitmap_plot::x#2 ] main:3::render_sine:23::bitmap_plot:46 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::y#2 bitmap_plot::x#2 ] )
[55] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#2) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#2) [ bitmap_plot::x#2 bitmap_plot::$3 ] ( main:3::render_sine:23::bitmap_plot:36 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::$3 ] main:3::render_sine:23::bitmap_plot:46 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::$3 ] )
[56] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#2 & (word/dword/signed dword) 65528 [ bitmap_plot::x#2 bitmap_plot::$3 bitmap_plot::$1 ] ( main:3::render_sine:23::bitmap_plot:36 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::$3 bitmap_plot::$1 ] main:3::render_sine:23::bitmap_plot:46 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::$3 bitmap_plot::$1 ] )
[57] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#2 bitmap_plot::plotter#1 ] ( main:3::render_sine:23::bitmap_plot:36 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::plotter#1 ] main:3::render_sine:23::bitmap_plot:46 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::x#2 bitmap_plot::plotter#1 ] )
[58] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#2 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:3::render_sine:23::bitmap_plot:36 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] main:3::render_sine:23::bitmap_plot:46 [ render_sine::sin_idx#2 render_sine::xpos#3 bitmap_plot::plotter#1 bitmap_plot::$2 ] )
[59] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:3::render_sine:23::bitmap_plot:36 [ render_sine::sin_idx#2 render_sine::xpos#3 ] main:3::render_sine:23::bitmap_plot:46 [ render_sine::sin_idx#2 render_sine::xpos#3 ] )
to:bitmap_plot::@return
bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
[60] return [ ] ( main:3::render_sine:23::bitmap_plot:36 [ render_sine::sin_idx#2 render_sine::xpos#3 ] main:3::render_sine:23::bitmap_plot:46 [ render_sine::sin_idx#2 render_sine::xpos#3 ] )
to:@return
wrap_y: scope:[wrap_y] from render_sine::@1 render_sine::@6
[61] (signed word) wrap_y::y#9 ← phi( render_sine::@1/(signed word) wrap_y::y#0 render_sine::@6/(signed word) wrap_y::y#1 ) [ wrap_y::y#9 ] ( main:3::render_sine:23::wrap_y:31 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#9 ] main:3::render_sine:23::wrap_y:41 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#9 ] )
to:wrap_y::@1
wrap_y::@1: scope:[wrap_y] from wrap_y wrap_y::@2
[62] (signed word) wrap_y::y#4 ← phi( wrap_y/(signed word) wrap_y::y#9 wrap_y::@2/(signed word) wrap_y::y#2 ) [ wrap_y::y#4 ] ( main:3::render_sine:23::wrap_y:31 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#4 ] main:3::render_sine:23::wrap_y:41 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#4 ] )
[63] if((signed word) wrap_y::y#4>=(byte/word/signed word/dword/signed dword) 200) goto wrap_y::@2 [ wrap_y::y#4 ] ( main:3::render_sine:23::wrap_y:31 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#4 ] main:3::render_sine:23::wrap_y:41 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#4 ] )
to:wrap_y::@4
wrap_y::@4: scope:[wrap_y] from wrap_y::@1 wrap_y::@5
[64] (signed word) wrap_y::y#6 ← phi( wrap_y::@1/(signed word) wrap_y::y#4 wrap_y::@5/(signed word) wrap_y::y#3 ) [ wrap_y::y#6 ] ( main:3::render_sine:23::wrap_y:31 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#6 ] main:3::render_sine:23::wrap_y:41 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#6 ] )
[65] if((signed word) wrap_y::y#6<(byte/signed byte/word/signed word/dword/signed dword) 0) goto wrap_y::@5 [ wrap_y::y#6 ] ( main:3::render_sine:23::wrap_y:31 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#6 ] main:3::render_sine:23::wrap_y:41 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#6 ] )
to:wrap_y::@6
wrap_y::@6: scope:[wrap_y] from wrap_y::@4
[66] (byte) wrap_y::return#2 ← ((byte)) (signed word) wrap_y::y#6 [ wrap_y::return#2 ] ( main:3::render_sine:23::wrap_y:31 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] main:3::render_sine:23::wrap_y:41 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] )
to:wrap_y::@return
wrap_y::@return: scope:[wrap_y] from wrap_y::@6
[67] return [ wrap_y::return#2 ] ( main:3::render_sine:23::wrap_y:31 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] main:3::render_sine:23::wrap_y:41 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::return#2 ] )
to:@return
wrap_y::@5: scope:[wrap_y] from wrap_y::@4
[68] (signed word) wrap_y::y#3 ← (signed word) wrap_y::y#6 + (byte/word/signed word/dword/signed dword) 200 [ wrap_y::y#3 ] ( main:3::render_sine:23::wrap_y:31 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#3 ] main:3::render_sine:23::wrap_y:41 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#3 ] )
to:wrap_y::@4
wrap_y::@2: scope:[wrap_y] from wrap_y::@1
[69] (signed word) wrap_y::y#2 ← (signed word) wrap_y::y#4 - (byte/word/signed word/dword/signed dword) 200 [ wrap_y::y#2 ] ( main:3::render_sine:23::wrap_y:31 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#2 ] main:3::render_sine:23::wrap_y:41 [ render_sine::sin_idx#2 render_sine::xpos#3 wrap_y::y#2 ] )
to:wrap_y::@1
sin16s_gen2: scope:[sin16s_gen2] from main::@11
[70] phi() [ ] ( main:3::sin16s_gen2:21 [ ] )
[71] call div32u16u [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21 [ div32u16u::return#0 ] )
[72] (dword) div32u16u::return#2 ← (dword) div32u16u::return#0 [ div32u16u::return#2 ] ( main:3::sin16s_gen2:21 [ div32u16u::return#2 ] )
to:sin16s_gen2::@3
sin16s_gen2::@3: scope:[sin16s_gen2] from sin16s_gen2
[73] (dword) sin16s_gen2::step#0 ← (dword) div32u16u::return#2 [ sin16s_gen2::step#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 ] )
to:sin16s_gen2::@1
sin16s_gen2::@1: scope:[sin16s_gen2] from sin16s_gen2::@3 sin16s_gen2::@5
[74] (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 ) [ 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 ] )
[74] (signed word*) sin16s_gen2::sintab#2 ← phi( sin16s_gen2::@3/(const signed word[512]) sin#0 sin16s_gen2::@5/(signed word*) sin16s_gen2::sintab#0 ) [ 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 ] )
[74] (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 ) [ 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 ] )
[75] (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 ] )
[76] call sin16s [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#1 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#1 ] )
[77] (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 ] )
to:sin16s_gen2::@4
sin16s_gen2::@4: scope:[sin16s_gen2] from sin16s_gen2::@1
[78] (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 ] )
[79] call mul16s [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#0 ] ( main:3::sin16s_gen2:21 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#0 ] )
[80] (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 ] )
to:sin16s_gen2::@5
sin16s_gen2::@5: scope:[sin16s_gen2] from sin16s_gen2::@4
[81] (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 ] )
[82] (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 ] )
[83] (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 ] )
[84] *((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 ] )
[85] (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 ] )
[86] (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 ] )
[87] (word) sin16s_gen2::i#1 ← ++ (word) sin16s_gen2::i#2 [ 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 ] )
[88] if((word) sin16s_gen2::i#1<(const word) SIN_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 ] )
to:sin16s_gen2::@return
sin16s_gen2::@return: scope:[sin16s_gen2] from sin16s_gen2::@5
[89] return [ ] ( main:3::sin16s_gen2:21 [ ] )
to:@return
mul16s: scope:[mul16s] from sin16s_gen2::@4
[90] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#0 [ mul16s::a#0 mul16u::a#8 ] ( main:3::sin16s_gen2:21::mul16s:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::a#8 ] )
[91] call mul16u [ mul16s::a#0 mul16u::res#2 ] ( main:3::sin16s_gen2:21::mul16s:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::res#2 ] )
[92] (dword) mul16u::return#2 ← (dword) mul16u::res#2 [ mul16s::a#0 mul16u::return#2 ] ( main:3::sin16s_gen2:21::mul16s:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::return#2 ] )
to:mul16s::@6
mul16s::@6: scope:[mul16s] from mul16s
[93] (dword) mul16s::m#0 ← (dword) mul16u::return#2 [ mul16s::a#0 mul16s::m#0 ] ( main:3::sin16s_gen2:21::mul16s:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16s::m#0 ] )
[94] 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:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#0 ] )
to:mul16s::@3
mul16s::@3: scope:[mul16s] from mul16s::@6
[95] (word~) mul16s::$6 ← > (dword) mul16s::m#0 [ mul16s::m#0 mul16s::$6 ] ( main:3::sin16s_gen2:21::mul16s:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#0 mul16s::$6 ] )
[96] (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:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#0 mul16s::$16 ] )
[97] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16 [ mul16s::m#1 ] ( main:3::sin16s_gen2:21::mul16s:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#1 ] )
to:mul16s::@1
mul16s::@1: scope:[mul16s] from mul16s::@3 mul16s::@6
[98] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 ) [ mul16s::m#4 ] ( main:3::sin16s_gen2:21::mul16s:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::m#4 ] )
to:mul16s::@2
mul16s::@2: scope:[mul16s] from mul16s::@1
[99] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4 [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#0 ] )
to:mul16s::@return
mul16s::@return: scope:[mul16s] from mul16s::@2
[100] return [ mul16s::return#0 ] ( main:3::sin16s_gen2:21::mul16s:79 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::return#0 ] )
to:@return
mul16u: scope:[mul16u] from mul16s mulu16_sel
[101] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 ) [ mul16u::b#2 mul16u::a#6 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122::mul16u: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::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137::mul16u:155 [ 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::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142::mul16u:155 [ 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::b#2 mul16u::a#6 ] )
[101] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 ) [ mul16u::b#2 mul16u::a#6 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122::mul16u: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::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137::mul16u:155 [ 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::b#2 mul16u::a#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142::mul16u:155 [ 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::b#2 mul16u::a#6 ] )
[102] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2 [ mul16u::a#6 mul16u::mb#0 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ 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:76::mulu16_sel:122::mul16u: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::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::a#6 mul16u::mb#0 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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:76::mulu16_sel:137::mul16u:155 [ 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:76::mulu16_sel:142::mul16u:155 [ 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 ] )
to:mul16u::@1
mul16u::@1: scope:[mul16u] from mul16u mul16u::@4
[103] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 ) [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ 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:76::mulu16_sel:122::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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:76::mulu16_sel:137::mul16u:155 [ 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:76::mulu16_sel:142::mul16u:155 [ 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 ] )
[103] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 ) [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ 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:76::mulu16_sel:122::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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:76::mulu16_sel:137::mul16u:155 [ 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:76::mulu16_sel:142::mul16u:155 [ 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 ] )
[103] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 ) [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ 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:76::mulu16_sel:122::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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:76::mulu16_sel:137::mul16u:155 [ 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:76::mulu16_sel:142::mul16u:155 [ 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 ] )
[104] 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:79::mul16u:91 [ 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:76::mulu16_sel:122::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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:76::mulu16_sel:137::mul16u:155 [ 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:76::mulu16_sel:142::mul16u:155 [ 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 ] )
to:mul16u::@return
mul16u::@return: scope:[mul16u] from mul16u::@1
[105] return [ mul16u::res#2 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::res#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122::mul16u: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::res#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::res#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137::mul16u:155 [ 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 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142::mul16u:155 [ 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 ] )
to:@return
mul16u::@2: scope:[mul16u] from mul16u::@1
[106] (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:79::mul16u:91 [ 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:76::mulu16_sel:122::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 mul16u::$1 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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:76::mulu16_sel:137::mul16u:155 [ 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:76::mulu16_sel:142::mul16u:155 [ 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 ] )
[107] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 [ mul16u::res#2 mul16u::a#3 mul16u::mb#2 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ 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:76::mulu16_sel:122::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::res#2 mul16u::a#3 mul16u::mb#2 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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:76::mulu16_sel:137::mul16u:155 [ 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:76::mulu16_sel:142::mul16u:155 [ 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 ] )
to:mul16u::@7
mul16u::@7: scope:[mul16u] from mul16u::@2
[108] (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:79::mul16u:91 [ 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:76::mulu16_sel:122::mul16u: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::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::a#3 mul16u::mb#2 mul16u::res#1 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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:76::mulu16_sel:137::mul16u:155 [ 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:76::mulu16_sel:142::mul16u:155 [ 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 ] )
to:mul16u::@4
mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@7
[109] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 ) [ mul16u::a#3 mul16u::mb#2 mul16u::res#6 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ 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#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122::mul16u: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::a#3 mul16u::mb#2 mul16u::res#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::a#3 mul16u::mb#2 mul16u::res#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137::mul16u:155 [ 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#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142::mul16u:155 [ 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#6 ] )
[110] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::mb#2 mul16u::a#0 mul16u::res#6 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::mb#2 mul16u::a#0 mul16u::res#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122::mul16u: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::mb#2 mul16u::a#0 mul16u::res#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::mb#2 mul16u::a#0 mul16u::res#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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::mb#2 mul16u::a#0 mul16u::res#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137::mul16u:155 [ 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::mb#2 mul16u::a#0 mul16u::res#6 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142::mul16u:155 [ 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::mb#2 mul16u::a#0 mul16u::res#6 ] )
[111] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ mul16u::a#0 mul16u::res#6 mul16u::mb#1 ] ( main:3::sin16s_gen2:21::mul16s:79::mul16u:91 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 mul16s::a#0 mul16u::a#0 mul16u::res#6 mul16u::mb#1 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122::mul16u: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::a#0 mul16u::res#6 mul16u::mb#1 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127::mul16u: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::a#0 mul16u::res#6 mul16u::mb#1 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131::mul16u:155 [ 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#0 mul16u::res#6 mul16u::mb#1 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137::mul16u:155 [ 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#0 mul16u::res#6 mul16u::mb#1 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142::mul16u:155 [ 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#0 mul16u::res#6 mul16u::mb#1 ] )
to:mul16u::@1
sin16s: scope:[sin16s] from sin16s_gen2::@1
[112] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#0 ] )
to:sin16s::@4
sin16s::@4: scope:[sin16s] from sin16s
[113] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0 [ sin16s::x#1 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#1 ] )
to:sin16s::@1
sin16s::@1: scope:[sin16s] from sin16s sin16s::@4
[114] (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 ) [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#4 sin16s::isUpper#2 ] )
[114] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 ) [ sin16s::x#4 sin16s::isUpper#2 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#4 sin16s::isUpper#2 ] )
[115] 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:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::x#4 sin16s::isUpper#2 ] )
to:sin16s::@5
sin16s::@5: scope:[sin16s] from sin16s::@1
[116] (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:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x#2 ] )
to:sin16s::@2
sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5
[117] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 ) [ sin16s::isUpper#2 sin16s::x#6 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x#6 ] )
[118] (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:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::$6 ] )
[119] (word) sin16s::x1#0 ← > (dword~) sin16s::$6 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 ] )
[120] (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:76 [ 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 ] )
[121] (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:76 [ 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 ] )
[122] call mulu16_sel [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:76 [ 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 ] )
[123] (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:76 [ 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 ] )
to:sin16s::@8
sin16s::@8: scope:[sin16s] from sin16s::@2
[124] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x2#0 ] ( main:3::sin16s_gen2:21::sin16s:76 [ 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 ] )
[125] (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:76 [ 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 ] )
[126] (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:76 [ 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 ] )
[127] call mulu16_sel [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:76 [ 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 ] )
[128] (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:76 [ 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 ] )
to:sin16s::@9
sin16s::@9: scope:[sin16s] from sin16s::@8
[129] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1 [ sin16s::isUpper#2 sin16s::x1#0 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:76 [ 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 ] )
[130] (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:76 [ 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 ] )
[131] call mulu16_sel [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 sin16s::x3#0 ] ( main:3::sin16s_gen2:21::sin16s:76 [ 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 sin16s::x3#0 ] )
[132] (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:76 [ 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 ] )
to:sin16s::@10
sin16s::@10: scope:[sin16s] from sin16s::@9
[133] (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:76 [ 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 ] )
[134] (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:76 [ 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 ] )
[135] (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:76 [ 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 ] )
[136] (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:76 [ 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 ] )
[137] call mulu16_sel [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::return#12 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:76 [ 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 sin16s::usinx#0 ] )
[138] (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:76 [ 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 ] )
to:sin16s::@11
sin16s::@11: scope:[sin16s] from sin16s::@10
[139] (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:76 [ 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 ] )
[140] (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:76 [ 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 ] )
[141] (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:76 [ 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 ] )
[142] call mulu16_sel [ sin16s::isUpper#2 mulu16_sel::return#12 sin16s::usinx#0 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 mulu16_sel::return#12 sin16s::usinx#0 ] )
[143] (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:76 [ 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 ] )
to:sin16s::@12
sin16s::@12: scope:[sin16s] from sin16s::@11
[144] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11 [ sin16s::isUpper#2 sin16s::usinx#0 sin16s::x5#0 ] ( main:3::sin16s_gen2:21::sin16s:76 [ 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 ] )
[145] (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:76 [ 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 ] )
[146] (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:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#1 ] )
[147] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15 [ sin16s::usinx#1 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::usinx#1 ] )
to:sin16s::@6
sin16s::@6: scope:[sin16s] from sin16s::@12
[148] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1 [ sin16s::sinx#1 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::sinx#1 ] )
to:sin16s::@3
sin16s::@3: scope:[sin16s] from sin16s::@15 sin16s::@6
[149] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 ) [ sin16s::return#1 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#1 ] )
to:sin16s::@return
sin16s::@return: scope:[sin16s] from sin16s::@3
[150] return [ sin16s::return#1 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#1 ] )
to:@return
sin16s::@15: scope:[sin16s] from sin16s::@12
[151] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1 [ sin16s::return#5 ] ( main:3::sin16s_gen2:21::sin16s:76 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::return#5 ] )
to:sin16s::@3
mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@11 sin16s::@2 sin16s::@8 sin16s::@9
[152] (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 ) [ mulu16_sel::v1#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] )
[152] (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 ) [ mulu16_sel::v1#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] )
[152] (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 ) [ mulu16_sel::v1#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142 [ 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#5 mulu16_sel::v2#5 mulu16_sel::select#5 ] )
[153] (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:76::mulu16_sel:122 [ 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:76::mulu16_sel:127 [ 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:76::mulu16_sel:131 [ 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:76::mulu16_sel:137 [ 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:76::mulu16_sel:142 [ 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 ] )
[154] (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:76::mulu16_sel:122 [ 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:76::mulu16_sel:127 [ 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:76::mulu16_sel:131 [ 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:76::mulu16_sel:137 [ 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:76::mulu16_sel:142 [ 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 ] )
[155] call mul16u [ mul16u::res#2 mulu16_sel::select#5 ] ( main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::res#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:127 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::x1#0 mul16u::res#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:131 [ 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::res#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:137 [ 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::res#2 mulu16_sel::select#5 ] main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:142 [ sin16s_gen2::step#0 sin16s_gen2::x#2 sin16s_gen2::sintab#2 sin16s_gen2::i#2 sin16s::isUpper#2 sin16s::usinx#0 mul16u::res#2 mulu16_sel::select#5 ] )
[156] (dword) mul16u::return#3 ← (dword) mul16u::res#2 [ mulu16_sel::select#5 mul16u::return#3 ] ( main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122 [ 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:76::mulu16_sel:127 [ 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:76::mulu16_sel:131 [ 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:76::mulu16_sel:137 [ 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:76::mulu16_sel:142 [ 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 ] )
to:mulu16_sel::@2
mulu16_sel::@2: scope:[mulu16_sel] from mulu16_sel
[157] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3 [ mulu16_sel::select#5 mulu16_sel::$0 ] ( main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122 [ 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:76::mulu16_sel:127 [ 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:76::mulu16_sel:131 [ 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:76::mulu16_sel:137 [ 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:76::mulu16_sel:142 [ 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 ] )
[158] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5 [ mulu16_sel::$1 ] ( main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122 [ 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:76::mulu16_sel:127 [ 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:76::mulu16_sel:131 [ 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:76::mulu16_sel:137 [ 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:76::mulu16_sel:142 [ 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 ] )
[159] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1 [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122 [ 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:76::mulu16_sel:127 [ 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:76::mulu16_sel:131 [ 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:76::mulu16_sel:137 [ 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:76::mulu16_sel:142 [ 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 ] )
to:mulu16_sel::@return
mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@2
[160] return [ mulu16_sel::return#12 ] ( main:3::sin16s_gen2:21::sin16s:76::mulu16_sel:122 [ 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:76::mulu16_sel:127 [ 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:76::mulu16_sel:131 [ 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:76::mulu16_sel:137 [ 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:76::mulu16_sel:142 [ 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 ] )
to:@return
div32u16u: scope:[div32u16u] from sin16s_gen2
[161] phi() [ ] ( main:3::sin16s_gen2:21::div32u16u:71 [ ] )
[162] call divr16u [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:71 [ divr16u::return#0 rem16u#1 ] )
[163] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::return#2 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:71 [ divr16u::return#2 rem16u#1 ] )
to:div32u16u::@2
div32u16u::@2: scope:[div32u16u] from div32u16u
[164] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2 [ div32u16u::quotient_hi#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:71 [ div32u16u::quotient_hi#0 rem16u#1 ] )
[165] (word) divr16u::rem#4 ← (word) rem16u#1 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] ( main:3::sin16s_gen2:21::div32u16u:71 [ div32u16u::quotient_hi#0 divr16u::rem#4 ] )
[166] call divr16u [ divr16u::return#0 div32u16u::quotient_hi#0 ] ( main:3::sin16s_gen2:21::div32u16u:71 [ divr16u::return#0 div32u16u::quotient_hi#0 ] )
[167] (word) divr16u::return#3 ← (word) divr16u::return#0 [ div32u16u::quotient_hi#0 divr16u::return#3 ] ( main:3::sin16s_gen2:21::div32u16u:71 [ div32u16u::quotient_hi#0 divr16u::return#3 ] )
to:div32u16u::@3
div32u16u::@3: scope:[div32u16u] from div32u16u::@2
[168] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] ( main:3::sin16s_gen2:21::div32u16u:71 [ div32u16u::quotient_hi#0 div32u16u::quotient_lo#0 ] )
[169] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0 [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:71 [ div32u16u::return#0 ] )
to:div32u16u::@return
div32u16u::@return: scope:[div32u16u] from div32u16u::@3
[170] return [ div32u16u::return#0 ] ( main:3::sin16s_gen2:21::div32u16u:71 [ div32u16u::return#0 ] )
to:@return
divr16u: scope:[divr16u] from div32u16u div32u16u::@2
[171] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 ) [ divr16u::rem#10 divr16u::dividend#5 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::rem#10 divr16u::dividend#5 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::rem#10 divr16u::dividend#5 ] )
[171] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 ) [ divr16u::rem#10 divr16u::dividend#5 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::rem#10 divr16u::dividend#5 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::rem#10 divr16u::dividend#5 ] )
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[172] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] )
[172] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] )
[172] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] )
[172] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [ divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::rem#5 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 ] )
[173] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] )
[174] (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:71::divr16u:162 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] )
[175] (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:71::divr16u:162 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] )
[176] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] )
to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1
[177] (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:71::divr16u:162 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] )
to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[178] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::dividend#3 divr16u::quotient#3 divr16u::i#2 divr16u::rem#6 ] )
[179] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 ] )
[180] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] )
[181] if((word) divr16u::rem#6<(const word) SIN_SIZE#0) goto divr16u::@3 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#1 ] )
to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2
[182] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#6 divr16u::quotient#2 ] )
[183] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] )
to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[184] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::return#0 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::return#0 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] )
[184] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::return#0 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::return#0 divr16u::i#2 divr16u::rem#11 divr16u::dividend#0 ] )
[185] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::return#0 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::return#0 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] )
[186] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::return#0 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::return#0 divr16u::rem#11 divr16u::dividend#0 divr16u::i#1 ] )
to:divr16u::@6
divr16u::@6: scope:[divr16u] from divr16u::@3
[187] (word) rem16u#1 ← (word) divr16u::rem#11 [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] )
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6
[188] return [ divr16u::return#0 rem16u#1 ] ( main:3::sin16s_gen2:21::div32u16u:71::divr16u:162 [ divr16u::return#0 rem16u#1 ] main:3::sin16s_gen2:21::div32u16u:71::divr16u:166 [ div32u16u::quotient_hi#0 divr16u::return#0 rem16u#1 ] )
to:@return
bitmap_clear: scope:[bitmap_clear] from main::@10
[189] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:3::bitmap_clear:19 [ bitmap_clear::$3 ] )
[190] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:3::bitmap_clear:19 [ bitmap_clear::bitmap#5 ] )
to:bitmap_clear::@1
bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3
[191] (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:3::bitmap_clear:19 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] )
[191] (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*~) bitmap_clear::bitmap#5 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:3::bitmap_clear:19 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] )
to:bitmap_clear::@2
bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2
[192] (byte) bitmap_clear::x#2 ← phi( bitmap_clear::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@2/(byte) bitmap_clear::x#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:3::bitmap_clear:19 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] )
[192] (byte*) bitmap_clear::bitmap#2 ← phi( bitmap_clear::@1/(byte*) bitmap_clear::bitmap#3 bitmap_clear::@2/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:3::bitmap_clear:19 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] )
[193] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:3::bitmap_clear:19 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] )
[194] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:3::bitmap_clear:19 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] )
[195] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:3::bitmap_clear:19 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] )
[196] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:3::bitmap_clear:19 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] )
to:bitmap_clear::@3
bitmap_clear::@3: scope:[bitmap_clear] from bitmap_clear::@2
[197] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:3::bitmap_clear:19 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] )
[198] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:3::bitmap_clear:19 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] )
to:bitmap_clear::@return
bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@3
[199] return [ ] ( main:3::bitmap_clear:19 [ ] )
to:@return
bitmap_init: scope:[bitmap_init] from main::@9
[200] phi() [ ] ( main:3::bitmap_init:17 [ ] )
to:bitmap_init::@1
bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2
[201] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:3::bitmap_init:17 [ bitmap_init::bits#3 bitmap_init::x#2 ] )
[201] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte/word/signed word/dword/signed dword) 128 bitmap_init::@2/(byte) bitmap_init::bits#4 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:3::bitmap_init:17 [ bitmap_init::bits#3 bitmap_init::x#2 ] )
[202] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:3::bitmap_init:17 [ bitmap_init::bits#3 bitmap_init::x#2 ] )
[203] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:3::bitmap_init:17 [ bitmap_init::x#2 bitmap_init::bits#1 ] )
[204] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:3::bitmap_init:17 [ bitmap_init::x#2 bitmap_init::bits#1 ] )
to:bitmap_init::@2
bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@10
[205] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@10/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte/word/signed word/dword/signed dword) 128 ) [ bitmap_init::x#2 bitmap_init::bits#4 ] ( main:3::bitmap_init:17 [ bitmap_init::x#2 bitmap_init::bits#4 ] )
[206] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:3::bitmap_init:17 [ bitmap_init::bits#4 bitmap_init::x#1 ] )
[207] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:3::bitmap_init:17 [ bitmap_init::bits#4 bitmap_init::x#1 ] )
to:bitmap_init::@3
bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4
[208] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#4 bitmap_init::@2/(const byte*) BITMAP#0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] )
[208] (byte) bitmap_init::y#2 ← phi( bitmap_init::@4/(byte) bitmap_init::y#1 bitmap_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] )
[209] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] )
[210] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] )
[211] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] )
[212] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] )
[213] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] )
[214] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] )
[215] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] )
[216] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] )
to:bitmap_init::@7
bitmap_init::@7: scope:[bitmap_init] from bitmap_init::@3
[217] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] )
to:bitmap_init::@4
bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@7
[218] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@7/(byte*) bitmap_init::yoffs#1 ) [ bitmap_init::y#2 bitmap_init::yoffs#4 ] ( main:3::bitmap_init:17 [ bitmap_init::y#2 bitmap_init::yoffs#4 ] )
[219] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:3::bitmap_init:17 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] )
[220] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:3::bitmap_init:17 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] )
to:bitmap_init::@return
bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4
[221] return [ ] ( main:3::bitmap_init:17 [ ] )
to:@return
bitmap_init::@10: scope:[bitmap_init] from bitmap_init::@1
[222] phi() [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:3::bitmap_init:17 [ bitmap_init::x#2 bitmap_init::bits#1 ] )
to:bitmap_init::@2
fill: scope:[fill] from main::@8
[223] phi() [ ] ( main:3::fill:15 [ ] )
to:fill::@1
fill::@1: scope:[fill] from fill fill::@1
[224] (byte*) fill::addr#2 ← phi( fill/(const byte*) SCREEN#0 fill::@1/(byte*) fill::addr#1 ) [ fill::addr#2 ] ( main:3::fill:15 [ fill::addr#2 ] )
[225] *((byte*) fill::addr#2) ← (const byte) WHITE#0 [ fill::addr#2 ] ( main:3::fill:15 [ fill::addr#2 ] )
[226] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2 [ fill::addr#1 ] ( main:3::fill:15 [ fill::addr#1 ] )
[227] if((byte*) fill::addr#1!=(const byte*) fill::end#0) goto fill::@1 [ fill::addr#1 ] ( main:3::fill:15 [ fill::addr#1 ] )
to:fill::@return
fill::@return: scope:[fill] from fill::@1
[228] return [ ] ( main:3::fill:15 [ ] )
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,440 @@
(label) @28
(label) @31
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BITMAP
(const byte*) BITMAP#0 BITMAP = ((byte*))(word/signed word/dword/signed dword) 8192
(byte*) CIA2_PORT_A
(const byte*) CIA2_PORT_A#0 CIA2_PORT_A = ((byte*))(word/dword/signed dword) 56576
(byte*) CIA2_PORT_A_DDR
(const byte*) CIA2_PORT_A_DDR#0 CIA2_PORT_A_DDR = ((byte*))(word/dword/signed dword) 56578
(byte*) D011
(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) 53265
(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
(dword) PI2_u4f28
(const dword) PI2_u4f28#0 PI2_u4f28 = (dword/signed dword) 1686629713
(dword) PI_HALF_u4f28
(const dword) PI_HALF_u4f28#0 PI_HALF_u4f28 = (dword/signed dword) 421657428
(dword) PI_u4f28
(const dword) PI_u4f28#0 PI_u4f28 = (dword/signed dword) 843314857
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte/signed byte/word/signed word/dword/signed dword) 53
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(word) SIN_SIZE
(const word) SIN_SIZE#0 SIN_SIZE = (word/signed word/dword/signed dword) 512
(byte) VIC_BMM
(const byte) VIC_BMM#0 VIC_BMM = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte) VIC_CSEL
(const byte) VIC_CSEL#0 VIC_CSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_DEN
(const byte) VIC_DEN#0 VIC_DEN = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(void()) bitmap_clear()
(word~) bitmap_clear::$3 $3 zp ZP_WORD:2 2.0
(label) bitmap_clear::@1
(label) bitmap_clear::@2
(label) bitmap_clear::@3
(label) bitmap_clear::@return
(byte*) bitmap_clear::bitmap
(byte*) bitmap_clear::bitmap#1 bitmap zp ZP_WORD:2 42.599999999999994
(byte*) bitmap_clear::bitmap#2 bitmap zp ZP_WORD:2 157.0
(byte*) bitmap_clear::bitmap#3 bitmap zp ZP_WORD:2 24.0
(byte*~) bitmap_clear::bitmap#5 bitmap zp ZP_WORD:2 4.0
(byte) bitmap_clear::x
(byte) bitmap_clear::x#1 reg byte x 151.5
(byte) bitmap_clear::x#2 reg byte x 67.33333333333333
(byte) bitmap_clear::y
(byte) bitmap_clear::y#1 y zp ZP_BYTE:22 16.5
(byte) bitmap_clear::y#4 y zp ZP_BYTE:22 3.6666666666666665
(void()) bitmap_init((byte*) bitmap_init::bitmap)
(byte~) bitmap_init::$3 $3 zp ZP_BYTE:22 11.0
(byte~) bitmap_init::$4 reg byte a 22.0
(byte~) bitmap_init::$5 reg byte a 22.0
(byte~) bitmap_init::$6 reg byte a 22.0
(byte~) bitmap_init::$7 reg byte a 22.0
(label) bitmap_init::@1
(label) bitmap_init::@10
(label) bitmap_init::@2
(label) bitmap_init::@3
(label) bitmap_init::@4
(label) bitmap_init::@7
(label) bitmap_init::@return
(byte*) bitmap_init::bitmap
(byte) bitmap_init::bits
(byte) bitmap_init::bits#1 reg byte a 11.0
(byte) bitmap_init::bits#3 reg byte a 16.5
(byte) bitmap_init::bits#4 reg byte a 7.333333333333333
(byte) bitmap_init::x
(byte) bitmap_init::x#1 reg byte x 16.5
(byte) bitmap_init::x#2 reg byte x 5.5
(byte) bitmap_init::y
(byte) bitmap_init::y#1 reg byte x 16.5
(byte) bitmap_init::y#2 reg byte x 6.0
(byte*) bitmap_init::yoffs
(byte*) bitmap_init::yoffs#1 yoffs zp ZP_WORD:2 22.0
(byte*) bitmap_init::yoffs#2 yoffs zp ZP_WORD:2 6.111111111111112
(byte*) bitmap_init::yoffs#4 yoffs zp ZP_WORD:2 11.0
(void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y)
(word~) bitmap_plot::$1 $1 zp ZP_WORD:16 4.0
(byte~) bitmap_plot::$2 reg byte a 4.0
(word~) bitmap_plot::$3 $3 zp ZP_WORD:6 1.0
(label) bitmap_plot::@return
(byte*) bitmap_plot::plotter
(byte*) bitmap_plot::plotter#1 plotter zp ZP_WORD:6 3.0
(word) bitmap_plot::x
(word) bitmap_plot::x#0 x zp ZP_WORD:4 11.0
(word) bitmap_plot::x#1 x zp ZP_WORD:4 11.0
(word) bitmap_plot::x#2 x zp ZP_WORD:4 6.5
(byte) bitmap_plot::y
(byte) bitmap_plot::y#0 reg byte x 22.0
(byte) bitmap_plot::y#1 reg byte x 22.0
(byte) bitmap_plot::y#2 reg byte x 26.0
(byte[256]) bitmap_plot_bit
(const byte[256]) bitmap_plot_bit#0 bitmap_plot_bit = { fill( 256, 0) }
(byte[256]) bitmap_plot_yhi
(const byte[256]) bitmap_plot_yhi#0 bitmap_plot_yhi = { fill( 256, 0) }
(byte[256]) bitmap_plot_ylo
(const byte[256]) bitmap_plot_ylo#0 bitmap_plot_ylo = { fill( 256, 0) }
(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:6 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp ZP_DWORD:27 1.3333333333333333
(dword) div32u16u::return#2 return zp ZP_DWORD:27 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
(label) divr16u::@1
(label) divr16u::@2
(label) divr16u::@3
(label) divr16u::@4
(label) divr16u::@5
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp ZP_WORD:4 2.75
(word) divr16u::dividend#3 dividend zp ZP_WORD:4 5.0
(word) divr16u::dividend#5 dividend zp ZP_WORD:4 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp ZP_WORD:6 16.5
(word) divr16u::quotient#2 quotient zp ZP_WORD:6 11.0
(word) divr16u::quotient#3 quotient zp ZP_WORD:6 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp ZP_WORD:2 8.25
(word) divr16u::rem#1 rem zp ZP_WORD:2 22.0
(word) divr16u::rem#10 rem zp ZP_WORD:2 4.0
(word) divr16u::rem#11 rem zp ZP_WORD:2 11.666666666666666
(word) divr16u::rem#2 rem zp ZP_WORD:2 22.0
(word) divr16u::rem#4 rem zp ZP_WORD:2 4.0
(word) divr16u::rem#5 rem zp ZP_WORD:2 24.0
(word) divr16u::rem#6 rem zp ZP_WORD:2 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp ZP_WORD:6 5.285714285714286
(word) divr16u::return#2 return zp ZP_WORD:6 4.0
(word) divr16u::return#3 return zp ZP_WORD:6 4.0
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return
(byte*) fill::addr
(byte*) fill::addr#1 addr zp ZP_WORD:2 16.5
(byte*) fill::addr#2 addr zp ZP_WORD:2 16.5
(byte*) fill::end
(const byte*) fill::end#0 end = (const byte*) SCREEN#0+(const word) fill::size#0
(word) fill::size
(const word) fill::size#0 size = (word/signed word/dword/signed dword) 1000
(byte*) fill::start
(byte) fill::val
(void()) main()
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@2
(label) main::@7
(label) main::@8
(label) main::@9
(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*) BITMAP#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
(label) main::vicSelectGfxBank1
(byte~) main::vicSelectGfxBank1_$0
(label) main::vicSelectGfxBank1_@1
(byte*) main::vicSelectGfxBank1_gfx
(label) main::vicSelectGfxBank1_toDd001
(word~) main::vicSelectGfxBank1_toDd001_$0
(byte~) main::vicSelectGfxBank1_toDd001_$1
(byte~) main::vicSelectGfxBank1_toDd001_$2
(byte/word/dword~) main::vicSelectGfxBank1_toDd001_$3
(byte*) main::vicSelectGfxBank1_toDd001_gfx
(byte) main::vicSelectGfxBank1_toDd001_return
(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte/signed byte/word/signed word/dword/signed dword) 3^>((word))(const byte*) SCREEN#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 $16 zp ZP_WORD:6 4.0
(word~) mul16s::$6 $6 zp ZP_WORD:6 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:12 2.0
(dword) mul16s::m#1 m zp ZP_DWORD:12 4.0
(dword) mul16s::m#4 m zp ZP_DWORD:12 6.0
(signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp ZP_DWORD:12 4.333333333333333
(signed dword) mul16s::return#2 return zp ZP_DWORD:12 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:6 4.0
(word) mul16u::b#2 b zp ZP_WORD:6 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:12 202.0
(dword) mul16u::res#2 res zp ZP_DWORD:12 43.85714285714286
(dword) mul16u::res#6 res zp ZP_DWORD:12 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp ZP_DWORD:12 4.0
(dword) mul16u::return#3 return zp ZP_DWORD:12 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:12 4.0
(dword~) mulu16_sel::$1 $1 zp ZP_DWORD:12 4.0
(label) mulu16_sel::@2
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp ZP_WORD:6 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:6 4.0
(word) mulu16_sel::return#12 return zp ZP_WORD:6 1.714285714285714
(word) mulu16_sel::return#2 return zp ZP_WORD:6 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:6 4.0
(word) mulu16_sel::v2#1 v2 zp ZP_WORD:6 4.0
(word) mulu16_sel::v2#3 v2 zp ZP_WORD:6 4.0
(word) mulu16_sel::v2#4 v2 zp ZP_WORD:6 4.0
(word) mulu16_sel::v2#5 v2 zp ZP_WORD:6 5.0
(word) rem16u
(word) rem16u#1 rem16u zp ZP_WORD:2 0.8
(void()) render_sine()
(word~) render_sine::$0 $0 zp ZP_WORD:6 22.0
(signed word*~) render_sine::$1 $1 zp ZP_WORD:6 22.0
(word~) render_sine::$4 $4 zp ZP_WORD:6 22.0
(signed word*~) render_sine::$5 $5 zp ZP_WORD:6 22.0
(label) render_sine::@1
(label) render_sine::@10
(label) render_sine::@2
(label) render_sine::@5
(label) render_sine::@6
(label) render_sine::@7
(label) render_sine::@8
(label) render_sine::@return
(signed word) render_sine::sin2_val
(signed word) render_sine::sin2_val#0 sin2_val zp ZP_WORD:6 22.0
(word) render_sine::sin_idx
(word) render_sine::sin_idx#1 sin_idx zp ZP_WORD:2 16.5
(word) render_sine::sin_idx#2 sin_idx zp ZP_WORD:2 1.76
(signed word) render_sine::sin_val
(signed word) render_sine::sin_val#0 sin_val zp ZP_WORD:6 22.0
(word) render_sine::xpos
(word) render_sine::xpos#1 xpos zp ZP_WORD:4 11.0
(word) render_sine::xpos#3 xpos zp ZP_WORD:4 2.0952380952380953
(word) render_sine::xpos#8 xpos zp ZP_WORD:4 7.333333333333333
(byte) render_sine::ypos
(byte) render_sine::ypos#0 reg byte x 11.0
(byte) render_sine::ypos2
(byte) render_sine::ypos2#0 reg byte x 11.0
(signed word[512]) sin
(const signed word[512]) sin#0 sin = { fill( 512, 0) }
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$6 $6 zp ZP_DWORD:12 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:12 8.5
(dword) sin16s::x#1 x zp ZP_DWORD:12 4.0
(dword) sin16s::x#2 x zp ZP_DWORD:12 4.0
(dword) sin16s::x#4 x zp ZP_DWORD:12 5.0
(dword) sin16s::x#6 x zp ZP_DWORD:12 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:6 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:6 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp ZP_WORD:6 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:12 22.0
(word~) sin16s_gen2::$6 $6 zp ZP_WORD:6 11.0
(signed word~) sin16s_gen2::$8 $8 zp ZP_WORD:6 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:4 16.5
(word) sin16s_gen2::i#2 i zp ZP_WORD:4 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:8 7.333333333333333
(dword) sin16s_gen2::x#2 x zp ZP_DWORD:8 2.75
(signed word*) sin2
(const signed word*) sin2#0 sin2 = ((signed word*))(word/signed word/dword/signed dword) 5120
(byte()) wrap_y((signed word) wrap_y::y)
(label) wrap_y::@1
(label) wrap_y::@2
(label) wrap_y::@4
(label) wrap_y::@5
(label) wrap_y::@6
(label) wrap_y::@return
(byte) wrap_y::return
(byte) wrap_y::return#0 reg byte a 22.0
(byte) wrap_y::return#1 reg byte a 22.0
(byte) wrap_y::return#2 reg byte a 6.0
(signed word) wrap_y::y
(signed word) wrap_y::y#0 y zp ZP_WORD:6 22.0
(signed word) wrap_y::y#1 y zp ZP_WORD:6 22.0
(signed word) wrap_y::y#2 y zp ZP_WORD:6 202.0
(signed word) wrap_y::y#3 y zp ZP_WORD:6 202.0
(signed word) wrap_y::y#4 y zp ZP_WORD:6 203.0
(signed word) wrap_y::y#6 y zp ZP_WORD:6 203.0
(signed word) wrap_y::y#9 y zp ZP_WORD:6 24.0
zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 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 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 fill::addr#2 fill::addr#1 ]
zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#8 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
reg byte x [ bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ]
zp ZP_WORD:6 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#0 wrap_y::y#1 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$0 render_sine::$1 render_sine::$4 render_sine::$5 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 bitmap_plot::$3 bitmap_plot::plotter#1 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_DWORD:8 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
zp ZP_DWORD:12 [ 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:16 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 bitmap_plot::$1 div32u16u::quotient_hi#0 ]
zp ZP_DWORD:18 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp ZP_BYTE:22 [ sin16s::isUpper#2 bitmap_clear::y#4 bitmap_clear::y#1 bitmap_init::$3 ]
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 [ bitmap_clear::x#2 bitmap_clear::x#1 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
reg byte a [ wrap_y::return#0 ]
reg byte x [ render_sine::ypos#0 ]
reg byte a [ wrap_y::return#1 ]
reg byte x [ render_sine::ypos2#0 ]
reg byte a [ bitmap_plot::$2 ]
reg byte a [ wrap_y::return#2 ]
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 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
reg byte a [ bitmap_init::$7 ]