1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-02-20 00:29:10 +00:00

Fixing tests with word arrays/pointers. Preparing for #139

This commit is contained in:
jespergravgaard 2019-04-19 10:50:15 +02:00
parent eb26618295
commit 4f04aa47b7
20 changed files with 5488 additions and 5350 deletions

View File

@ -10,14 +10,16 @@ import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.statements.StatementAssignment; import dk.camelot64.kickc.model.statements.StatementAssignment;
import dk.camelot64.kickc.model.symbols.Variable; import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.symbols.VariableIntermediate; import dk.camelot64.kickc.model.symbols.VariableIntermediate;
import dk.camelot64.kickc.model.types.SymbolType; import dk.camelot64.kickc.model.types.SymbolTypeInference;
import dk.camelot64.kickc.model.types.SymbolTypePointer; import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.values.ConstantRef; import dk.camelot64.kickc.model.values.ConstantRef;
import dk.camelot64.kickc.model.values.PointerDereferenceIndexed; import dk.camelot64.kickc.model.values.PointerDereferenceIndexed;
import dk.camelot64.kickc.model.values.RValue; import dk.camelot64.kickc.model.values.RValue;
import dk.camelot64.kickc.model.values.VariableRef; import dk.camelot64.kickc.model.values.VariableRef;
import java.util.*; import java.util.LinkedHashMap;
import java.util.ListIterator;
import java.util.Map;
/** /**
* Fixes pointer math to use sizeof(type) * Fixes pointer math to use sizeof(type)
@ -61,7 +63,7 @@ public class Pass1PointerSizeofFix extends Pass1Base {
VariableRef idx2VarRef = handled.getOrDefault(currentStmt, new LinkedHashMap<>()).get(deref.getIndex()); VariableRef idx2VarRef = handled.getOrDefault(currentStmt, new LinkedHashMap<>()).get(deref.getIndex());
if(idx2VarRef==null) { if(idx2VarRef==null) {
VariableIntermediate idx2Var = getScope().getScope(currentBlock.getScope()).addVariableIntermediate(); VariableIntermediate idx2Var = getScope().getScope(currentBlock.getScope()).addVariableIntermediate();
idx2Var.setType(SymbolType.BYTE); idx2Var.setType(SymbolTypeInference.inferType(getScope(), deref.getIndex()));
ConstantRef sizeOfTargetType = OperatorSizeOf.getSizeOfConstantVar(getProgram().getScope(), pointerType.getElementType()); ConstantRef sizeOfTargetType = OperatorSizeOf.getSizeOfConstantVar(getProgram().getScope(), pointerType.getElementType());
StatementAssignment idx2 = new StatementAssignment(idx2Var.getRef(), deref.getIndex(), Operators.MULTIPLY, sizeOfTargetType, currentStmt.getSource(), Comment.NO_COMMENTS); StatementAssignment idx2 = new StatementAssignment(idx2Var.getRef(), deref.getIndex(), Operators.MULTIPLY, sizeOfTargetType, currentStmt.getSource(), Comment.NO_COMMENTS);
stmtIt.previous(); stmtIt.previous();
@ -97,7 +99,7 @@ public class Pass1PointerSizeofFix extends Pass1Base {
// Adding to a pointer - multiply by sizeof() // Adding to a pointer - multiply by sizeof()
getLog().append("Fixing pointer addition " + assignment.toString(getProgram(), false)); getLog().append("Fixing pointer addition " + assignment.toString(getProgram(), false));
VariableIntermediate tmpVar = getScope().getScope(block.getScope()).addVariableIntermediate(); VariableIntermediate tmpVar = getScope().getScope(block.getScope()).addVariableIntermediate();
tmpVar.setType(SymbolType.BYTE); tmpVar.setType(SymbolTypeInference.inferType(getScope(), assignment.getrValue2()));
stmtIt.remove(); stmtIt.remove();
ConstantRef sizeOfTargetType = OperatorSizeOf.getSizeOfConstantVar(getProgram().getScope(), pointerType.getElementType()); ConstantRef sizeOfTargetType = OperatorSizeOf.getSizeOfConstantVar(getProgram().getScope(), pointerType.getElementType());
stmtIt.add(new StatementAssignment(tmpVar.getRef(), assignment.getrValue2(), Operators.MULTIPLY, sizeOfTargetType, assignment.getSource(), Comment.NO_COMMENTS)); stmtIt.add(new StatementAssignment(tmpVar.getRef(), assignment.getrValue2(), Operators.MULTIPLY, sizeOfTargetType, assignment.getSource(), Comment.NO_COMMENTS));

View File

@ -30,8 +30,7 @@ void sin16s_gen(signed word* sintab, word wavelength) {
// Iterate over the table // Iterate over the table
dword x = 0; // u[4.28] dword x = 0; // u[4.28]
for( word i=0; i<wavelength; i++) { for( word i=0; i<wavelength; i++) {
*sintab = sin16s(x); *sintab++ = sin16s(x);
sintab = sintab + 2;
x = x + step; x = x + step;
} }
} }
@ -47,8 +46,7 @@ void sin16s_gen2(signed word* sintab, word wavelength, signed word min, signed w
// Iterate over the table // Iterate over the table
dword x = 0; // u[4.28] dword x = 0; // u[4.28]
for( word i=0; i<wavelength; i++) { for( word i=0; i<wavelength; i++) {
*sintab = offs + (signed word)>mul16s(sin16s(x), ampl); // The signed sin() has values [-7fff;7fff] = [-1/2 ; 1/2], so ampl*sin has the right amplitude *sintab++ = offs + (signed word)>mul16s(sin16s(x), ampl); // The signed sin() has values [-7fff;7fff] = [-1/2 ; 1/2], so ampl*sin has the right amplitude
sintab = sintab + 2;
x = x + step; x = x + step;
} }
} }

View File

@ -41,8 +41,7 @@ void loop() {
(*BORDERCOL)++; (*BORDERCOL)++;
signed word xpos = *(xsin+xsin_idx); signed word xpos = *(xsin+xsin_idx);
render_logo(xpos); render_logo(xpos);
xsin_idx += 2; if(++xsin_idx==XSIN_SIZE) {
if(xsin_idx==XSIN_SIZE*2) {
xsin_idx = 0; xsin_idx = 0;
} }
(*BORDERCOL)--; (*BORDERCOL)--;

View File

@ -7,14 +7,13 @@ signed word[] words = {-$6000, -$600, -$60, -6, 0, 6, $60, $600, $6000};
void main() { void main() {
for(byte i: 0..8) { for(byte i: 0..8) {
byte idx = i*2; sub(i, $80);
sub(idx, $80); sub(i, $40);
sub(idx, $40); sub(i, $40);
sub(idx, $40);
} }
print_cls(); print_cls();
for(byte j: 0..8) { for(byte j: 0..8) {
print_sword(words[j*2]); print_sword(words[j]);
print_ln(); print_ln();
} }

View File

@ -15,8 +15,7 @@ void sin16s_genb(signed word* sintab, word wavelength) {
// Iterate over the table // Iterate over the table
dword x = 0; // u[4.28] dword x = 0; // u[4.28]
for( word i=0; i<wavelength; i++) { for( word i=0; i<wavelength; i++) {
*sintab = sin16sb(>x); *sintab++ = sin16sb(>x);
sintab = sintab + 2;
x = x + step; x = x + step;
} }
} }

View File

@ -19,7 +19,7 @@ void main() {
} }
print_sword(sw); print_sword(sw);
print_str(" "); print_str(" ");
st1 = st1+2; st1++;
st2 = st2+2; st2++;
} }
} }

View File

@ -32,7 +32,7 @@ void test_8u() {
void test_16u() { void test_16u() {
word[] dividends = { $ffff, $ffff, $ffff, $ffff, $ffff, $ffff}; word[] dividends = { $ffff, $ffff, $ffff, $ffff, $ffff, $ffff};
word[] divisors = { 5, 7, 11, 13, 17, 19 }; word[] divisors = { 5, 7, 11, 13, 17, 19 };
for( byte i=0;i!=12;i=i+2) { for( byte i : 0..5) {
word dividend = dividends[i]; word dividend = dividends[i];
word divisor = divisors[i]; word divisor = divisors[i];
word res = div16u(dividend, divisor); word res = div16u(dividend, divisor);
@ -68,7 +68,7 @@ void test_8s() {
void test_16s() { void test_16s() {
signed word[] dividends = { $7fff, $7fff, -$7fff, -$7fff, $7fff, -$7fff}; signed word[] dividends = { $7fff, $7fff, -$7fff, -$7fff, $7fff, -$7fff};
signed word[] divisors = { 5, -7, 11, -13, -17, 19 }; signed word[] divisors = { 5, -7, 11, -13, -17, 19 };
for( byte i=0;i!=12;i=i+2) { for( byte i: 0..5) {
signed word dividend = dividends[i]; signed word dividend = dividends[i];
signed word divisor = divisors[i]; signed word divisor = divisors[i];
signed word res = div16s(dividend, divisor); signed word res = div16s(dividend, divisor);

View File

@ -1,6 +1,7 @@
.pc = $801 "Basic" .pc = $801 "Basic"
:BasicUpstart(main) :BasicUpstart(main)
.pc = $80d "Program" .pc = $80d "Program"
.const SIZEOF_SIGNED_WORD = 2
.label RASTER = $d012 .label RASTER = $d012
.label BORDERCOL = $d020 .label BORDERCOL = $d020
.label BGCOL = $d021 .label BGCOL = $d021
@ -65,6 +66,7 @@ main: {
} }
loop: { loop: {
.label _1 = 9 .label _1 = 9
.label _5 = 9
.label xpos = 9 .label xpos = 9
lda #0 lda #0
sta xsin_idx sta xsin_idx
@ -77,10 +79,16 @@ loop: {
bne b2 bne b2
inc BORDERCOL inc BORDERCOL
lda xsin_idx lda xsin_idx
asl
sta _5
lda xsin_idx+1
rol
sta _5+1
clc clc
lda _1
adc #<xsin adc #<xsin
sta _1 sta _1
lda xsin_idx+1 lda _1+1
adc #>xsin adc #>xsin
sta _1+1 sta _1+1
ldy #0 ldy #0
@ -91,18 +99,15 @@ loop: {
stx xpos stx xpos
sta xpos+1 sta xpos+1
jsr render_logo jsr render_logo
lda xsin_idx inc xsin_idx
clc bne !+
adc #2
sta xsin_idx
bcc !+
inc xsin_idx+1 inc xsin_idx+1
!: !:
lda xsin_idx+1 lda xsin_idx+1
cmp #>XSIN_SIZE*2 cmp #>XSIN_SIZE
bne b4 bne b4
lda xsin_idx lda xsin_idx
cmp #<XSIN_SIZE*2 cmp #<XSIN_SIZE
bne b4 bne b4
lda #0 lda #0
sta xsin_idx sta xsin_idx
@ -288,9 +293,9 @@ sin16s_gen2: {
iny iny
lda _8+1 lda _8+1
sta (sintab),y sta (sintab),y
lda sintab lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc sintab
sta sintab sta sintab
bcc !+ bcc !+
inc sintab+1 inc sintab+1

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -32,6 +32,7 @@
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) $d012 (const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) $d012
(byte*) SCREEN (byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) $400 (const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) $400
(const byte) SIZEOF_SIGNED_WORD SIZEOF_SIGNED_WORD = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) VIC_MCM (byte) VIC_MCM
(const byte) VIC_MCM#0 VIC_MCM = (byte/signed byte/word/signed word/dword/signed dword) $10 (const byte) VIC_MCM#0 VIC_MCM = (byte/signed byte/word/signed word/dword/signed dword) $10
(byte) WHITE (byte) WHITE
@ -102,6 +103,7 @@
(byte) fill::val#3 reg byte x 1.8333333333333333 (byte) fill::val#3 reg byte x 1.8333333333333333
(void()) loop() (void()) loop()
(signed word*~) loop::$1 $1 zp ZP_WORD:9 22.0 (signed word*~) loop::$1 $1 zp ZP_WORD:9 22.0
(word) loop::$5 $5 zp ZP_WORD:9 22.0
(label) loop::@1 (label) loop::@1
(label) loop::@2 (label) loop::@2
(label) loop::@3 (label) loop::@3
@ -356,7 +358,7 @@
(signed word[XSIN_SIZE#0]) xsin (signed word[XSIN_SIZE#0]) xsin
(const signed word[XSIN_SIZE#0]) xsin#0 xsin = { fill( XSIN_SIZE#0, 0) } (const signed word[XSIN_SIZE#0]) xsin#0 xsin = { fill( XSIN_SIZE#0, 0) }
(word) xsin_idx (word) xsin_idx
(word) xsin_idx#11 xsin_idx zp ZP_WORD:2 4.714285714285714 (word) xsin_idx#11 xsin_idx zp ZP_WORD:2 4.125
(word) xsin_idx#19 xsin_idx zp ZP_WORD:2 11.0 (word) xsin_idx#19 xsin_idx zp ZP_WORD:2 11.0
(word) xsin_idx#3 xsin_idx zp ZP_WORD:2 11.0 (word) xsin_idx#3 xsin_idx zp ZP_WORD:2 11.0
@ -366,7 +368,7 @@ reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::s
zp ZP_BYTE:4 [ render_logo::logo_idx#10 render_logo::logo_idx#3 render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 sin16s::isUpper#2 render_logo::x_char#0 ] zp ZP_BYTE:4 [ render_logo::logo_idx#10 render_logo::logo_idx#3 render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 sin16s::isUpper#2 render_logo::x_char#0 ]
reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
zp ZP_DWORD:5 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ] zp ZP_DWORD:5 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
zp ZP_WORD:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 loop::$1 loop::xpos#0 render_logo::xpos#0 fill::end#0 ] zp ZP_WORD:9 [ sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 loop::$5 loop::$1 loop::xpos#0 render_logo::xpos#0 fill::end#0 ]
zp ZP_DWORD:11 [ 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::$4 ] zp ZP_DWORD:11 [ 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::$4 ]
zp ZP_WORD:15 [ mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 render_logo::$3 sin16s_gen2::$6 sin16s_gen2::$8 mul16s::$9 mul16s::$16 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] zp ZP_WORD:15 [ mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 render_logo::$3 sin16s_gen2::$6 sin16s_gen2::$8 mul16s::$9 mul16s::$16 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]
zp ZP_WORD:17 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 div32u16u::quotient_hi#0 ] zp ZP_WORD:17 [ mul16u::a#3 mul16u::a#6 mul16u::a#8 mul16u::a#2 mul16u::a#0 div32u16u::quotient_hi#0 ]

View File

@ -2,6 +2,7 @@
.pc = $801 "Basic" .pc = $801 "Basic"
:BasicUpstart(main) :BasicUpstart(main)
.pc = $80d "Program" .pc = $80d "Program"
.const SIZEOF_SIGNED_WORD = 2
// PI*2 in u[4.28] format // PI*2 in u[4.28] format
.const PI2_u4f28 = $6487ed51 .const PI2_u4f28 = $6487ed51
// PI in u[4.28] format // PI in u[4.28] format
@ -59,16 +60,16 @@ main: {
lda #>str lda #>str
sta print_str.str+1 sta print_str.str+1
jsr print_str jsr print_str
lda st1 lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc st1
sta st1 sta st1
bcc !+ bcc !+
inc st1+1 inc st1+1
!: !:
lda st2 lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc st2
sta st2 sta st2
bcc !+ bcc !+
inc st2+1 inc st2+1
@ -226,9 +227,9 @@ sin16s_genb: {
iny iny
lda _2+1 lda _2+1
sta (sintab),y sta (sintab),y
lda sintab lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc sintab
sta sintab sta sintab
bcc !+ bcc !+
inc sintab+1 inc sintab+1
@ -618,9 +619,9 @@ sin16s_gen: {
iny iny
lda _1+1 lda _1+1
sta (sintab),y sta (sintab),y
lda sintab lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc sintab
sta sintab sta sintab
bcc !+ bcc !+
inc sintab+1 inc sintab+1

View File

@ -41,8 +41,8 @@ main::@6: scope:[main] from main::@2
[19] call print_str [19] call print_str
to:main::@7 to:main::@7
main::@7: scope:[main] from main::@6 main::@7: scope:[main] from main::@6
[20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD
[21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD
[22] (byte) main::i#1 ← ++ (byte) main::i#2 [22] (byte) main::i#1 ← ++ (byte) main::i#2
[23] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $78) goto main::@1 [23] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $78) goto main::@1
to:main::@return to:main::@return
@ -150,7 +150,7 @@ sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@2 sin16s_genb::@3
sin16s_genb::@3: scope:[sin16s_genb] from sin16s_genb::@1 sin16s_genb::@3: scope:[sin16s_genb] from sin16s_genb::@1
[70] (signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#0 [70] (signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#0
[71] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2 [71] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2
[72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
[73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0
[74] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 [74] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2
[75] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@1 [75] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@1
@ -343,7 +343,7 @@ sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@2 sin16s_gen::@3
sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen::@1 sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen::@1
[171] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0 [171] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0
[172] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 [172] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1
[173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
[174] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [174] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0
[175] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 [175] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2
[176] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 [176] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1

View File

@ -1,3 +1,8 @@
Fixing pointer increment (signed word*) sin16s_gen::sintab ← ++ (signed word*) sin16s_gen::sintab
Fixing pointer increment (signed word*) sin16s_gen2::sintab ← ++ (signed word*) sin16s_gen2::sintab
Fixing pointer increment (signed word*) sin16s_genb::sintab ← ++ (signed word*) sin16s_genb::sintab
Fixing pointer increment (signed word*) main::st1 ← ++ (signed word*) main::st1
Fixing pointer increment (signed word*) main::st2 ← ++ (signed word*) main::st2
Identified constant variable (word) main::wavelength Identified constant variable (word) main::wavelength
CONTROL FLOW GRAPH SSA CONTROL FLOW GRAPH SSA
@ -222,13 +227,12 @@ sin16s_gen::@4: scope:[sin16s_gen] from sin16s_gen::@1
(signed word) sin16s::return#3 ← phi( sin16s_gen::@1/(signed word) sin16s::return#0 ) (signed word) sin16s::return#3 ← phi( sin16s_gen::@1/(signed word) sin16s::return#0 )
(signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#3 (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#3
*((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1
(signed word*~) sin16s_gen::$2 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
(signed word*) sin16s_gen::sintab#0 ← (signed word*~) sin16s_gen::$2 (dword~) sin16s_gen::$2 ← (dword) sin16s_gen::x#3 + (dword) sin16s_gen::step#1
(dword~) sin16s_gen::$3 ← (dword) sin16s_gen::x#3 + (dword) sin16s_gen::step#1 (dword) sin16s_gen::x#1 ← (dword~) sin16s_gen::$2
(dword) sin16s_gen::x#1 ← (dword~) sin16s_gen::$3
(word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2
(bool~) sin16s_gen::$4 ← (word) sin16s_gen::i#1 < (word) sin16s_gen::wavelength#2 (bool~) sin16s_gen::$3 ← (word) sin16s_gen::i#1 < (word) sin16s_gen::wavelength#2
if((bool~) sin16s_gen::$4) goto sin16s_gen::@1 if((bool~) sin16s_gen::$3) goto sin16s_gen::@1
to:sin16s_gen::@return to:sin16s_gen::@return
sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@4 sin16s_gen::@return: scope:[sin16s_gen] from sin16s_gen::@4
(word) rem16u#19 ← phi( sin16s_gen::@4/(word) rem16u#28 ) (word) rem16u#19 ← phi( sin16s_gen::@4/(word) rem16u#28 )
@ -421,13 +425,12 @@ sin16s_genb::@4: scope:[sin16s_genb] from sin16s_genb::@1
(signed word) sin16sb::return#3 ← phi( sin16s_genb::@1/(signed word) sin16sb::return#0 ) (signed word) sin16sb::return#3 ← phi( sin16s_genb::@1/(signed word) sin16sb::return#0 )
(signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#3 (signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#3
*((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2 *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2
(signed word*~) sin16s_genb::$3 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
(signed word*) sin16s_genb::sintab#0 ← (signed word*~) sin16s_genb::$3 (dword~) sin16s_genb::$3 ← (dword) sin16s_genb::x#3 + (dword) sin16s_genb::step#1
(dword~) sin16s_genb::$4 ← (dword) sin16s_genb::x#3 + (dword) sin16s_genb::step#1 (dword) sin16s_genb::x#1 ← (dword~) sin16s_genb::$3
(dword) sin16s_genb::x#1 ← (dword~) sin16s_genb::$4
(word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2
(bool~) sin16s_genb::$5 ← (word) sin16s_genb::i#1 < (word) sin16s_genb::wavelength#2 (bool~) sin16s_genb::$4 ← (word) sin16s_genb::i#1 < (word) sin16s_genb::wavelength#2
if((bool~) sin16s_genb::$5) goto sin16s_genb::@1 if((bool~) sin16s_genb::$4) goto sin16s_genb::@1
to:sin16s_genb::@return to:sin16s_genb::@return
sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@4 sin16s_genb::@return: scope:[sin16s_genb] from sin16s_genb::@4
(word) rem16u#21 ← phi( sin16s_genb::@4/(word) rem16u#30 ) (word) rem16u#21 ← phi( sin16s_genb::@4/(word) rem16u#30 )
@ -793,13 +796,11 @@ main::@9: scope:[main] from main::@8
(signed word*) main::st1#3 ← phi( main::@8/(signed word*) main::st1#4 ) (signed word*) main::st1#3 ← phi( main::@8/(signed word*) main::st1#4 )
(byte*) print_char_cursor#38 ← phi( main::@8/(byte*) print_char_cursor#2 ) (byte*) print_char_cursor#38 ← phi( main::@8/(byte*) print_char_cursor#2 )
(byte*) print_char_cursor#18 ← (byte*) print_char_cursor#38 (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#38
(signed word*~) main::$9 ← (signed word*) main::st1#3 + (byte/signed byte/word/signed word/dword/signed dword) 2 (signed word*) main::st1#1 ← (signed word*) main::st1#3 + (const byte) SIZEOF_SIGNED_WORD
(signed word*) main::st1#1 ← (signed word*~) main::$9 (signed word*) main::st2#1 ← (signed word*) main::st2#3 + (const byte) SIZEOF_SIGNED_WORD
(signed word*~) main::$10 ← (signed word*) main::st2#3 + (byte/signed byte/word/signed word/dword/signed dword) 2
(signed word*) main::st2#1 ← (signed word*~) main::$10
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,$77) (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,$77)
(bool~) main::$11 ← (byte) main::i#1 != rangelast(0,$77) (bool~) main::$9 ← (byte) main::i#1 != rangelast(0,$77)
if((bool~) main::$11) goto main::@1 if((bool~) main::$9) goto main::@1
to:main::@return to:main::@return
main::@3: scope:[main] from main::@1 main::@3: scope:[main] from main::@1
(byte*) print_line_cursor#20 ← phi( main::@1/(byte*) print_line_cursor#18 ) (byte*) print_line_cursor#20 ← phi( main::@1/(byte*) print_line_cursor#18 )
@ -868,6 +869,7 @@ SYMBOL TABLE SSA
(word) PI_u4f12#0 (word) PI_u4f12#0
(dword) PI_u4f28 (dword) PI_u4f28
(dword) PI_u4f28#0 (dword) PI_u4f28#0
(const byte) SIZEOF_SIGNED_WORD = (byte/signed byte/word/signed word/dword/signed dword) 2
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(word~) div32u16u::$0 (word~) div32u16u::$0
(word~) div32u16u::$1 (word~) div32u16u::$1
@ -980,12 +982,10 @@ SYMBOL TABLE SSA
(word) divr16u::return#5 (word) divr16u::return#5
(word) divr16u::return#6 (word) divr16u::return#6
(void()) main() (void()) main()
(signed word*~) main::$10
(bool~) main::$11
(signed word~) main::$3 (signed word~) main::$3
(bool~) main::$4 (bool~) main::$4
(bool~) main::$5 (bool~) main::$5
(signed word*~) main::$9 (bool~) main::$9
(label) main::@1 (label) main::@1
(label) main::@10 (label) main::@10
(label) main::@2 (label) main::@2
@ -1447,9 +1447,8 @@ SYMBOL TABLE SSA
(void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength) (void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength)
(dword~) sin16s_gen::$0 (dword~) sin16s_gen::$0
(signed word~) sin16s_gen::$1 (signed word~) sin16s_gen::$1
(signed word*~) sin16s_gen::$2 (dword~) sin16s_gen::$2
(dword~) sin16s_gen::$3 (bool~) sin16s_gen::$3
(bool~) sin16s_gen::$4
(label) sin16s_gen::@1 (label) sin16s_gen::@1
(label) sin16s_gen::@3 (label) sin16s_gen::@3
(label) sin16s_gen::@4 (label) sin16s_gen::@4
@ -1485,9 +1484,8 @@ SYMBOL TABLE SSA
(dword~) sin16s_genb::$0 (dword~) sin16s_genb::$0
(word~) sin16s_genb::$1 (word~) sin16s_genb::$1
(signed word~) sin16s_genb::$2 (signed word~) sin16s_genb::$2
(signed word*~) sin16s_genb::$3 (dword~) sin16s_genb::$3
(dword~) sin16s_genb::$4 (bool~) sin16s_genb::$4
(bool~) sin16s_genb::$5
(label) sin16s_genb::@1 (label) sin16s_genb::@1
(label) sin16s_genb::@3 (label) sin16s_genb::@3
(label) sin16s_genb::@4 (label) sin16s_genb::@4
@ -1612,14 +1610,14 @@ SYMBOL TABLE SSA
Inversing boolean not [10] (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [9] (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not [10] (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [9] (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [18] (bool~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from [17] (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2 Inversing boolean not [18] (bool~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from [17] (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2
Inversing boolean not [74] (bool~) mul16u::$3 ← (byte/word~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [73] (bool~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not [74] (bool~) mul16u::$3 ← (byte/word~) mul16u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [73] (bool~) mul16u::$2 ← (byte/word~) mul16u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [126] (bool~) sin16s::$1 ← (dword) sin16s::x#3 < (dword) PI_u4f28#0 from [125] (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (dword) PI_u4f28#0 Inversing boolean not [125] (bool~) sin16s::$1 ← (dword) sin16s::x#3 < (dword) PI_u4f28#0 from [124] (bool~) sin16s::$0 ← (dword) sin16s::x#3 >= (dword) PI_u4f28#0
Inversing boolean not [130] (bool~) sin16s::$3 ← (dword) sin16s::x#4 < (dword) PI_HALF_u4f28#0 from [129] (bool~) sin16s::$2 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0 Inversing boolean not [129] (bool~) sin16s::$3 ← (dword) sin16s::x#4 < (dword) PI_HALF_u4f28#0 from [128] (bool~) sin16s::$2 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0
Inversing boolean not [190] (bool~) sin16s::$17 ← (byte) sin16s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [189] (bool~) sin16s::$16 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not [189] (bool~) sin16s::$17 ← (byte) sin16s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [188] (bool~) sin16s::$16 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [249] (bool~) sin16sb::$1 ← (word) sin16sb::x#3 < (word) PI_u4f12#0 from [248] (bool~) sin16sb::$0 ← (word) sin16sb::x#3 >= (word) PI_u4f12#0 Inversing boolean not [247] (bool~) sin16sb::$1 ← (word) sin16sb::x#3 < (word) PI_u4f12#0 from [246] (bool~) sin16sb::$0 ← (word) sin16sb::x#3 >= (word) PI_u4f12#0
Inversing boolean not [253] (bool~) sin16sb::$3 ← (word) sin16sb::x#4 < (word) PI_HALF_u4f12#0 from [252] (bool~) sin16sb::$2 ← (word) sin16sb::x#4 >= (word) PI_HALF_u4f12#0 Inversing boolean not [251] (bool~) sin16sb::$3 ← (word) sin16sb::x#4 < (word) PI_HALF_u4f12#0 from [250] (bool~) sin16sb::$2 ← (word) sin16sb::x#4 >= (word) PI_HALF_u4f12#0
Inversing boolean not [312] (bool~) sin16sb::$16 ← (byte) sin16sb::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [311] (bool~) sin16sb::$15 ← (byte) sin16sb::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not [310] (bool~) sin16sb::$16 ← (byte) sin16sb::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from [309] (bool~) sin16sb::$15 ← (byte) sin16sb::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [343] (bool~) print_sword::$1 ← (signed word) print_sword::w#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [342] (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not [341] (bool~) print_sword::$1 ← (signed word) print_sword::w#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from [340] (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not [437] (bool~) main::$5 ← (signed word) main::sw#0 < (byte/signed byte/word/signed word/dword/signed dword) 0 from [436] (bool~) main::$4 ← (signed word) main::sw#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not [435] (bool~) main::$5 ← (signed word) main::sw#0 < (byte/signed byte/word/signed word/dword/signed dword) 0 from [434] (bool~) main::$4 ← (signed word) main::sw#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0
Successful SSA optimization Pass2UnaryNotSimplification Successful SSA optimization Pass2UnaryNotSimplification
Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7 Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7
Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#8 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#8
@ -1666,8 +1664,7 @@ Alias (dword) sin16s_gen::step#1 = (dword) sin16s_gen::step#2
Alias (word) sin16s_gen::i#2 = (word) sin16s_gen::i#3 Alias (word) sin16s_gen::i#2 = (word) sin16s_gen::i#3
Alias (word) sin16s_gen::wavelength#2 = (word) sin16s_gen::wavelength#3 Alias (word) sin16s_gen::wavelength#2 = (word) sin16s_gen::wavelength#3
Alias (word) rem16u#19 = (word) rem16u#28 (word) rem16u#34 (word) rem16u#7 Alias (word) rem16u#19 = (word) rem16u#28 (word) rem16u#34 (word) rem16u#7
Alias (signed word*) sin16s_gen::sintab#0 = (signed word*~) sin16s_gen::$2 Alias (dword) sin16s_gen::x#1 = (dword~) sin16s_gen::$2
Alias (dword) sin16s_gen::x#1 = (dword~) sin16s_gen::$3
Alias (dword) sin16s::x#3 = (dword) sin16s::x#5 Alias (dword) sin16s::x#3 = (dword) sin16s::x#5
Alias (dword) sin16s::x#1 = (dword~) sin16s::$18 Alias (dword) sin16s::x#1 = (dword~) sin16s::$18
Alias (word) sin16s::x1#0 = (word~) sin16s::$5 (word) sin16s::x1#1 (word) sin16s::x1#4 (word) sin16s::x1#2 (word) sin16s::x1#3 Alias (word) sin16s::x1#0 = (word~) sin16s::$5 (word) sin16s::x1#1 (word) sin16s::x1#4 (word) sin16s::x1#2 (word) sin16s::x1#3
@ -1708,8 +1705,7 @@ Alias (dword) sin16s_genb::step#1 = (dword) sin16s_genb::step#2
Alias (word) sin16s_genb::i#2 = (word) sin16s_genb::i#3 Alias (word) sin16s_genb::i#2 = (word) sin16s_genb::i#3
Alias (word) sin16s_genb::wavelength#2 = (word) sin16s_genb::wavelength#3 Alias (word) sin16s_genb::wavelength#2 = (word) sin16s_genb::wavelength#3
Alias (word) rem16u#21 = (word) rem16u#30 (word) rem16u#35 (word) rem16u#9 Alias (word) rem16u#21 = (word) rem16u#30 (word) rem16u#35 (word) rem16u#9
Alias (signed word*) sin16s_genb::sintab#0 = (signed word*~) sin16s_genb::$3 Alias (dword) sin16s_genb::x#1 = (dword~) sin16s_genb::$3
Alias (dword) sin16s_genb::x#1 = (dword~) sin16s_genb::$4
Alias (word) sin16sb::x#3 = (word) sin16sb::x#5 Alias (word) sin16sb::x#3 = (word) sin16sb::x#5
Alias (word) sin16sb::x#1 = (word~) sin16sb::$17 Alias (word) sin16sb::x#1 = (word~) sin16sb::$17
Alias (word) sin16sb::x1#0 = (word/signed dword/dword~) sin16sb::$4 (word) sin16sb::x1#1 (word) sin16sb::x1#4 (word) sin16sb::x1#2 (word) sin16sb::x1#3 Alias (word) sin16sb::x1#0 = (word/signed dword/dword~) sin16sb::$4 (word) sin16sb::x1#1 (word) sin16sb::x1#4 (word) sin16sb::x1#2 (word) sin16sb::x1#3
@ -1770,8 +1766,6 @@ Alias (word) rem16u#12 = (word) rem16u#36 (word) rem16u#39 (word) rem16u#32 (wor
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#14 (byte*) print_line_cursor#17 (byte*) print_line_cursor#8 (byte*) print_line_cursor#4 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#14 (byte*) print_line_cursor#17 (byte*) print_line_cursor#8 (byte*) print_line_cursor#4
Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#37 Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#37
Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#38 (byte*) print_char_cursor#40 (byte*) print_char_cursor#20 Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#38 (byte*) print_char_cursor#40 (byte*) print_char_cursor#20
Alias (signed word*) main::st1#1 = (signed word*~) main::$9
Alias (signed word*) main::st2#1 = (signed word*~) main::$10
Alias (byte*) print_char_cursor#49 = (byte*) print_char_cursor#54 Alias (byte*) print_char_cursor#49 = (byte*) print_char_cursor#54
Alias (signed word*) main::st1#2 = (signed word*) main::st1#7 (signed word*) main::st1#6 Alias (signed word*) main::st1#2 = (signed word*) main::st1#7 (signed word*) main::st1#6
Alias (signed word*) main::st2#2 = (signed word*) main::st2#7 (signed word*) main::st2#6 Alias (signed word*) main::st2#2 = (signed word*) main::st2#7 (signed word*) main::st2#6
@ -1865,19 +1859,19 @@ Simple Condition (bool~) divr16u::$9 [19] if((word) divr16u::rem#6<(word) divr16
Simple Condition (bool~) divr16u::$11 [26] if((byte) divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1 Simple Condition (bool~) divr16u::$11 [26] if((byte) divr16u::i#1!=rangelast(0,$f)) goto divr16u::@1
Simple Condition (bool~) mul16u::$0 [70] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2 Simple Condition (bool~) mul16u::$0 [70] if((word) mul16u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
Simple Condition (bool~) mul16u::$3 [75] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4 Simple Condition (bool~) mul16u::$3 [75] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
Simple Condition (bool~) sin16s_gen::$4 [119] if((word) sin16s_gen::i#1<(word) sin16s_gen::wavelength#0) goto sin16s_gen::@1 Simple Condition (bool~) sin16s_gen::$3 [118] if((word) sin16s_gen::i#1<(word) sin16s_gen::wavelength#0) goto sin16s_gen::@1
Simple Condition (bool~) sin16s::$1 [127] if((dword) sin16s::x#0<(dword) PI_u4f28#0) goto sin16s::@1 Simple Condition (bool~) sin16s::$1 [126] if((dword) sin16s::x#0<(dword) PI_u4f28#0) goto sin16s::@1
Simple Condition (bool~) sin16s::$3 [131] if((dword) sin16s::x#4<(dword) PI_HALF_u4f28#0) goto sin16s::@2 Simple Condition (bool~) sin16s::$3 [130] if((dword) sin16s::x#4<(dword) PI_HALF_u4f28#0) goto sin16s::@2
Simple Condition (bool~) sin16s::$17 [191] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@3 Simple Condition (bool~) sin16s::$17 [190] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@3
Simple Condition (bool~) sin16s_genb::$5 [242] if((word) sin16s_genb::i#1<(word) sin16s_genb::wavelength#0) goto sin16s_genb::@1 Simple Condition (bool~) sin16s_genb::$4 [240] if((word) sin16s_genb::i#1<(word) sin16s_genb::wavelength#0) goto sin16s_genb::@1
Simple Condition (bool~) sin16sb::$1 [250] if((word) sin16sb::x#0<(word) PI_u4f12#0) goto sin16sb::@1 Simple Condition (bool~) sin16sb::$1 [248] if((word) sin16sb::x#0<(word) PI_u4f12#0) goto sin16sb::@1
Simple Condition (bool~) sin16sb::$3 [254] if((word) sin16sb::x#4<(word) PI_HALF_u4f12#0) goto sin16sb::@2 Simple Condition (bool~) sin16sb::$3 [252] if((word) sin16sb::x#4<(word) PI_HALF_u4f12#0) goto sin16sb::@2
Simple Condition (bool~) sin16sb::$16 [313] if((byte) sin16sb::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16sb::@3 Simple Condition (bool~) sin16sb::$16 [311] if((byte) sin16sb::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16sb::@3
Simple Condition (bool~) print_str::$0 [333] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_str::$0 [331] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_sword::$1 [344] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 Simple Condition (bool~) print_sword::$1 [342] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1
Simple Condition (bool~) print_cls::$1 [404] if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) print_cls::$1 [402] if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1
Simple Condition (bool~) main::$5 [438] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$5 [436] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2
Simple Condition (bool~) main::$11 [454] if((byte) main::i#1!=rangelast(0,$77)) goto main::@1 Simple Condition (bool~) main::$9 [450] if((byte) main::i#1!=rangelast(0,$77)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const word) rem16u#0 = 0 Constant (const word) rem16u#0 = 0
Constant (const word) divr16u::quotient#0 = 0 Constant (const word) divr16u::quotient#0 = 0
@ -2279,8 +2273,8 @@ main::@6: scope:[main] from main::@2
[19] call print_str [19] call print_str
to:main::@7 to:main::@7
main::@7: scope:[main] from main::@6 main::@7: scope:[main] from main::@6
[20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD
[21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD
[22] (byte) main::i#1 ← ++ (byte) main::i#2 [22] (byte) main::i#1 ← ++ (byte) main::i#2
[23] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $78) goto main::@1 [23] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $78) goto main::@1
to:main::@return to:main::@return
@ -2388,7 +2382,7 @@ sin16s_genb::@1: scope:[sin16s_genb] from sin16s_genb::@2 sin16s_genb::@3
sin16s_genb::@3: scope:[sin16s_genb] from sin16s_genb::@1 sin16s_genb::@3: scope:[sin16s_genb] from sin16s_genb::@1
[70] (signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#0 [70] (signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#0
[71] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2 [71] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2
[72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
[73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0
[74] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2 [74] (word) sin16s_genb::i#1 ← ++ (word) sin16s_genb::i#2
[75] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@1 [75] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@1
@ -2581,7 +2575,7 @@ sin16s_gen::@1: scope:[sin16s_gen] from sin16s_gen::@2 sin16s_gen::@3
sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen::@1 sin16s_gen::@3: scope:[sin16s_gen] from sin16s_gen::@1
[171] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0 [171] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0
[172] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 [172] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1
[173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD
[174] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [174] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0
[175] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2 [175] (word) sin16s_gen::i#1 ← ++ (word) sin16s_gen::i#2
[176] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 [176] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1
@ -3181,6 +3175,7 @@ INITIAL ASM
:BasicUpstart(bbegin) :BasicUpstart(bbegin)
.pc = $80d "Program" .pc = $80d "Program"
//SEG2 Global Constants & labels //SEG2 Global Constants & labels
.const SIZEOF_SIGNED_WORD = 2
// PI*2 in u[4.28] format // PI*2 in u[4.28] format
.const PI2_u4f28 = $6487ed51 .const PI2_u4f28 = $6487ed51
// PI in u[4.28] format // PI in u[4.28] format
@ -3329,18 +3324,18 @@ main: {
jmp b7 jmp b7
//SEG51 main::@7 //SEG51 main::@7
b7: b7:
//SEG52 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG52 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda st1 lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc st1
sta st1 sta st1
bcc !+ bcc !+
inc st1+1 inc st1+1
!: !:
//SEG53 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG53 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda st2 lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc st2
sta st2 sta st2
bcc !+ bcc !+
inc st2+1 inc st2+1
@ -3682,10 +3677,10 @@ sin16s_genb: {
iny iny
lda _2+1 lda _2+1
sta (sintab),y sta (sintab),y
//SEG154 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG154 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda sintab lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc sintab
sta sintab sta sintab
bcc !+ bcc !+
inc sintab+1 inc sintab+1
@ -4519,10 +4514,10 @@ sin16s_gen: {
iny iny
lda _1+1 lda _1+1
sta (sintab),y sta (sintab),y
//SEG352 [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG352 [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda sintab lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc sintab
sta sintab sta sintab
bcc !+ bcc !+
inc sintab+1 inc sintab+1
@ -4928,8 +4923,8 @@ Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ ma
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Statement [12] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ) always clobbers reg byte a Statement [12] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ) always clobbers reg byte a
Statement [16] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ( main:2 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a Statement [16] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ( main:2 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a
Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [29] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [29] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [32] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [ print_char_cursor#48 print_sword::w#1 ] ( main:2::print_sword:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a Statement [32] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [ print_char_cursor#48 print_sword::w#1 ] ( main:2::print_sword:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a
@ -4949,7 +4944,7 @@ Statement [67] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 [ sin16s_genb:
Statement [69] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::return#0 ] ) always clobbers reg byte a Statement [69] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::return#0 ] ) always clobbers reg byte a
Statement [70] (signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16s_genb::$2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16s_genb::$2 ] ) always clobbers reg byte a Statement [70] (signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16s_genb::$2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16s_genb::$2 ] ) always clobbers reg byte a
Statement [71] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 ] ) always clobbers reg byte a reg byte y Statement [71] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 ] ) always clobbers reg byte a reg byte y
Statement [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) always clobbers reg byte a Statement [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) always clobbers reg byte a
Statement [73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a Statement [73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a
Statement [75] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@1 [ sin16s_genb::step#0 sin16s_genb::x#1 sin16s_genb::sintab#0 sin16s_genb::i#1 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#1 sin16s_genb::sintab#0 sin16s_genb::i#1 ] ) always clobbers reg byte a Statement [75] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@1 [ sin16s_genb::step#0 sin16s_genb::x#1 sin16s_genb::sintab#0 sin16s_genb::i#1 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#1 sin16s_genb::sintab#0 sin16s_genb::i#1 ] ) always clobbers reg byte a
Statement [77] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:68 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::x#0 ] ) always clobbers reg byte a Statement [77] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:68 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::x#0 ] ) always clobbers reg byte a
@ -5013,7 +5008,7 @@ Statement [168] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::st
Statement [170] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ) always clobbers reg byte a Statement [170] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ) always clobbers reg byte a
Statement [171] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ) always clobbers reg byte a Statement [171] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ) always clobbers reg byte a
Statement [172] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ) always clobbers reg byte a reg byte y Statement [172] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ) always clobbers reg byte a reg byte y
Statement [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a Statement [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a
Statement [174] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a Statement [174] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a
Statement [176] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ) always clobbers reg byte a Statement [176] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ) always clobbers reg byte a
Statement [178] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:169 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) always clobbers reg byte a Statement [178] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:169 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) always clobbers reg byte a
@ -5050,8 +5045,8 @@ Statement [217] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::
Statement [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ) always clobbers reg byte a reg byte y Statement [11] (signed word) main::sw#0 ← *((signed word*) main::st1#2) - *((signed word*) main::st2#2) [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ) always clobbers reg byte a reg byte y
Statement [12] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ) always clobbers reg byte a Statement [12] if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ( main:2 [ main::st1#2 main::st2#2 print_char_cursor#49 main::i#2 main::sw#0 ] ) always clobbers reg byte a
Statement [16] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ( main:2 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a Statement [16] (signed word) print_sword::w#1 ← (signed word) main::sw#0 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ( main:2 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a
Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ( main:2 [ main::st2#2 main::i#2 main::st1#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) always clobbers reg byte a Statement [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ( main:2 [ main::i#2 main::st1#1 main::st2#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [27] if(*((byte*) print_str::str#3)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [29] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y Statement [29] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#3) [ print_char_cursor#2 print_str::str#3 ] ( main:2::print_str:14 [ main::st1#2 main::st2#2 main::i#2 main::sw#0 print_char_cursor#2 print_str::str#3 ] main:2::print_str:19 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#2 print_str::str#3 ] ) always clobbers reg byte a reg byte y
Statement [32] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [ print_char_cursor#48 print_sword::w#1 ] ( main:2::print_sword:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a Statement [32] if((signed word) print_sword::w#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [ print_char_cursor#48 print_sword::w#1 ] ( main:2::print_sword:17 [ main::st1#2 main::st2#2 main::i#2 print_char_cursor#48 print_sword::w#1 ] ) always clobbers reg byte a
@ -5069,7 +5064,7 @@ Statement [67] (word) sin16sb::x#0 ← > (dword) sin16s_genb::x#2 [ sin16s_genb:
Statement [69] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::return#0 ] ) always clobbers reg byte a Statement [69] (signed word) sin16sb::return#0 ← (signed word) sin16sb::return#1 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::return#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::return#0 ] ) always clobbers reg byte a
Statement [70] (signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16s_genb::$2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16s_genb::$2 ] ) always clobbers reg byte a Statement [70] (signed word~) sin16s_genb::$2 ← (signed word) sin16sb::return#0 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16s_genb::$2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16s_genb::$2 ] ) always clobbers reg byte a
Statement [71] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 ] ) always clobbers reg byte a reg byte y Statement [71] *((signed word*) sin16s_genb::sintab#2) ← (signed word~) sin16s_genb::$2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 ] ) always clobbers reg byte a reg byte y
Statement [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) always clobbers reg byte a Statement [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::i#2 sin16s_genb::sintab#0 ] ) always clobbers reg byte a
Statement [73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a Statement [73] (dword) sin16s_genb::x#1 ← (dword) sin16s_genb::x#2 + (dword) sin16s_genb::step#0 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::i#2 sin16s_genb::x#1 sin16s_genb::sintab#0 ] ) always clobbers reg byte a
Statement [75] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@1 [ sin16s_genb::step#0 sin16s_genb::x#1 sin16s_genb::sintab#0 sin16s_genb::i#1 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#1 sin16s_genb::sintab#0 sin16s_genb::i#1 ] ) always clobbers reg byte a Statement [75] if((word) sin16s_genb::i#1<(const word) main::wavelength#0) goto sin16s_genb::@1 [ sin16s_genb::step#0 sin16s_genb::x#1 sin16s_genb::sintab#0 sin16s_genb::i#1 ] ( main:2::sin16s_genb:7 [ sin16s_genb::step#0 sin16s_genb::x#1 sin16s_genb::sintab#0 sin16s_genb::i#1 ] ) always clobbers reg byte a
Statement [77] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:68 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::x#0 ] ) always clobbers reg byte a Statement [77] if((word) sin16sb::x#0<(const word) PI_u4f12#0) goto sin16sb::@1 [ sin16sb::x#0 ] ( main:2::sin16s_genb:7::sin16sb:68 [ sin16s_genb::step#0 sin16s_genb::x#2 sin16s_genb::sintab#2 sin16s_genb::i#2 sin16sb::x#0 ] ) always clobbers reg byte a
@ -5128,7 +5123,7 @@ Statement [168] (dword) sin16s::x#0 ← (dword) sin16s_gen::x#2 [ sin16s_gen::st
Statement [170] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ) always clobbers reg byte a Statement [170] (signed word) sin16s::return#0 ← (signed word) sin16s::return#1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::return#0 ] ) always clobbers reg byte a
Statement [171] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ) always clobbers reg byte a Statement [171] (signed word~) sin16s_gen::$1 ← (signed word) sin16s::return#0 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s_gen::$1 ] ) always clobbers reg byte a
Statement [172] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ) always clobbers reg byte a reg byte y Statement [172] *((signed word*) sin16s_gen::sintab#2) ← (signed word~) sin16s_gen::$1 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 ] ) always clobbers reg byte a reg byte y
Statement [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a Statement [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::i#2 sin16s_gen::sintab#0 ] ) always clobbers reg byte a
Statement [174] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a Statement [174] (dword) sin16s_gen::x#1 ← (dword) sin16s_gen::x#2 + (dword) sin16s_gen::step#0 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#1 sin16s_gen::sintab#0 ] ) always clobbers reg byte a
Statement [176] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ) always clobbers reg byte a Statement [176] if((word) sin16s_gen::i#1<(const word) main::wavelength#0) goto sin16s_gen::@1 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ( main:2::sin16s_gen:5 [ sin16s_gen::step#0 sin16s_gen::x#1 sin16s_gen::sintab#0 sin16s_gen::i#1 ] ) always clobbers reg byte a
Statement [178] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:169 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) always clobbers reg byte a Statement [178] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1 [ sin16s::x#0 ] ( main:2::sin16s_gen:5::sin16s:169 [ sin16s_gen::step#0 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s_gen::i#2 sin16s::x#0 ] ) always clobbers reg byte a
@ -5370,6 +5365,7 @@ ASSEMBLER BEFORE OPTIMIZATION
:BasicUpstart(bbegin) :BasicUpstart(bbegin)
.pc = $80d "Program" .pc = $80d "Program"
//SEG2 Global Constants & labels //SEG2 Global Constants & labels
.const SIZEOF_SIGNED_WORD = 2
// PI*2 in u[4.28] format // PI*2 in u[4.28] format
.const PI2_u4f28 = $6487ed51 .const PI2_u4f28 = $6487ed51
// PI in u[4.28] format // PI in u[4.28] format
@ -5512,18 +5508,18 @@ main: {
jmp b7 jmp b7
//SEG51 main::@7 //SEG51 main::@7
b7: b7:
//SEG52 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG52 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda st1 lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc st1
sta st1 sta st1
bcc !+ bcc !+
inc st1+1 inc st1+1
!: !:
//SEG53 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG53 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda st2 lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc st2
sta st2 sta st2
bcc !+ bcc !+
inc st2+1 inc st2+1
@ -5831,10 +5827,10 @@ sin16s_genb: {
iny iny
lda _2+1 lda _2+1
sta (sintab),y sta (sintab),y
//SEG154 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG154 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda sintab lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc sintab
sta sintab sta sintab
bcc !+ bcc !+
inc sintab+1 inc sintab+1
@ -6511,10 +6507,10 @@ sin16s_gen: {
iny iny
lda _1+1 lda _1+1
sta (sintab),y sta (sintab),y
//SEG352 [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG352 [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda sintab lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc sintab
sta sintab sta sintab
bcc !+ bcc !+
inc sintab+1 inc sintab+1
@ -7115,6 +7111,7 @@ FINAL SYMBOL TABLE
(const word) PI_u4f12#0 PI_u4f12 = (word/signed word/dword/signed dword) $3244 (const word) PI_u4f12#0 PI_u4f12 = (word/signed word/dword/signed dword) $3244
(dword) PI_u4f28 (dword) PI_u4f28
(const dword) PI_u4f28#0 PI_u4f28 = (dword/signed dword) $3243f6a9 (const dword) PI_u4f28#0 PI_u4f28 = (dword/signed dword) $3243f6a9
(const byte) SIZEOF_SIGNED_WORD SIZEOF_SIGNED_WORD = (byte/signed byte/word/signed word/dword/signed dword) 2
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(label) div32u16u::@1 (label) div32u16u::@1
(label) div32u16u::@2 (label) div32u16u::@2
@ -7477,6 +7474,7 @@ Score: 23125
:BasicUpstart(main) :BasicUpstart(main)
.pc = $80d "Program" .pc = $80d "Program"
//SEG2 Global Constants & labels //SEG2 Global Constants & labels
.const SIZEOF_SIGNED_WORD = 2
// PI*2 in u[4.28] format // PI*2 in u[4.28] format
.const PI2_u4f28 = $6487ed51 .const PI2_u4f28 = $6487ed51
// PI in u[4.28] format // PI in u[4.28] format
@ -7583,18 +7581,18 @@ main: {
sta print_str.str+1 sta print_str.str+1
jsr print_str jsr print_str
//SEG51 main::@7 //SEG51 main::@7
//SEG52 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG52 [20] (signed word*) main::st1#1 ← (signed word*) main::st1#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda st1 lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc st1
sta st1 sta st1
bcc !+ bcc !+
inc st1+1 inc st1+1
!: !:
//SEG53 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG53 [21] (signed word*) main::st2#1 ← (signed word*) main::st2#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda st2 lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc st2
sta st2 sta st2
bcc !+ bcc !+
inc st2+1 inc st2+1
@ -7852,10 +7850,10 @@ sin16s_genb: {
iny iny
lda _2+1 lda _2+1
sta (sintab),y sta (sintab),y
//SEG154 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG154 [72] (signed word*) sin16s_genb::sintab#0 ← (signed word*) sin16s_genb::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda sintab lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc sintab
sta sintab sta sintab
bcc !+ bcc !+
inc sintab+1 inc sintab+1
@ -8442,10 +8440,10 @@ sin16s_gen: {
iny iny
lda _1+1 lda _1+1
sta (sintab),y sta (sintab),y
//SEG352 [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 -- pwsz1=pwsz1_plus_2 //SEG352 [173] (signed word*) sin16s_gen::sintab#0 ← (signed word*) sin16s_gen::sintab#2 + (const byte) SIZEOF_SIGNED_WORD -- pwsz1=pwsz1_plus_vbuc1
lda sintab lda #SIZEOF_SIGNED_WORD
clc clc
adc #2 adc sintab
sta sintab sta sintab
bcc !+ bcc !+
inc sintab+1 inc sintab+1

View File

@ -11,6 +11,7 @@
(const word) PI_u4f12#0 PI_u4f12 = (word/signed word/dword/signed dword) $3244 (const word) PI_u4f12#0 PI_u4f12 = (word/signed word/dword/signed dword) $3244
(dword) PI_u4f28 (dword) PI_u4f28
(const dword) PI_u4f28#0 PI_u4f28 = (dword/signed dword) $3243f6a9 (const dword) PI_u4f28#0 PI_u4f28 = (dword/signed dword) $3243f6a9
(const byte) SIZEOF_SIGNED_WORD SIZEOF_SIGNED_WORD = (byte/signed byte/word/signed word/dword/signed dword) 2
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(label) div32u16u::@1 (label) div32u16u::@1
(label) div32u16u::@2 (label) div32u16u::@2

View File

@ -1,3 +1,5 @@
Fixing pointer increment (signed word*) sin16s_gen::sintab ← ++ (signed word*) sin16s_gen::sintab
Fixing pointer increment (signed word*) sin16s_gen2::sintab ← ++ (signed word*) sin16s_gen2::sintab
Identified constant variable (word) main::tabsize Identified constant variable (word) main::tabsize
CONTROL FLOW GRAPH SSA CONTROL FLOW GRAPH SSA

View File

@ -22,11 +22,16 @@ test_16s: {
lda #0 lda #0
sta i sta i
b1: b1:
ldy i lda i
asl
tay
lda dividends,y lda dividends,y
sta dividend sta dividend
lda dividends+1,y lda dividends+1,y
sta dividend+1 sta dividend+1
lda i
asl
tay
lda divisors,y lda divisors,y
sta divisor sta divisor
lda divisors+1,y lda divisors+1,y
@ -68,11 +73,8 @@ test_16s: {
sta print_sword.w+1 sta print_sword.w+1
jsr print_sword jsr print_sword
jsr print_ln jsr print_ln
lda i inc i
clc lda #6
adc #2
sta i
lda #$c
cmp i cmp i
beq !b1+ beq !b1+
jmp b1 jmp b1
@ -541,11 +543,16 @@ test_16u: {
lda #0 lda #0
sta i sta i
b1: b1:
ldy i lda i
asl
tay
lda dividends,y lda dividends,y
sta dividend sta dividend
lda dividends+1,y lda dividends+1,y
sta dividend+1 sta dividend+1
lda i
asl
tay
lda divisors,y lda divisors,y
sta divisor sta divisor
lda divisors+1,y lda divisors+1,y
@ -587,11 +594,8 @@ test_16u: {
sta print_word.w+1 sta print_word.w+1
jsr print_word jsr print_word
jsr print_ln jsr print_ln
lda i inc i
clc lda #6
adc #2
sta i
lda #$c
cmp i cmp i
bne b1 bne b1
rts rts

View File

@ -35,548 +35,552 @@ test_16s: scope:[test_16s] from main::@4
to:test_16s::@1 to:test_16s::@1
test_16s::@1: scope:[test_16s] from test_16s test_16s::@10 test_16s::@1: scope:[test_16s] from test_16s test_16s::@10
[16] (byte) test_16s::i#10 ← phi( test_16s/(byte/signed byte/word/signed word/dword/signed dword) 0 test_16s::@10/(byte) test_16s::i#1 ) [16] (byte) test_16s::i#10 ← phi( test_16s/(byte/signed byte/word/signed word/dword/signed dword) 0 test_16s::@10/(byte) test_16s::i#1 )
[17] (signed word) test_16s::dividend#0 ← *((const signed word[]) test_16s::dividends#0 + (byte) test_16s::i#10) [17] (byte) test_16s::$16 ← (byte) test_16s::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1
[18] (signed word) test_16s::divisor#0 ← *((const signed word[]) test_16s::divisors#0 + (byte) test_16s::i#10) [18] (signed word) test_16s::dividend#0 ← *((const signed word[]) test_16s::dividends#0 + (byte) test_16s::$16)
[19] (signed word) div16s::dividend#0 ← (signed word) test_16s::dividend#0 [19] (byte) test_16s::$17 ← (byte) test_16s::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1
[20] (signed word) div16s::divisor#0 ← (signed word) test_16s::divisor#0 [20] (signed word) test_16s::divisor#0 ← *((const signed word[]) test_16s::divisors#0 + (byte) test_16s::$17)
[21] call div16s [21] (signed word) div16s::dividend#0 ← (signed word) test_16s::dividend#0
[22] (signed word) div16s::return#2 ← (signed word) div16s::return#0 [22] (signed word) div16s::divisor#0 ← (signed word) test_16s::divisor#0
[23] call div16s
[24] (signed word) div16s::return#2 ← (signed word) div16s::return#0
to:test_16s::@2 to:test_16s::@2
test_16s::@2: scope:[test_16s] from test_16s::@1 test_16s::@2: scope:[test_16s] from test_16s::@1
[23] (signed word) test_16s::res#0 ← (signed word) div16s::return#2 [25] (signed word) test_16s::res#0 ← (signed word) div16s::return#2
[24] (signed word) print_sword::w#1 ← (signed word) test_16s::dividend#0 [26] (signed word) print_sword::w#1 ← (signed word) test_16s::dividend#0
[25] (byte*~) print_char_cursor#159 ← (byte*) print_line_cursor#1 [27] (byte*~) print_char_cursor#159 ← (byte*) print_line_cursor#1
[26] call print_sword [28] call print_sword
to:test_16s::@3 to:test_16s::@3
test_16s::@3: scope:[test_16s] from test_16s::@2 test_16s::@3: scope:[test_16s] from test_16s::@2
[27] phi() [29] phi()
[28] call print_str [30] call print_str
to:test_16s::@4 to:test_16s::@4
test_16s::@4: scope:[test_16s] from test_16s::@3 test_16s::@4: scope:[test_16s] from test_16s::@3
[29] (signed word) print_sword::w#2 ← (signed word) test_16s::divisor#0 [31] (signed word) print_sword::w#2 ← (signed word) test_16s::divisor#0
[30] call print_sword [32] call print_sword
to:test_16s::@5 to:test_16s::@5
test_16s::@5: scope:[test_16s] from test_16s::@4 test_16s::@5: scope:[test_16s] from test_16s::@4
[31] phi() [33] phi()
[32] call print_str [34] call print_str
to:test_16s::@6 to:test_16s::@6
test_16s::@6: scope:[test_16s] from test_16s::@5 test_16s::@6: scope:[test_16s] from test_16s::@5
[33] (signed word) print_sword::w#3 ← (signed word) test_16s::res#0 [35] (signed word) print_sword::w#3 ← (signed word) test_16s::res#0
[34] call print_sword [36] call print_sword
to:test_16s::@7 to:test_16s::@7
test_16s::@7: scope:[test_16s] from test_16s::@6 test_16s::@7: scope:[test_16s] from test_16s::@6
[35] phi() [37] phi()
[36] call print_str [38] call print_str
to:test_16s::@8 to:test_16s::@8
test_16s::@8: scope:[test_16s] from test_16s::@7 test_16s::@8: scope:[test_16s] from test_16s::@7
[37] (signed word) print_sword::w#4 ← (signed word) rem16s#11 [39] (signed word) print_sword::w#4 ← (signed word) rem16s#11
[38] call print_sword [40] call print_sword
to:test_16s::@9 to:test_16s::@9
test_16s::@9: scope:[test_16s] from test_16s::@8 test_16s::@9: scope:[test_16s] from test_16s::@8
[39] phi() [41] phi()
[40] call print_ln [42] call print_ln
to:test_16s::@10 to:test_16s::@10
test_16s::@10: scope:[test_16s] from test_16s::@9 test_16s::@10: scope:[test_16s] from test_16s::@9
[41] (byte) test_16s::i#1 ← (byte) test_16s::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [43] (byte) test_16s::i#1 ← ++ (byte) test_16s::i#10
[42] if((byte) test_16s::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $c) goto test_16s::@1 [44] if((byte) test_16s::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto test_16s::@1
to:test_16s::@return to:test_16s::@return
test_16s::@return: scope:[test_16s] from test_16s::@10 test_16s::@return: scope:[test_16s] from test_16s::@10
[43] return [45] return
to:@return to:@return
print_ln: scope:[print_ln] from test_16s::@9 test_16u::@9 test_8s::@9 test_8u::@9 print_ln: scope:[print_ln] from test_16s::@9 test_16u::@9 test_8s::@9 test_8u::@9
[44] (byte*) print_line_cursor#39 ← phi( test_16s::@9/(byte*) print_line_cursor#1 test_16u::@9/(byte*) print_line_cursor#1 test_8s::@9/(byte*) print_line_cursor#1 test_8u::@9/(byte*) print_line_cursor#41 ) [46] (byte*) print_line_cursor#39 ← phi( test_16s::@9/(byte*) print_line_cursor#1 test_16u::@9/(byte*) print_line_cursor#1 test_8s::@9/(byte*) print_line_cursor#1 test_8u::@9/(byte*) print_line_cursor#41 )
to:print_ln::@1 to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1 print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
[45] (byte*) print_line_cursor#20 ← phi( print_ln/(byte*) print_line_cursor#39 print_ln::@1/(byte*) print_line_cursor#1 ) [47] (byte*) print_line_cursor#20 ← phi( print_ln/(byte*) print_line_cursor#39 print_ln::@1/(byte*) print_line_cursor#1 )
[46] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28 [48] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#20 + (byte/signed byte/word/signed word/dword/signed dword) $28
[47] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#18) goto print_ln::@1 [49] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#18) goto print_ln::@1
to:print_ln::@return to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@1 print_ln::@return: scope:[print_ln] from print_ln::@1
[48] return [50] return
to:@return to:@return
print_sword: scope:[print_sword] from test_16s::@2 test_16s::@4 test_16s::@6 test_16s::@8 print_sword: scope:[print_sword] from test_16s::@2 test_16s::@4 test_16s::@6 test_16s::@8
[49] (byte*) print_char_cursor#131 ← phi( test_16s::@2/(byte*~) print_char_cursor#159 test_16s::@4/(byte*) print_char_cursor#128 test_16s::@6/(byte*) print_char_cursor#128 test_16s::@8/(byte*) print_char_cursor#128 ) [51] (byte*) print_char_cursor#131 ← phi( test_16s::@2/(byte*~) print_char_cursor#159 test_16s::@4/(byte*) print_char_cursor#128 test_16s::@6/(byte*) print_char_cursor#128 test_16s::@8/(byte*) print_char_cursor#128 )
[49] (signed word) print_sword::w#5 ← phi( test_16s::@2/(signed word) print_sword::w#1 test_16s::@4/(signed word) print_sword::w#2 test_16s::@6/(signed word) print_sword::w#3 test_16s::@8/(signed word) print_sword::w#4 ) [51] (signed word) print_sword::w#5 ← phi( test_16s::@2/(signed word) print_sword::w#1 test_16s::@4/(signed word) print_sword::w#2 test_16s::@6/(signed word) print_sword::w#3 test_16s::@8/(signed word) print_sword::w#4 )
[50] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 [52] if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1
to:print_sword::@2 to:print_sword::@2
print_sword::@2: scope:[print_sword] from print_sword print_sword::@2: scope:[print_sword] from print_sword
[51] phi() [53] phi()
[52] call print_char [54] call print_char
to:print_sword::@3 to:print_sword::@3
print_sword::@3: scope:[print_sword] from print_sword::@2 print_sword::@3: scope:[print_sword] from print_sword::@2
[53] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#5 [55] (signed word) print_sword::w#0 ← - (signed word) print_sword::w#5
to:print_sword::@1 to:print_sword::@1
print_sword::@1: scope:[print_sword] from print_sword print_sword::@3 print_sword::@1: scope:[print_sword] from print_sword print_sword::@3
[54] (byte*) print_char_cursor#130 ← phi( print_sword/(byte*) print_char_cursor#131 print_sword::@3/(byte*) print_char_cursor#18 ) [56] (byte*) print_char_cursor#130 ← phi( print_sword/(byte*) print_char_cursor#131 print_sword::@3/(byte*) print_char_cursor#18 )
[54] (signed word) print_sword::w#6 ← phi( print_sword/(signed word) print_sword::w#5 print_sword::@3/(signed word) print_sword::w#0 ) [56] (signed word) print_sword::w#6 ← phi( print_sword/(signed word) print_sword::w#5 print_sword::@3/(signed word) print_sword::w#0 )
[55] (word~) print_word::w#7 ← (word)(signed word) print_sword::w#6 [57] (word~) print_word::w#7 ← (word)(signed word) print_sword::w#6
[56] call print_word [58] call print_word
to:print_sword::@return to:print_sword::@return
print_sword::@return: scope:[print_sword] from print_sword::@1 print_sword::@return: scope:[print_sword] from print_sword::@1
[57] return [59] return
to:@return to:@return
print_word: scope:[print_word] from print_sword::@1 test_16u::@2 test_16u::@4 test_16u::@6 test_16u::@8 print_word: scope:[print_word] from print_sword::@1 test_16u::@2 test_16u::@4 test_16u::@6 test_16u::@8
[58] (byte*) print_char_cursor#135 ← phi( print_sword::@1/(byte*) print_char_cursor#130 test_16u::@2/(byte*~) print_char_cursor#166 test_16u::@4/(byte*) print_char_cursor#128 test_16u::@6/(byte*) print_char_cursor#128 test_16u::@8/(byte*) print_char_cursor#128 ) [60] (byte*) print_char_cursor#135 ← phi( print_sword::@1/(byte*) print_char_cursor#130 test_16u::@2/(byte*~) print_char_cursor#166 test_16u::@4/(byte*) print_char_cursor#128 test_16u::@6/(byte*) print_char_cursor#128 test_16u::@8/(byte*) print_char_cursor#128 )
[58] (word) print_word::w#5 ← phi( print_sword::@1/(word~) print_word::w#7 test_16u::@2/(word) print_word::w#1 test_16u::@4/(word) print_word::w#2 test_16u::@6/(word) print_word::w#3 test_16u::@8/(word) print_word::w#4 ) [60] (word) print_word::w#5 ← phi( print_sword::@1/(word~) print_word::w#7 test_16u::@2/(word) print_word::w#1 test_16u::@4/(word) print_word::w#2 test_16u::@6/(word) print_word::w#3 test_16u::@8/(word) print_word::w#4 )
[59] (byte) print_byte::b#1 ← > (word) print_word::w#5 [61] (byte) print_byte::b#1 ← > (word) print_word::w#5
[60] call print_byte [62] call print_byte
to:print_word::@1 to:print_word::@1
print_word::@1: scope:[print_word] from print_word print_word::@1: scope:[print_word] from print_word
[61] (byte) print_byte::b#2 ← < (word) print_word::w#5 [63] (byte) print_byte::b#2 ← < (word) print_word::w#5
[62] call print_byte [64] call print_byte
to:print_word::@return to:print_word::@return
print_word::@return: scope:[print_word] from print_word::@1 print_word::@return: scope:[print_word] from print_word::@1
[63] return [65] return
to:@return to:@return
print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 test_8u::@2 test_8u::@4 test_8u::@6 test_8u::@8 print_byte: scope:[print_byte] from print_sbyte::@2 print_word print_word::@1 test_8u::@2 test_8u::@4 test_8u::@6 test_8u::@8
[64] (byte*) print_char_cursor#136 ← phi( print_sbyte::@2/(byte*) print_char_cursor#18 print_word/(byte*) print_char_cursor#135 print_word::@1/(byte*) print_char_cursor#18 test_8u::@2/(byte*) print_char_cursor#138 test_8u::@4/(byte*) print_char_cursor#128 test_8u::@6/(byte*) print_char_cursor#128 test_8u::@8/(byte*) print_char_cursor#128 ) [66] (byte*) print_char_cursor#136 ← phi( print_sbyte::@2/(byte*) print_char_cursor#18 print_word/(byte*) print_char_cursor#135 print_word::@1/(byte*) print_char_cursor#18 test_8u::@2/(byte*) print_char_cursor#138 test_8u::@4/(byte*) print_char_cursor#128 test_8u::@6/(byte*) print_char_cursor#128 test_8u::@8/(byte*) print_char_cursor#128 )
[64] (byte) print_byte::b#7 ← phi( print_sbyte::@2/(byte~) print_byte::b#9 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 test_8u::@2/(byte) print_byte::b#3 test_8u::@4/(byte) print_byte::b#4 test_8u::@6/(byte) print_byte::b#5 test_8u::@8/(byte) print_byte::b#6 ) [66] (byte) print_byte::b#7 ← phi( print_sbyte::@2/(byte~) print_byte::b#9 print_word/(byte) print_byte::b#1 print_word::@1/(byte) print_byte::b#2 test_8u::@2/(byte) print_byte::b#3 test_8u::@4/(byte) print_byte::b#4 test_8u::@6/(byte) print_byte::b#5 test_8u::@8/(byte) print_byte::b#6 )
[65] (byte~) print_byte::$0 ← (byte) print_byte::b#7 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [67] (byte~) print_byte::$0 ← (byte) print_byte::b#7 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[66] (byte) print_char::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [68] (byte) print_char::ch#3 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0)
[67] call print_char [69] call print_char
to:print_byte::@1 to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte print_byte::@1: scope:[print_byte] from print_byte
[68] (byte~) print_byte::$2 ← (byte) print_byte::b#7 & (byte/signed byte/word/signed word/dword/signed dword) $f [70] (byte~) print_byte::$2 ← (byte) print_byte::b#7 & (byte/signed byte/word/signed word/dword/signed dword) $f
[69] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [71] (byte) print_char::ch#4 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2)
[70] call print_char [72] call print_char
to:print_byte::@return to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1 print_byte::@return: scope:[print_byte] from print_byte::@1
[71] return [73] return
to:@return to:@return
print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3 print_sword::@2 print_char: scope:[print_char] from print_byte print_byte::@1 print_sbyte::@1 print_sbyte::@3 print_sword::@2
[72] (byte*) print_char_cursor#82 ← phi( print_byte/(byte*) print_char_cursor#136 print_byte::@1/(byte*) print_char_cursor#18 print_sbyte::@1/(byte*) print_char_cursor#132 print_sbyte::@3/(byte*) print_char_cursor#132 print_sword::@2/(byte*) print_char_cursor#131 ) [74] (byte*) print_char_cursor#82 ← phi( print_byte/(byte*) print_char_cursor#136 print_byte::@1/(byte*) print_char_cursor#18 print_sbyte::@1/(byte*) print_char_cursor#132 print_sbyte::@3/(byte*) print_char_cursor#132 print_sword::@2/(byte*) print_char_cursor#131 )
[72] (byte) print_char::ch#5 ← phi( print_byte/(byte) print_char::ch#3 print_byte::@1/(byte) print_char::ch#4 print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' print_sword::@2/(byte) '-' ) [74] (byte) print_char::ch#5 ← phi( print_byte/(byte) print_char::ch#3 print_byte::@1/(byte) print_char::ch#4 print_sbyte::@1/(byte) '-' print_sbyte::@3/(byte) ' ' print_sword::@2/(byte) '-' )
[73] *((byte*) print_char_cursor#82) ← (byte) print_char::ch#5 [75] *((byte*) print_char_cursor#82) ← (byte) print_char::ch#5
[74] (byte*) print_char_cursor#18 ← ++ (byte*) print_char_cursor#82 [76] (byte*) print_char_cursor#18 ← ++ (byte*) print_char_cursor#82
to:print_char::@return to:print_char::@return
print_char::@return: scope:[print_char] from print_char print_char::@return: scope:[print_char] from print_char
[75] return [77] return
to:@return to:@return
print_str: scope:[print_str] from test_16s::@3 test_16s::@5 test_16s::@7 test_16u::@3 test_16u::@5 test_16u::@7 test_8s::@3 test_8s::@5 test_8s::@7 test_8u::@3 test_8u::@5 test_8u::@7 print_str: scope:[print_str] from test_16s::@3 test_16s::@5 test_16s::@7 test_16u::@3 test_16u::@5 test_16u::@7 test_8s::@3 test_8s::@5 test_8s::@7 test_8u::@3 test_8u::@5 test_8u::@7
[76] (byte*) print_str::str#15 ← phi( test_16s::@3/(const string) str test_16s::@5/(const string) str1 test_16s::@7/(const string) str2 test_16u::@3/(const string) str test_16u::@5/(const string) str1 test_16u::@7/(const string) str2 test_8s::@3/(const string) str test_8s::@5/(const string) str1 test_8s::@7/(const string) str2 test_8u::@3/(const string) str test_8u::@5/(const string) str1 test_8u::@7/(const string) str2 ) [78] (byte*) print_str::str#15 ← phi( test_16s::@3/(const string) str test_16s::@5/(const string) str1 test_16s::@7/(const string) str2 test_16u::@3/(const string) str test_16u::@5/(const string) str1 test_16u::@7/(const string) str2 test_8s::@3/(const string) str test_8s::@5/(const string) str1 test_8s::@7/(const string) str2 test_8u::@3/(const string) str test_8u::@5/(const string) str1 test_8u::@7/(const string) str2 )
to:print_str::@1 to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2 print_str::@1: scope:[print_str] from print_str print_str::@2
[77] (byte*) print_char_cursor#128 ← phi( print_str/(byte*) print_char_cursor#18 print_str::@2/(byte*) print_char_cursor#1 ) [79] (byte*) print_char_cursor#128 ← phi( print_str/(byte*) print_char_cursor#18 print_str::@2/(byte*) print_char_cursor#1 )
[77] (byte*) print_str::str#13 ← phi( print_str/(byte*) print_str::str#15 print_str::@2/(byte*) print_str::str#0 ) [79] (byte*) print_str::str#13 ← phi( print_str/(byte*) print_str::str#15 print_str::@2/(byte*) print_str::str#0 )
[78] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 [80] if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2
to:print_str::@return to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
[79] return [81] return
to:@return to:@return
print_str::@2: scope:[print_str] from print_str::@1 print_str::@2: scope:[print_str] from print_str::@1
[80] *((byte*) print_char_cursor#128) ← *((byte*) print_str::str#13) [82] *((byte*) print_char_cursor#128) ← *((byte*) print_str::str#13)
[81] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#128 [83] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#128
[82] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#13 [84] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#13
to:print_str::@1 to:print_str::@1
div16s: scope:[div16s] from test_16s::@1 div16s: scope:[div16s] from test_16s::@1
[83] (signed word) divr16s::dividend#0 ← (signed word) div16s::dividend#0 [85] (signed word) divr16s::dividend#0 ← (signed word) div16s::dividend#0
[84] (signed word) divr16s::divisor#0 ← (signed word) div16s::divisor#0 [86] (signed word) divr16s::divisor#0 ← (signed word) div16s::divisor#0
[85] call divr16s [87] call divr16s
[86] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [88] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2
to:div16s::@1 to:div16s::@1
div16s::@1: scope:[div16s] from div16s div16s::@1: scope:[div16s] from div16s
[87] (signed word) div16s::return#0 ← (signed word) divr16s::return#3 [89] (signed word) div16s::return#0 ← (signed word) divr16s::return#3
to:div16s::@return to:div16s::@return
div16s::@return: scope:[div16s] from div16s::@1 div16s::@return: scope:[div16s] from div16s::@1
[88] return [90] return
to:@return to:@return
divr16s: scope:[divr16s] from div16s divr16s: scope:[divr16s] from div16s
[89] if((signed word) divr16s::dividend#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [91] if((signed word) divr16s::dividend#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1
to:divr16s::@7 to:divr16s::@7
divr16s::@7: scope:[divr16s] from divr16s divr16s::@7: scope:[divr16s] from divr16s
[90] (word~) divr16s::dividendu#8 ← (word)(signed word) divr16s::dividend#0 [92] (word~) divr16s::dividendu#8 ← (word)(signed word) divr16s::dividend#0
to:divr16s::@2 to:divr16s::@2
divr16s::@2: scope:[divr16s] from divr16s::@1 divr16s::@7 divr16s::@2: scope:[divr16s] from divr16s::@1 divr16s::@7
[91] (word) divr16s::remu#3 ← phi( divr16s::@1/((word))-(const signed word) divr16s::rem#0 divr16s::@7/((word))(const signed word) divr16s::rem#0 ) [93] (word) divr16s::remu#3 ← phi( divr16s::@1/((word))-(const signed word) divr16s::rem#0 divr16s::@7/((word))(const signed word) divr16s::rem#0 )
[91] (word) divr16s::dividendu#3 ← phi( divr16s::@1/(word~) divr16s::dividendu#7 divr16s::@7/(word~) divr16s::dividendu#8 ) [93] (word) divr16s::dividendu#3 ← phi( divr16s::@1/(word~) divr16s::dividendu#7 divr16s::@7/(word~) divr16s::dividendu#8 )
[91] (byte) divr16s::neg#3 ← phi( divr16s::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 divr16s::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [93] (byte) divr16s::neg#3 ← phi( divr16s::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 divr16s::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[92] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [94] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3
to:divr16s::@8 to:divr16s::@8
divr16s::@8: scope:[divr16s] from divr16s::@2 divr16s::@8: scope:[divr16s] from divr16s::@2
[93] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [95] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0
to:divr16s::@4 to:divr16s::@4
divr16s::@4: scope:[divr16s] from divr16s::@3 divr16s::@8 divr16s::@4: scope:[divr16s] from divr16s::@3 divr16s::@8
[94] (byte) divr16s::neg#4 ← phi( divr16s::@3/(byte) divr16s::neg#2 divr16s::@8/(byte) divr16s::neg#3 ) [96] (byte) divr16s::neg#4 ← phi( divr16s::@3/(byte) divr16s::neg#2 divr16s::@8/(byte) divr16s::neg#3 )
[94] (word) divr16s::divisoru#3 ← phi( divr16s::@3/(word~) divr16s::divisoru#4 divr16s::@8/(word~) divr16s::divisoru#5 ) [96] (word) divr16s::divisoru#3 ← phi( divr16s::@3/(word~) divr16s::divisoru#4 divr16s::@8/(word~) divr16s::divisoru#5 )
[95] (word) divr16u::dividend#2 ← (word) divr16s::dividendu#3 [97] (word) divr16u::dividend#2 ← (word) divr16s::dividendu#3
[96] (word) divr16u::divisor#1 ← (word) divr16s::divisoru#3 [98] (word) divr16u::divisor#1 ← (word) divr16s::divisoru#3
[97] (word) divr16u::rem#4 ← (word) divr16s::remu#3 [99] (word) divr16u::rem#4 ← (word) divr16s::remu#3
[98] call divr16u [100] call divr16u
[99] (word) divr16u::return#3 ← (word) divr16u::return#0 [101] (word) divr16u::return#3 ← (word) divr16u::return#0
to:divr16s::@6 to:divr16s::@6
divr16s::@6: scope:[divr16s] from divr16s::@4 divr16s::@6: scope:[divr16s] from divr16s::@4
[100] (word) divr16s::resultu#0 ← (word) divr16u::return#3 [102] (word) divr16s::resultu#0 ← (word) divr16u::return#3
[101] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@9 [103] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@9
to:divr16s::@5 to:divr16s::@5
divr16s::@5: scope:[divr16s] from divr16s::@6 divr16s::@5: scope:[divr16s] from divr16s::@6
[102] (signed word) rem16s#2 ← - (signed word)(word) rem16u#1 [104] (signed word) rem16s#2 ← - (signed word)(word) rem16u#1
[103] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [105] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0
to:divr16s::@return to:divr16s::@return
divr16s::@return: scope:[divr16s] from divr16s::@5 divr16s::@9 divr16s::@return: scope:[divr16s] from divr16s::@5 divr16s::@9
[104] (signed word) rem16s#11 ← phi( divr16s::@5/(signed word) rem16s#2 divr16s::@9/(signed word~) rem16s#37 ) [106] (signed word) rem16s#11 ← phi( divr16s::@5/(signed word) rem16s#2 divr16s::@9/(signed word~) rem16s#37 )
[104] (signed word) divr16s::return#2 ← phi( divr16s::@5/(signed word) divr16s::return#1 divr16s::@9/(signed word~) divr16s::return#7 ) [106] (signed word) divr16s::return#2 ← phi( divr16s::@5/(signed word) divr16s::return#1 divr16s::@9/(signed word~) divr16s::return#7 )
[105] return [107] return
to:@return to:@return
divr16s::@9: scope:[divr16s] from divr16s::@6 divr16s::@9: scope:[divr16s] from divr16s::@6
[106] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [108] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0
[107] (signed word~) rem16s#37 ← (signed word)(word) rem16u#1 [109] (signed word~) rem16s#37 ← (signed word)(word) rem16u#1
to:divr16s::@return to:divr16s::@return
divr16s::@3: scope:[divr16s] from divr16s::@2 divr16s::@3: scope:[divr16s] from divr16s::@2
[108] (signed word~) divr16s::$13 ← - (signed word) divr16s::divisor#0 [110] (signed word~) divr16s::$13 ← - (signed word) divr16s::divisor#0
[109] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [111] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1
[110] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$13 [112] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$13
to:divr16s::@4 to:divr16s::@4
divr16s::@1: scope:[divr16s] from divr16s divr16s::@1: scope:[divr16s] from divr16s
[111] (signed word~) divr16s::$8 ← - (signed word) divr16s::dividend#0 [113] (signed word~) divr16s::$8 ← - (signed word) divr16s::dividend#0
[112] (word~) divr16s::dividendu#7 ← (word)(signed word~) divr16s::$8 [114] (word~) divr16s::dividendu#7 ← (word)(signed word~) divr16s::$8
to:divr16s::@2 to:divr16s::@2
divr16u: scope:[divr16u] from div16u divr16s::@4 divr16u: scope:[divr16u] from div16u divr16s::@4
[113] (word) divr16u::divisor#6 ← phi( div16u/(word) divr16u::divisor#0 divr16s::@4/(word) divr16u::divisor#1 ) [115] (word) divr16u::divisor#6 ← phi( div16u/(word) divr16u::divisor#0 divr16s::@4/(word) divr16u::divisor#1 )
[113] (word) divr16u::dividend#5 ← phi( div16u/(word) divr16u::dividend#1 divr16s::@4/(word) divr16u::dividend#2 ) [115] (word) divr16u::dividend#5 ← phi( div16u/(word) divr16u::dividend#1 divr16s::@4/(word) divr16u::dividend#2 )
[113] (word) divr16u::rem#10 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16s::@4/(word) divr16u::rem#4 ) [115] (word) divr16u::rem#10 ← phi( div16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16s::@4/(word) divr16u::rem#4 )
to:divr16u::@1 to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[114] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [116] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[114] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [116] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[114] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 ) [116] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[114] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 ) [116] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[115] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1 [117] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
[116] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3 [118] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[117] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) $80 [119] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) $80
[118] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [120] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
to:divr16u::@4 to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1 divr16u::@4: scope:[divr16u] from divr16u::@1
[119] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [121] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
to:divr16u::@2 to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[120] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [122] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[121] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [123] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[122] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [124] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[123] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 [125] if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3
to:divr16u::@5 to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2 divr16u::@5: scope:[divr16u] from divr16u::@2
[124] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [126] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[125] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6 [127] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (word) divr16u::divisor#6
to:divr16u::@3 to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[126] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [128] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[126] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 ) [128] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[127] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [129] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[128] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $10) goto divr16u::@1 [130] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $10) goto divr16u::@1
to:divr16u::@6 to:divr16u::@6
divr16u::@6: scope:[divr16u] from divr16u::@3 divr16u::@6: scope:[divr16u] from divr16u::@3
[129] (word) rem16u#1 ← (word) divr16u::rem#11 [131] (word) rem16u#1 ← (word) divr16u::rem#11
to:divr16u::@return to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6 divr16u::@return: scope:[divr16u] from divr16u::@6
[130] return [132] return
to:@return to:@return
test_8s: scope:[test_8s] from main::@3 test_8s: scope:[test_8s] from main::@3
[131] phi() [133] phi()
to:test_8s::@1 to:test_8s::@1
test_8s::@1: scope:[test_8s] from test_8s test_8s::@10 test_8s::@1: scope:[test_8s] from test_8s test_8s::@10
[132] (byte) test_8s::i#10 ← phi( test_8s/(byte/signed byte/word/signed word/dword/signed dword) 0 test_8s::@10/(byte) test_8s::i#1 ) [134] (byte) test_8s::i#10 ← phi( test_8s/(byte/signed byte/word/signed word/dword/signed dword) 0 test_8s::@10/(byte) test_8s::i#1 )
[133] (signed byte) test_8s::dividend#0 ← *((const signed byte[]) test_8s::dividends#0 + (byte) test_8s::i#10) [135] (signed byte) test_8s::dividend#0 ← *((const signed byte[]) test_8s::dividends#0 + (byte) test_8s::i#10)
[134] (signed byte) test_8s::divisor#0 ← *((const signed byte[]) test_8s::divisors#0 + (byte) test_8s::i#10) [136] (signed byte) test_8s::divisor#0 ← *((const signed byte[]) test_8s::divisors#0 + (byte) test_8s::i#10)
[135] (signed byte) div8s::dividend#0 ← (signed byte) test_8s::dividend#0 [137] (signed byte) div8s::dividend#0 ← (signed byte) test_8s::dividend#0
[136] (signed byte) div8s::divisor#0 ← (signed byte) test_8s::divisor#0 [138] (signed byte) div8s::divisor#0 ← (signed byte) test_8s::divisor#0
[137] call div8s [139] call div8s
[138] (signed byte) div8s::return#3 ← (signed byte) div8s::return#2 [140] (signed byte) div8s::return#3 ← (signed byte) div8s::return#2
to:test_8s::@2 to:test_8s::@2
test_8s::@2: scope:[test_8s] from test_8s::@1 test_8s::@2: scope:[test_8s] from test_8s::@1
[139] (signed byte) test_8s::res#0 ← (signed byte) div8s::return#3 [141] (signed byte) test_8s::res#0 ← (signed byte) div8s::return#3
[140] (signed byte) print_sbyte::b#1 ← (signed byte) test_8s::dividend#0 [142] (signed byte) print_sbyte::b#1 ← (signed byte) test_8s::dividend#0
[141] (byte*~) print_char_cursor#184 ← (byte*) print_line_cursor#1 [143] (byte*~) print_char_cursor#184 ← (byte*) print_line_cursor#1
[142] call print_sbyte [144] call print_sbyte
to:test_8s::@3 to:test_8s::@3
test_8s::@3: scope:[test_8s] from test_8s::@2 test_8s::@3: scope:[test_8s] from test_8s::@2
[143] phi() [145] phi()
[144] call print_str [146] call print_str
to:test_8s::@4 to:test_8s::@4
test_8s::@4: scope:[test_8s] from test_8s::@3 test_8s::@4: scope:[test_8s] from test_8s::@3
[145] (signed byte) print_sbyte::b#2 ← (signed byte) test_8s::divisor#0 [147] (signed byte) print_sbyte::b#2 ← (signed byte) test_8s::divisor#0
[146] call print_sbyte [148] call print_sbyte
to:test_8s::@5 to:test_8s::@5
test_8s::@5: scope:[test_8s] from test_8s::@4 test_8s::@5: scope:[test_8s] from test_8s::@4
[147] phi() [149] phi()
[148] call print_str [150] call print_str
to:test_8s::@6 to:test_8s::@6
test_8s::@6: scope:[test_8s] from test_8s::@5 test_8s::@6: scope:[test_8s] from test_8s::@5
[149] (signed byte) print_sbyte::b#3 ← (signed byte) test_8s::res#0 [151] (signed byte) print_sbyte::b#3 ← (signed byte) test_8s::res#0
[150] call print_sbyte [152] call print_sbyte
to:test_8s::@7 to:test_8s::@7
test_8s::@7: scope:[test_8s] from test_8s::@6 test_8s::@7: scope:[test_8s] from test_8s::@6
[151] phi() [153] phi()
[152] call print_str [154] call print_str
to:test_8s::@8 to:test_8s::@8
test_8s::@8: scope:[test_8s] from test_8s::@7 test_8s::@8: scope:[test_8s] from test_8s::@7
[153] (signed byte) print_sbyte::b#4 ← (signed byte) rem8s#3 [155] (signed byte) print_sbyte::b#4 ← (signed byte) rem8s#3
[154] call print_sbyte [156] call print_sbyte
to:test_8s::@9 to:test_8s::@9
test_8s::@9: scope:[test_8s] from test_8s::@8 test_8s::@9: scope:[test_8s] from test_8s::@8
[155] phi() [157] phi()
[156] call print_ln [158] call print_ln
to:test_8s::@10 to:test_8s::@10
test_8s::@10: scope:[test_8s] from test_8s::@9 test_8s::@10: scope:[test_8s] from test_8s::@9
[157] (byte) test_8s::i#1 ← ++ (byte) test_8s::i#10 [159] (byte) test_8s::i#1 ← ++ (byte) test_8s::i#10
[158] if((byte) test_8s::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto test_8s::@1 [160] if((byte) test_8s::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto test_8s::@1
to:test_8s::@return to:test_8s::@return
test_8s::@return: scope:[test_8s] from test_8s::@10 test_8s::@return: scope:[test_8s] from test_8s::@10
[159] return [161] return
to:@return to:@return
print_sbyte: scope:[print_sbyte] from test_8s::@2 test_8s::@4 test_8s::@6 test_8s::@8 print_sbyte: scope:[print_sbyte] from test_8s::@2 test_8s::@4 test_8s::@6 test_8s::@8
[160] (byte*) print_char_cursor#132 ← phi( test_8s::@2/(byte*~) print_char_cursor#184 test_8s::@4/(byte*) print_char_cursor#128 test_8s::@6/(byte*) print_char_cursor#128 test_8s::@8/(byte*) print_char_cursor#128 ) [162] (byte*) print_char_cursor#132 ← phi( test_8s::@2/(byte*~) print_char_cursor#184 test_8s::@4/(byte*) print_char_cursor#128 test_8s::@6/(byte*) print_char_cursor#128 test_8s::@8/(byte*) print_char_cursor#128 )
[160] (signed byte) print_sbyte::b#10 ← phi( test_8s::@2/(signed byte) print_sbyte::b#1 test_8s::@4/(signed byte) print_sbyte::b#2 test_8s::@6/(signed byte) print_sbyte::b#3 test_8s::@8/(signed byte) print_sbyte::b#4 ) [162] (signed byte) print_sbyte::b#10 ← phi( test_8s::@2/(signed byte) print_sbyte::b#1 test_8s::@4/(signed byte) print_sbyte::b#2 test_8s::@6/(signed byte) print_sbyte::b#3 test_8s::@8/(signed byte) print_sbyte::b#4 )
[161] if((signed byte) print_sbyte::b#10<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1 [163] if((signed byte) print_sbyte::b#10<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1
to:print_sbyte::@3 to:print_sbyte::@3
print_sbyte::@3: scope:[print_sbyte] from print_sbyte print_sbyte::@3: scope:[print_sbyte] from print_sbyte
[162] phi() [164] phi()
[163] call print_char [165] call print_char
to:print_sbyte::@2 to:print_sbyte::@2
print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4 print_sbyte::@2: scope:[print_sbyte] from print_sbyte::@3 print_sbyte::@4
[164] (signed byte) print_sbyte::b#7 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#10 ) [166] (signed byte) print_sbyte::b#7 ← phi( print_sbyte::@4/(signed byte) print_sbyte::b#0 print_sbyte::@3/(signed byte) print_sbyte::b#10 )
[165] (byte~) print_byte::b#9 ← (byte)(signed byte) print_sbyte::b#7 [167] (byte~) print_byte::b#9 ← (byte)(signed byte) print_sbyte::b#7
[166] call print_byte [168] call print_byte
to:print_sbyte::@return to:print_sbyte::@return
print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2 print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@2
[167] return [169] return
to:@return to:@return
print_sbyte::@1: scope:[print_sbyte] from print_sbyte print_sbyte::@1: scope:[print_sbyte] from print_sbyte
[168] phi() [170] phi()
[169] call print_char [171] call print_char
to:print_sbyte::@4 to:print_sbyte::@4
print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1 print_sbyte::@4: scope:[print_sbyte] from print_sbyte::@1
[170] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#10 [172] (signed byte) print_sbyte::b#0 ← - (signed byte) print_sbyte::b#10
to:print_sbyte::@2 to:print_sbyte::@2
div8s: scope:[div8s] from test_8s::@1 div8s: scope:[div8s] from test_8s::@1
[171] if((signed byte) div8s::dividend#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8s::@1 [173] if((signed byte) div8s::dividend#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8s::@1
to:div8s::@7 to:div8s::@7
div8s::@7: scope:[div8s] from div8s div8s::@7: scope:[div8s] from div8s
[172] (byte~) div8s::dividendu#8 ← (byte)(signed byte) div8s::dividend#0 [174] (byte~) div8s::dividendu#8 ← (byte)(signed byte) div8s::dividend#0
to:div8s::@2 to:div8s::@2
div8s::@2: scope:[div8s] from div8s::@1 div8s::@7 div8s::@2: scope:[div8s] from div8s::@1 div8s::@7
[173] (byte) div8s::dividendu#3 ← phi( div8s::@1/(byte~) div8s::dividendu#7 div8s::@7/(byte~) div8s::dividendu#8 ) [175] (byte) div8s::dividendu#3 ← phi( div8s::@1/(byte~) div8s::dividendu#7 div8s::@7/(byte~) div8s::dividendu#8 )
[173] (byte) div8s::neg#3 ← phi( div8s::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 div8s::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [175] (byte) div8s::neg#3 ← phi( div8s::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 div8s::@7/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[174] if((signed byte) div8s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8s::@3 [176] if((signed byte) div8s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8s::@3
to:div8s::@8 to:div8s::@8
div8s::@8: scope:[div8s] from div8s::@2 div8s::@8: scope:[div8s] from div8s::@2
[175] (byte~) div8s::divisoru#5 ← (byte)(signed byte) div8s::divisor#0 [177] (byte~) div8s::divisoru#5 ← (byte)(signed byte) div8s::divisor#0
to:div8s::@4 to:div8s::@4
div8s::@4: scope:[div8s] from div8s::@3 div8s::@8 div8s::@4: scope:[div8s] from div8s::@3 div8s::@8
[176] (byte) div8s::neg#4 ← phi( div8s::@3/(byte) div8s::neg#2 div8s::@8/(byte) div8s::neg#3 ) [178] (byte) div8s::neg#4 ← phi( div8s::@3/(byte) div8s::neg#2 div8s::@8/(byte) div8s::neg#3 )
[176] (byte) div8s::divisoru#3 ← phi( div8s::@3/(byte~) div8s::divisoru#4 div8s::@8/(byte~) div8s::divisoru#5 ) [178] (byte) div8s::divisoru#3 ← phi( div8s::@3/(byte~) div8s::divisoru#4 div8s::@8/(byte~) div8s::divisoru#5 )
[177] (byte) div8u::dividend#0 ← (byte) div8s::dividendu#3 [179] (byte) div8u::dividend#0 ← (byte) div8s::dividendu#3
[178] (byte) div8u::divisor#0 ← (byte) div8s::divisoru#3 [180] (byte) div8u::divisor#0 ← (byte) div8s::divisoru#3
[179] call div8u [181] call div8u
[180] (byte) div8u::return#2 ← (byte) div8u::return#0 [182] (byte) div8u::return#2 ← (byte) div8u::return#0
to:div8s::@6 to:div8s::@6
div8s::@6: scope:[div8s] from div8s::@4 div8s::@6: scope:[div8s] from div8s::@4
[181] (byte) div8s::resultu#0 ← (byte) div8u::return#2 [183] (byte) div8s::resultu#0 ← (byte) div8u::return#2
[182] if((byte) div8s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8s::@9 [184] if((byte) div8s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto div8s::@9
to:div8s::@5 to:div8s::@5
div8s::@5: scope:[div8s] from div8s::@6 div8s::@5: scope:[div8s] from div8s::@6
[183] (signed byte) rem8s#2 ← - (signed byte)(byte) rem8u#17 [185] (signed byte) rem8s#2 ← - (signed byte)(byte) rem8u#17
[184] (signed byte) div8s::return#1 ← - (signed byte)(byte) div8s::resultu#0 [186] (signed byte) div8s::return#1 ← - (signed byte)(byte) div8s::resultu#0
to:div8s::@return to:div8s::@return
div8s::@return: scope:[div8s] from div8s::@5 div8s::@9 div8s::@return: scope:[div8s] from div8s::@5 div8s::@9
[185] (signed byte) rem8s#3 ← phi( div8s::@5/(signed byte) rem8s#2 div8s::@9/(signed byte~) rem8s#33 ) [187] (signed byte) rem8s#3 ← phi( div8s::@5/(signed byte) rem8s#2 div8s::@9/(signed byte~) rem8s#33 )
[185] (signed byte) div8s::return#2 ← phi( div8s::@5/(signed byte) div8s::return#1 div8s::@9/(signed byte~) div8s::return#7 ) [187] (signed byte) div8s::return#2 ← phi( div8s::@5/(signed byte) div8s::return#1 div8s::@9/(signed byte~) div8s::return#7 )
[186] return [188] return
to:@return to:@return
div8s::@9: scope:[div8s] from div8s::@6 div8s::@9: scope:[div8s] from div8s::@6
[187] (signed byte~) div8s::return#7 ← (signed byte)(byte) div8s::resultu#0 [189] (signed byte~) div8s::return#7 ← (signed byte)(byte) div8s::resultu#0
[188] (signed byte~) rem8s#33 ← (signed byte)(byte) rem8u#17 [190] (signed byte~) rem8s#33 ← (signed byte)(byte) rem8u#17
to:div8s::@return to:div8s::@return
div8s::@3: scope:[div8s] from div8s::@2 div8s::@3: scope:[div8s] from div8s::@2
[189] (signed byte~) div8s::$8 ← - (signed byte) div8s::divisor#0 [191] (signed byte~) div8s::$8 ← - (signed byte) div8s::divisor#0
[190] (byte) div8s::neg#2 ← (byte) div8s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [192] (byte) div8s::neg#2 ← (byte) div8s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1
[191] (byte~) div8s::divisoru#4 ← (byte)(signed byte~) div8s::$8 [193] (byte~) div8s::divisoru#4 ← (byte)(signed byte~) div8s::$8
to:div8s::@4 to:div8s::@4
div8s::@1: scope:[div8s] from div8s div8s::@1: scope:[div8s] from div8s
[192] (signed byte~) div8s::$5 ← - (signed byte) div8s::dividend#0 [194] (signed byte~) div8s::$5 ← - (signed byte) div8s::dividend#0
[193] (byte~) div8s::dividendu#7 ← (byte)(signed byte~) div8s::$5 [195] (byte~) div8s::dividendu#7 ← (byte)(signed byte~) div8s::$5
to:div8s::@2 to:div8s::@2
div8u: scope:[div8u] from div8s::@4 test_8u::@1 div8u: scope:[div8u] from div8s::@4 test_8u::@1
[194] (byte) div8u::divisor#2 ← phi( div8s::@4/(byte) div8u::divisor#0 test_8u::@1/(byte) div8u::divisor#1 ) [196] (byte) div8u::divisor#2 ← phi( div8s::@4/(byte) div8u::divisor#0 test_8u::@1/(byte) div8u::divisor#1 )
[194] (byte) div8u::dividend#2 ← phi( div8s::@4/(byte) div8u::dividend#0 test_8u::@1/(byte) div8u::dividend#1 ) [196] (byte) div8u::dividend#2 ← phi( div8s::@4/(byte) div8u::dividend#0 test_8u::@1/(byte) div8u::dividend#1 )
[195] (byte) divr8u::dividend#0 ← (byte) div8u::dividend#2 [197] (byte) divr8u::dividend#0 ← (byte) div8u::dividend#2
[196] (byte) divr8u::divisor#0 ← (byte) div8u::divisor#2 [198] (byte) divr8u::divisor#0 ← (byte) div8u::divisor#2
[197] call divr8u [199] call divr8u
[198] (byte) divr8u::return#0 ← (byte) divr8u::return#1 [200] (byte) divr8u::return#0 ← (byte) divr8u::return#1
to:div8u::@1 to:div8u::@1
div8u::@1: scope:[div8u] from div8u div8u::@1: scope:[div8u] from div8u
[199] (byte) div8u::return#0 ← (byte) divr8u::return#0 [201] (byte) div8u::return#0 ← (byte) divr8u::return#0
to:div8u::@return to:div8u::@return
div8u::@return: scope:[div8u] from div8u::@1 div8u::@return: scope:[div8u] from div8u::@1
[200] return [202] return
to:@return to:@return
divr8u: scope:[divr8u] from div8u divr8u: scope:[divr8u] from div8u
[201] phi() [203] phi()
to:divr8u::@1 to:divr8u::@1
divr8u::@1: scope:[divr8u] from divr8u divr8u::@3 divr8u::@1: scope:[divr8u] from divr8u divr8u::@3
[202] (byte) divr8u::i#2 ← phi( divr8u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr8u::@3/(byte) divr8u::i#1 ) [204] (byte) divr8u::i#2 ← phi( divr8u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr8u::@3/(byte) divr8u::i#1 )
[202] (byte) divr8u::quotient#3 ← phi( divr8u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr8u::@3/(byte) divr8u::return#1 ) [204] (byte) divr8u::quotient#3 ← phi( divr8u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr8u::@3/(byte) divr8u::return#1 )
[202] (byte) divr8u::dividend#2 ← phi( divr8u/(byte) divr8u::dividend#0 divr8u::@3/(byte) divr8u::dividend#1 ) [204] (byte) divr8u::dividend#2 ← phi( divr8u/(byte) divr8u::dividend#0 divr8u::@3/(byte) divr8u::dividend#1 )
[202] (byte) divr8u::rem#4 ← phi( divr8u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr8u::@3/(byte) divr8u::rem#10 ) [204] (byte) divr8u::rem#4 ← phi( divr8u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr8u::@3/(byte) divr8u::rem#10 )
[203] (byte) divr8u::rem#1 ← (byte) divr8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [205] (byte) divr8u::rem#1 ← (byte) divr8u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1
[204] (byte~) divr8u::$1 ← (byte) divr8u::dividend#2 & (byte/word/signed word/dword/signed dword) $80 [206] (byte~) divr8u::$1 ← (byte) divr8u::dividend#2 & (byte/word/signed word/dword/signed dword) $80
[205] if((byte~) divr8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr8u::@2 [207] if((byte~) divr8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr8u::@2
to:divr8u::@4 to:divr8u::@4
divr8u::@4: scope:[divr8u] from divr8u::@1 divr8u::@4: scope:[divr8u] from divr8u::@1
[206] (byte) divr8u::rem#2 ← (byte) divr8u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1 [208] (byte) divr8u::rem#2 ← (byte) divr8u::rem#1 | (byte/signed byte/word/signed word/dword/signed dword) 1
to:divr8u::@2 to:divr8u::@2
divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4 divr8u::@2: scope:[divr8u] from divr8u::@1 divr8u::@4
[207] (byte) divr8u::rem#5 ← phi( divr8u::@1/(byte) divr8u::rem#1 divr8u::@4/(byte) divr8u::rem#2 ) [209] (byte) divr8u::rem#5 ← phi( divr8u::@1/(byte) divr8u::rem#1 divr8u::@4/(byte) divr8u::rem#2 )
[208] (byte) divr8u::dividend#1 ← (byte) divr8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [210] (byte) divr8u::dividend#1 ← (byte) divr8u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[209] (byte) divr8u::quotient#1 ← (byte) divr8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [211] (byte) divr8u::quotient#1 ← (byte) divr8u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[210] if((byte) divr8u::rem#5<(byte) divr8u::divisor#0) goto divr8u::@3 [212] if((byte) divr8u::rem#5<(byte) divr8u::divisor#0) goto divr8u::@3
to:divr8u::@5 to:divr8u::@5
divr8u::@5: scope:[divr8u] from divr8u::@2 divr8u::@5: scope:[divr8u] from divr8u::@2
[211] (byte) divr8u::quotient#2 ← ++ (byte) divr8u::quotient#1 [213] (byte) divr8u::quotient#2 ← ++ (byte) divr8u::quotient#1
[212] (byte) divr8u::rem#3 ← (byte) divr8u::rem#5 - (byte) divr8u::divisor#0 [214] (byte) divr8u::rem#3 ← (byte) divr8u::rem#5 - (byte) divr8u::divisor#0
to:divr8u::@3 to:divr8u::@3
divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5 divr8u::@3: scope:[divr8u] from divr8u::@2 divr8u::@5
[213] (byte) divr8u::return#1 ← phi( divr8u::@2/(byte) divr8u::quotient#1 divr8u::@5/(byte) divr8u::quotient#2 ) [215] (byte) divr8u::return#1 ← phi( divr8u::@2/(byte) divr8u::quotient#1 divr8u::@5/(byte) divr8u::quotient#2 )
[213] (byte) divr8u::rem#10 ← phi( divr8u::@2/(byte) divr8u::rem#5 divr8u::@5/(byte) divr8u::rem#3 ) [215] (byte) divr8u::rem#10 ← phi( divr8u::@2/(byte) divr8u::rem#5 divr8u::@5/(byte) divr8u::rem#3 )
[214] (byte) divr8u::i#1 ← ++ (byte) divr8u::i#2 [216] (byte) divr8u::i#1 ← ++ (byte) divr8u::i#2
[215] if((byte) divr8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto divr8u::@1 [217] if((byte) divr8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto divr8u::@1
to:divr8u::@6 to:divr8u::@6
divr8u::@6: scope:[divr8u] from divr8u::@3 divr8u::@6: scope:[divr8u] from divr8u::@3
[216] (byte) rem8u#17 ← (byte) divr8u::rem#10 [218] (byte) rem8u#17 ← (byte) divr8u::rem#10
to:divr8u::@return to:divr8u::@return
divr8u::@return: scope:[divr8u] from divr8u::@6 divr8u::@return: scope:[divr8u] from divr8u::@6
[217] return [219] return
to:@return to:@return
test_16u: scope:[test_16u] from main::@2 test_16u: scope:[test_16u] from main::@2
[218] phi() [220] phi()
to:test_16u::@1 to:test_16u::@1
test_16u::@1: scope:[test_16u] from test_16u test_16u::@10 test_16u::@1: scope:[test_16u] from test_16u test_16u::@10
[219] (byte) test_16u::i#10 ← phi( test_16u/(byte/signed byte/word/signed word/dword/signed dword) 0 test_16u::@10/(byte) test_16u::i#1 ) [221] (byte) test_16u::i#10 ← phi( test_16u/(byte/signed byte/word/signed word/dword/signed dword) 0 test_16u::@10/(byte) test_16u::i#1 )
[220] (word) test_16u::dividend#0 ← *((const word[]) test_16u::dividends#0 + (byte) test_16u::i#10) [222] (byte) test_16u::$10 ← (byte) test_16u::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1
[221] (word) test_16u::divisor#0 ← *((const word[]) test_16u::divisors#0 + (byte) test_16u::i#10) [223] (word) test_16u::dividend#0 ← *((const word[]) test_16u::dividends#0 + (byte) test_16u::$10)
[222] (word) div16u::dividend#0 ← (word) test_16u::dividend#0 [224] (byte) test_16u::$11 ← (byte) test_16u::i#10 << (byte/signed byte/word/signed word/dword/signed dword) 1
[223] (word) div16u::divisor#0 ← (word) test_16u::divisor#0 [225] (word) test_16u::divisor#0 ← *((const word[]) test_16u::divisors#0 + (byte) test_16u::$11)
[224] call div16u [226] (word) div16u::dividend#0 ← (word) test_16u::dividend#0
[225] (word) div16u::return#2 ← (word) div16u::return#0 [227] (word) div16u::divisor#0 ← (word) test_16u::divisor#0
[228] call div16u
[229] (word) div16u::return#2 ← (word) div16u::return#0
to:test_16u::@2 to:test_16u::@2
test_16u::@2: scope:[test_16u] from test_16u::@1 test_16u::@2: scope:[test_16u] from test_16u::@1
[226] (word) test_16u::res#0 ← (word) div16u::return#2 [230] (word) test_16u::res#0 ← (word) div16u::return#2
[227] (word) print_word::w#1 ← (word) test_16u::dividend#0 [231] (word) print_word::w#1 ← (word) test_16u::dividend#0
[228] (byte*~) print_char_cursor#166 ← (byte*) print_line_cursor#1 [232] (byte*~) print_char_cursor#166 ← (byte*) print_line_cursor#1
[229] call print_word [233] call print_word
to:test_16u::@3 to:test_16u::@3
test_16u::@3: scope:[test_16u] from test_16u::@2 test_16u::@3: scope:[test_16u] from test_16u::@2
[230] phi()
[231] call print_str
to:test_16u::@4
test_16u::@4: scope:[test_16u] from test_16u::@3
[232] (word) print_word::w#2 ← (word) test_16u::divisor#0
[233] call print_word
to:test_16u::@5
test_16u::@5: scope:[test_16u] from test_16u::@4
[234] phi() [234] phi()
[235] call print_str [235] call print_str
to:test_16u::@6 to:test_16u::@4
test_16u::@6: scope:[test_16u] from test_16u::@5 test_16u::@4: scope:[test_16u] from test_16u::@3
[236] (word) print_word::w#3 ← (word) test_16u::res#0 [236] (word) print_word::w#2 ← (word) test_16u::divisor#0
[237] call print_word [237] call print_word
to:test_16u::@7 to:test_16u::@5
test_16u::@7: scope:[test_16u] from test_16u::@6 test_16u::@5: scope:[test_16u] from test_16u::@4
[238] phi() [238] phi()
[239] call print_str [239] call print_str
to:test_16u::@6
test_16u::@6: scope:[test_16u] from test_16u::@5
[240] (word) print_word::w#3 ← (word) test_16u::res#0
[241] call print_word
to:test_16u::@7
test_16u::@7: scope:[test_16u] from test_16u::@6
[242] phi()
[243] call print_str
to:test_16u::@8 to:test_16u::@8
test_16u::@8: scope:[test_16u] from test_16u::@7 test_16u::@8: scope:[test_16u] from test_16u::@7
[240] (word) print_word::w#4 ← (word) rem16u#1 [244] (word) print_word::w#4 ← (word) rem16u#1
[241] call print_word [245] call print_word
to:test_16u::@9 to:test_16u::@9
test_16u::@9: scope:[test_16u] from test_16u::@8 test_16u::@9: scope:[test_16u] from test_16u::@8
[242] phi() [246] phi()
[243] call print_ln [247] call print_ln
to:test_16u::@10 to:test_16u::@10
test_16u::@10: scope:[test_16u] from test_16u::@9 test_16u::@10: scope:[test_16u] from test_16u::@9
[244] (byte) test_16u::i#1 ← (byte) test_16u::i#10 + (byte/signed byte/word/signed word/dword/signed dword) 2 [248] (byte) test_16u::i#1 ← ++ (byte) test_16u::i#10
[245] if((byte) test_16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) $c) goto test_16u::@1 [249] if((byte) test_16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto test_16u::@1
to:test_16u::@return to:test_16u::@return
test_16u::@return: scope:[test_16u] from test_16u::@10 test_16u::@return: scope:[test_16u] from test_16u::@10
[246] return [250] return
to:@return to:@return
div16u: scope:[div16u] from test_16u::@1 div16u: scope:[div16u] from test_16u::@1
[247] (word) divr16u::dividend#1 ← (word) div16u::dividend#0 [251] (word) divr16u::dividend#1 ← (word) div16u::dividend#0
[248] (word) divr16u::divisor#0 ← (word) div16u::divisor#0 [252] (word) divr16u::divisor#0 ← (word) div16u::divisor#0
[249] call divr16u [253] call divr16u
[250] (word) divr16u::return#2 ← (word) divr16u::return#0 [254] (word) divr16u::return#2 ← (word) divr16u::return#0
to:div16u::@1 to:div16u::@1
div16u::@1: scope:[div16u] from div16u div16u::@1: scope:[div16u] from div16u
[251] (word) div16u::return#0 ← (word) divr16u::return#2 [255] (word) div16u::return#0 ← (word) divr16u::return#2
to:div16u::@return to:div16u::@return
div16u::@return: scope:[div16u] from div16u::@1 div16u::@return: scope:[div16u] from div16u::@1
[252] return [256] return
to:@return to:@return
test_8u: scope:[test_8u] from main::@1 test_8u: scope:[test_8u] from main::@1
[253] phi() [257] phi()
to:test_8u::@1 to:test_8u::@1
test_8u::@1: scope:[test_8u] from test_8u test_8u::@11 test_8u::@1: scope:[test_8u] from test_8u test_8u::@11
[254] (byte*) print_line_cursor#41 ← phi( test_8u/((byte*))(word/signed word/dword/signed dword) $400 test_8u::@11/(byte*) print_line_cursor#1 ) [258] (byte*) print_line_cursor#41 ← phi( test_8u/((byte*))(word/signed word/dword/signed dword) $400 test_8u::@11/(byte*) print_line_cursor#1 )
[254] (byte*) print_char_cursor#138 ← phi( test_8u/((byte*))(word/signed word/dword/signed dword) $400 test_8u::@11/(byte*~) print_char_cursor#188 ) [258] (byte*) print_char_cursor#138 ← phi( test_8u/((byte*))(word/signed word/dword/signed dword) $400 test_8u::@11/(byte*~) print_char_cursor#188 )
[254] (byte) test_8u::i#10 ← phi( test_8u/(byte/signed byte/word/signed word/dword/signed dword) 0 test_8u::@11/(byte) test_8u::i#1 ) [258] (byte) test_8u::i#10 ← phi( test_8u/(byte/signed byte/word/signed word/dword/signed dword) 0 test_8u::@11/(byte) test_8u::i#1 )
[255] (byte) test_8u::dividend#0 ← *((const byte[]) test_8u::dividends#0 + (byte) test_8u::i#10) [259] (byte) test_8u::dividend#0 ← *((const byte[]) test_8u::dividends#0 + (byte) test_8u::i#10)
[256] (byte) test_8u::divisor#0 ← *((const byte[]) test_8u::divisors#0 + (byte) test_8u::i#10) [260] (byte) test_8u::divisor#0 ← *((const byte[]) test_8u::divisors#0 + (byte) test_8u::i#10)
[257] (byte) div8u::dividend#1 ← (byte) test_8u::dividend#0 [261] (byte) div8u::dividend#1 ← (byte) test_8u::dividend#0
[258] (byte) div8u::divisor#1 ← (byte) test_8u::divisor#0 [262] (byte) div8u::divisor#1 ← (byte) test_8u::divisor#0
[259] call div8u [263] call div8u
[260] (byte) div8u::return#3 ← (byte) div8u::return#0 [264] (byte) div8u::return#3 ← (byte) div8u::return#0
to:test_8u::@2 to:test_8u::@2
test_8u::@2: scope:[test_8u] from test_8u::@1 test_8u::@2: scope:[test_8u] from test_8u::@1
[261] (byte) test_8u::res#0 ← (byte) div8u::return#3 [265] (byte) test_8u::res#0 ← (byte) div8u::return#3
[262] (byte) print_byte::b#3 ← (byte) test_8u::dividend#0 [266] (byte) print_byte::b#3 ← (byte) test_8u::dividend#0
[263] call print_byte [267] call print_byte
to:test_8u::@3 to:test_8u::@3
test_8u::@3: scope:[test_8u] from test_8u::@2 test_8u::@3: scope:[test_8u] from test_8u::@2
[264] phi()
[265] call print_str
to:test_8u::@4
test_8u::@4: scope:[test_8u] from test_8u::@3
[266] (byte) print_byte::b#4 ← (byte) test_8u::divisor#0
[267] call print_byte
to:test_8u::@5
test_8u::@5: scope:[test_8u] from test_8u::@4
[268] phi() [268] phi()
[269] call print_str [269] call print_str
to:test_8u::@6 to:test_8u::@4
test_8u::@6: scope:[test_8u] from test_8u::@5 test_8u::@4: scope:[test_8u] from test_8u::@3
[270] (byte) print_byte::b#5 ← (byte) test_8u::res#0 [270] (byte) print_byte::b#4 ← (byte) test_8u::divisor#0
[271] call print_byte [271] call print_byte
to:test_8u::@7 to:test_8u::@5
test_8u::@7: scope:[test_8u] from test_8u::@6 test_8u::@5: scope:[test_8u] from test_8u::@4
[272] phi() [272] phi()
[273] call print_str [273] call print_str
to:test_8u::@6
test_8u::@6: scope:[test_8u] from test_8u::@5
[274] (byte) print_byte::b#5 ← (byte) test_8u::res#0
[275] call print_byte
to:test_8u::@7
test_8u::@7: scope:[test_8u] from test_8u::@6
[276] phi()
[277] call print_str
to:test_8u::@8 to:test_8u::@8
test_8u::@8: scope:[test_8u] from test_8u::@7 test_8u::@8: scope:[test_8u] from test_8u::@7
[274] (byte) print_byte::b#6 ← (byte) rem8u#17 [278] (byte) print_byte::b#6 ← (byte) rem8u#17
[275] call print_byte [279] call print_byte
to:test_8u::@9 to:test_8u::@9
test_8u::@9: scope:[test_8u] from test_8u::@8 test_8u::@9: scope:[test_8u] from test_8u::@8
[276] phi() [280] phi()
[277] call print_ln [281] call print_ln
to:test_8u::@10 to:test_8u::@10
test_8u::@10: scope:[test_8u] from test_8u::@9 test_8u::@10: scope:[test_8u] from test_8u::@9
[278] (byte) test_8u::i#1 ← ++ (byte) test_8u::i#10 [282] (byte) test_8u::i#1 ← ++ (byte) test_8u::i#10
[279] if((byte) test_8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto test_8u::@11 [283] if((byte) test_8u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto test_8u::@11
to:test_8u::@return to:test_8u::@return
test_8u::@return: scope:[test_8u] from test_8u::@10 test_8u::@return: scope:[test_8u] from test_8u::@10
[280] return [284] return
to:@return to:@return
test_8u::@11: scope:[test_8u] from test_8u::@10 test_8u::@11: scope:[test_8u] from test_8u::@10
[281] (byte*~) print_char_cursor#188 ← (byte*) print_line_cursor#1 [285] (byte*~) print_char_cursor#188 ← (byte*) print_line_cursor#1
to:test_8u::@1 to:test_8u::@1
print_cls: scope:[print_cls] from main print_cls: scope:[print_cls] from main
[282] phi() [286] phi()
to:print_cls::@1 to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[283] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) $400 print_cls::@1/(byte*) print_cls::sc#1 ) [287] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) $400 print_cls::@1/(byte*) print_cls::sc#1 )
[284] *((byte*) print_cls::sc#2) ← (byte) ' ' [288] *((byte*) print_cls::sc#2) ← (byte) ' '
[285] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [289] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[286] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1 [290] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) $400+(word/signed word/dword/signed dword) $3e8) goto print_cls::@1
to:print_cls::@return to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1 print_cls::@return: scope:[print_cls] from print_cls::@1
[287] return [291] return
to:@return to:@return

File diff suppressed because one or more lines are too long

View File

@ -234,7 +234,7 @@
(byte[]) print_hextab (byte[]) print_hextab
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef" (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor (byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:3 3.9099999999999993 (byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:3 3.759615384615385
(byte*) print_line_cursor#20 print_line_cursor zp ZP_WORD:3 204.0 (byte*) print_line_cursor#20 print_line_cursor zp ZP_WORD:3 204.0
(byte*) print_line_cursor#39 print_line_cursor zp ZP_WORD:3 46.0 (byte*) print_line_cursor#39 print_line_cursor zp ZP_WORD:3 46.0
(byte*) print_line_cursor#41 print_line_cursor zp ZP_WORD:3 0.9565217391304348 (byte*) print_line_cursor#41 print_line_cursor zp ZP_WORD:3 0.9565217391304348
@ -303,6 +303,8 @@
(const string) str1 str1 = (string) " = @" (const string) str1 str1 = (string) " = @"
(const string) str2 str2 = (string) " @" (const string) str2 str2 = (string) " @"
(void()) test_16s() (void()) test_16s()
(byte) test_16s::$16 reg byte a 22.0
(byte) test_16s::$17 reg byte a 22.0
(label) test_16s::@1 (label) test_16s::@1
(label) test_16s::@10 (label) test_16s::@10
(label) test_16s::@2 (label) test_16s::@2
@ -315,7 +317,7 @@
(label) test_16s::@9 (label) test_16s::@9
(label) test_16s::@return (label) test_16s::@return
(signed word) test_16s::dividend (signed word) test_16s::dividend
(signed word) test_16s::dividend#0 dividend zp ZP_WORD:5 4.714285714285714 (signed word) test_16s::dividend#0 dividend zp ZP_WORD:5 4.125
(signed word[]) test_16s::dividends (signed word[]) test_16s::dividends
(const signed word[]) test_16s::dividends#0 dividends = { (word/signed word/dword/signed dword) $7fff, (word/signed word/dword/signed dword) $7fff, -(word/signed word/dword/signed dword) $7fff, -(word/signed word/dword/signed dword) $7fff, (word/signed word/dword/signed dword) $7fff, -(word/signed word/dword/signed dword) $7fff } (const signed word[]) test_16s::dividends#0 dividends = { (word/signed word/dword/signed dword) $7fff, (word/signed word/dword/signed dword) $7fff, -(word/signed word/dword/signed dword) $7fff, -(word/signed word/dword/signed dword) $7fff, (word/signed word/dword/signed dword) $7fff, -(word/signed word/dword/signed dword) $7fff }
(signed word) test_16s::divisor (signed word) test_16s::divisor
@ -324,10 +326,12 @@
(const signed word[]) test_16s::divisors#0 divisors = { (byte/signed byte/word/signed word/dword/signed dword) 5, -(byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) $b, -(byte/signed byte/word/signed word/dword/signed dword) $d, -(byte/signed byte/word/signed word/dword/signed dword) $11, (byte/signed byte/word/signed word/dword/signed dword) $13 } (const signed word[]) test_16s::divisors#0 divisors = { (byte/signed byte/word/signed word/dword/signed dword) 5, -(byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) $b, -(byte/signed byte/word/signed word/dword/signed dword) $d, -(byte/signed byte/word/signed word/dword/signed dword) $11, (byte/signed byte/word/signed word/dword/signed dword) $13 }
(byte) test_16s::i (byte) test_16s::i
(byte) test_16s::i#1 i zp ZP_BYTE:2 16.5 (byte) test_16s::i#1 i zp ZP_BYTE:2 16.5
(byte) test_16s::i#10 i zp ZP_BYTE:2 1.76 (byte) test_16s::i#10 i zp ZP_BYTE:2 1.6296296296296295
(signed word) test_16s::res (signed word) test_16s::res
(signed word) test_16s::res#0 res zp ZP_WORD:14 2.2 (signed word) test_16s::res#0 res zp ZP_WORD:14 2.2
(void()) test_16u() (void()) test_16u()
(byte) test_16u::$10 reg byte a 22.0
(byte) test_16u::$11 reg byte a 22.0
(label) test_16u::@1 (label) test_16u::@1
(label) test_16u::@10 (label) test_16u::@10
(label) test_16u::@2 (label) test_16u::@2
@ -340,7 +344,7 @@
(label) test_16u::@9 (label) test_16u::@9
(label) test_16u::@return (label) test_16u::@return
(word) test_16u::dividend (word) test_16u::dividend
(word) test_16u::dividend#0 dividend zp ZP_WORD:5 4.714285714285714 (word) test_16u::dividend#0 dividend zp ZP_WORD:5 4.125
(word[]) test_16u::dividends (word[]) test_16u::dividends
(const word[]) test_16u::dividends#0 dividends = { (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff } (const word[]) test_16u::dividends#0 dividends = { (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff, (word/dword/signed dword) $ffff }
(word) test_16u::divisor (word) test_16u::divisor
@ -349,7 +353,7 @@
(const word[]) test_16u::divisors#0 divisors = { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) $b, (byte/signed byte/word/signed word/dword/signed dword) $d, (byte/signed byte/word/signed word/dword/signed dword) $11, (byte/signed byte/word/signed word/dword/signed dword) $13 } (const word[]) test_16u::divisors#0 divisors = { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) $b, (byte/signed byte/word/signed word/dword/signed dword) $d, (byte/signed byte/word/signed word/dword/signed dword) $11, (byte/signed byte/word/signed word/dword/signed dword) $13 }
(byte) test_16u::i (byte) test_16u::i
(byte) test_16u::i#1 i zp ZP_BYTE:2 16.5 (byte) test_16u::i#1 i zp ZP_BYTE:2 16.5
(byte) test_16u::i#10 i zp ZP_BYTE:2 1.76 (byte) test_16u::i#10 i zp ZP_BYTE:2 1.6296296296296295
(word) test_16u::res (word) test_16u::res
(word) test_16u::res#0 res zp ZP_WORD:14 2.2 (word) test_16u::res#0 res zp ZP_WORD:14 2.2
(void()) test_8s() (void()) test_8s()
@ -426,6 +430,8 @@ reg byte y [ divr8u::rem#4 divr8u::rem#10 divr8u::rem#5 divr8u::rem#1 divr8u::re
zp ZP_BYTE:17 [ divr8u::dividend#2 divr8u::dividend#0 divr8u::dividend#1 test_8u::res#0 ] zp ZP_BYTE:17 [ divr8u::dividend#2 divr8u::dividend#0 divr8u::dividend#1 test_8u::res#0 ]
zp ZP_BYTE:18 [ divr8u::quotient#3 divr8u::return#1 divr8u::quotient#1 divr8u::quotient#2 ] zp ZP_BYTE:18 [ divr8u::quotient#3 divr8u::return#1 divr8u::quotient#1 divr8u::quotient#2 ]
reg byte x [ divr8u::i#2 divr8u::i#1 ] reg byte x [ divr8u::i#2 divr8u::i#1 ]
reg byte a [ test_16s::$16 ]
reg byte a [ test_16s::$17 ]
zp ZP_WORD:19 [ test_16s::divisor#0 div16s::divisor#0 ] zp ZP_WORD:19 [ test_16s::divisor#0 div16s::divisor#0 ]
reg byte a [ print_byte::$0 ] reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ] reg byte a [ print_byte::$2 ]
@ -444,4 +450,6 @@ reg byte a [ divr8u::return#0 ]
reg byte a [ div8u::return#0 ] reg byte a [ div8u::return#0 ]
reg byte a [ divr8u::$1 ] reg byte a [ divr8u::$1 ]
reg byte x [ rem8u#17 ] reg byte x [ rem8u#17 ]
reg byte a [ test_16u::$10 ]
reg byte a [ test_16u::$11 ]
reg byte a [ div8u::return#3 ] reg byte a [ div8u::return#3 ]