1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-27 19:50:10 +00:00

Fixed problem, where assigning to low/high value left an unused intermediate variable. Closes #129

This commit is contained in:
jespergravgaard 2019-03-01 00:27:26 +01:00
parent de58d9b6dd
commit ed2d992333
41 changed files with 9875 additions and 10412 deletions

View File

@ -31,6 +31,8 @@ public class Pass1FixLValuesLoHi extends Pass1Base {
@Override
public boolean step() {
List<VariableRef> intermediates = new ArrayList<>();
ProgramScope programScope = getProgram().getScope();
for(ControlFlowBlock block : getProgram().getGraph().getAllBlocks()) {
List<Statement> statements = block.getStatements();
@ -41,6 +43,7 @@ public class Pass1FixLValuesLoHi extends Pass1Base {
StatementLValue statementLValue = (StatementLValue) statement;
LvalueIntermediate intermediate = (LvalueIntermediate) statementLValue.getlValue();
StatementAssignment intermediateAssignment = getProgram().getGraph().getAssignment(intermediate.getVariable());
intermediates.add(intermediate.getVariable());
if(Operators.LOWBYTE.equals(intermediateAssignment.getOperator()) && intermediateAssignment.getrValue1() == null) {
// Found assignment to an intermediate low byte lValue <x = ...
fixLoHiLValue(programScope, statementsIt, statementLValue, intermediate, intermediateAssignment, Operators.SET_LOWBYTE);
@ -51,6 +54,11 @@ public class Pass1FixLValuesLoHi extends Pass1Base {
}
}
}
// Remove intermediates from the code
Pass2SsaOptimization.removeAssignments(getGraph(), intermediates);
Pass2SsaOptimization.deleteSymbols(programScope, intermediates);
return false;
}

View File

@ -31,7 +31,7 @@ public class Pass2AliasElimination extends Pass2SsaOptimization {
for(AliasSet aliasSet : aliases.getAliasSets()) {
getLog().append("Alias " + aliasSet.toString(getProgram()));
}
deleteSymbols(aliases.getSymbolsToRemove(getScope()));
deleteSymbols(getScope(), aliases.getSymbolsToRemove(getScope()));
return (aliases.size() > 0);
}

View File

@ -28,8 +28,8 @@ public class Pass2ConditionalAndOrRewriting extends Pass2SsaOptimization {
if(obsoleteConditionVar!=null) {
Collection<VariableRef> obsoleteVars = new ArrayList<>();
obsoleteVars.add(obsoleteConditionVar);
removeAssignments(obsoleteVars);
deleteSymbols(obsoleteVars);
removeAssignments(getGraph(), obsoleteVars);
deleteSymbols(getScope(), obsoleteVars);
return true;
} else {
return false;

View File

@ -26,8 +26,8 @@ public class Pass2ConditionalJumpSimplification extends Pass2SsaOptimization {
final Map<LValue, StatementAssignment> assignments = getAllAssignments();
final Map<RValue, List<Statement>> usages = getAllUsages();
final List<VariableRef> simpleConditionVars = getSimpleConditions(assignments, usages);
removeAssignments(simpleConditionVars);
deleteSymbols(simpleConditionVars);
removeAssignments(getGraph(), simpleConditionVars);
deleteSymbols(getScope(), simpleConditionVars);
return (simpleConditionVars.size() > 0);
}

View File

@ -90,7 +90,7 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
getLog().append("Constant " + constantVar.toString(getProgram()) + " = " + constantVar.getValue());
}
// Remove assignments to constants in the code
removeAssignments(constants.keySet());
removeAssignments(getGraph(), constants.keySet());
// Replace VariableRef's with ConstantRef's
replaceVariables(constAliases);
return constants.size() > 0;

View File

@ -51,7 +51,7 @@ public class Pass2ConstantInlining extends Pass2SsaOptimization {
// Replace all usages of the constants in the control flow graph or symbol table
replaceVariables(inline);
// Remove from symbol table
deleteSymbols(inline.keySet());
deleteSymbols(getScope(), inline.keySet());
for(ConstantRef constantRef : inline.keySet()) {
getLog().append("Constant inlined " + constantRef.toString() + " = " + inline.get(constantRef).toString(getProgram()));

View File

@ -57,7 +57,7 @@ public class Pass2IdenticalPhiElimination extends Pass2SsaOptimization {
RValue alias = phiIdentical.get(var);
getLog().append("Identical Phi Values " + var.toString(getProgram()) + " " + alias.toString(getProgram()));
}
deleteSymbols(phiIdentical.keySet());
deleteSymbols(getScope(), phiIdentical.keySet());
return phiIdentical.size()>0;
}

View File

@ -76,7 +76,7 @@ public class Pass2NopCastElimination extends Pass2SsaOptimization {
}
}
replaceVariables(castAliasses);
deleteSymbols(castAliasses.keySet());
deleteSymbols(getScope(), castAliasses.keySet());
return (castAliasses.size() > 0);
}

View File

@ -22,13 +22,13 @@ public class Pass2RedundantPhiElimination extends Pass2SsaOptimization {
@Override
public boolean step() {
final Map<VariableRef, RValue> aliases = findRedundantPhis();
removeAssignments(aliases.keySet());
removeAssignments(getGraph(), aliases.keySet());
replaceVariables(aliases);
for(VariableRef var : aliases.keySet()) {
RValue alias = aliases.get(var);
getLog().append("Redundant Phi " + var.toString(getProgram()) + " " + alias.toString(getProgram()));
}
deleteSymbols(aliases.keySet());
deleteSymbols(getScope(), aliases.keySet());
return aliases.size() > 0;
}

View File

@ -2,6 +2,7 @@ package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.iterator.ProgramValueIterator;
import dk.camelot64.kickc.model.symbols.ProgramScope;
import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.model.statements.*;
import dk.camelot64.kickc.model.symbols.Symbol;
@ -98,8 +99,8 @@ public abstract class Pass2SsaOptimization extends Pass1Base {
*
* @param variables The variables to eliminate
*/
public void removeAssignments(Collection<? extends LValue> variables) {
for(ControlFlowBlock block : getGraph().getAllBlocks()) {
public static void removeAssignments(ControlFlowGraph graph, Collection<? extends LValue> variables) {
for(ControlFlowBlock block : graph.getAllBlocks()) {
for(Iterator<Statement> iterator = block.getStatements().iterator(); iterator.hasNext(); ) {
Statement statement = iterator.next();
if(statement instanceof StatementAssignment) {
@ -109,13 +110,7 @@ public abstract class Pass2SsaOptimization extends Pass1Base {
}
} else if(statement instanceof StatementPhiBlock) {
StatementPhiBlock phiBlock = (StatementPhiBlock) statement;
Iterator<StatementPhiBlock.PhiVariable> variableIterator = phiBlock.getPhiVariables().iterator();
while(variableIterator.hasNext()) {
StatementPhiBlock.PhiVariable phiVariable = variableIterator.next();
if(variables.contains(phiVariable.getVariable())) {
variableIterator.remove();
}
}
phiBlock.getPhiVariables().removeIf(phiVariable -> variables.contains(phiVariable.getVariable()));
if(phiBlock.getPhiVariables().size() == 0) {
iterator.remove();
}
@ -124,9 +119,9 @@ public abstract class Pass2SsaOptimization extends Pass1Base {
}
}
public void deleteSymbols(Collection<? extends SymbolRef> symbols) {
public static void deleteSymbols(ProgramScope programScope, Collection<? extends SymbolRef> symbols) {
for(SymbolRef symbolRef : symbols) {
Symbol symbol = getScope().getSymbol(symbolRef.getFullName());
Symbol symbol = programScope.getSymbol(symbolRef.getFullName());
symbol.getScope().remove(symbol);
}
}

View File

@ -27,8 +27,8 @@ public class Pass2UnaryNotSimplification extends Pass2SsaOptimization {
final VariableReferenceInfos usages = getProgram().getVariableReferenceInfos();
final Map<LValue, StatementAssignment> assignments = getAllAssignments();
final List<VariableRef> unusedComparisons = optimizeUnaryNots(assignments, usages);
removeAssignments(unusedComparisons);
deleteSymbols(unusedComparisons);
removeAssignments(getGraph(), unusedComparisons);
deleteSymbols(getScope(), unusedComparisons);
return (unusedComparisons.size() > 0);
}

View File

@ -37,9 +37,9 @@ public class Pass3PhiMemCoalesce extends Pass2SsaOptimization {
getLog().append("Created " + phiEquivalenceClasses.size() + " initial phi equivalence classes");
PhiMemCoalescer phiMemCoalescer = new PhiMemCoalescer(phiEquivalenceClasses);
phiMemCoalescer.visitGraph(getGraph());
removeAssignments(phiMemCoalescer.getRemove());
removeAssignments(getGraph(), phiMemCoalescer.getRemove());
replaceVariables(phiMemCoalescer.getReplace());
deleteSymbols(phiMemCoalescer.getRemove());
deleteSymbols(getScope(), phiMemCoalescer.getRemove());
getLog().append("Coalesced down to " + phiEquivalenceClasses.size() + " phi equivalence classes");
return false;
}

View File

@ -56,7 +56,6 @@ plot: {
sta plotter_x+1
lda #<0
sta plotter_x
// Needs word arrays arranged as two underlying byte arrays to allow byte* plotter_x = plot_x[x]; - and eventually - byte* plotter = plot_x[x] + plot_y[y];
lda plot_xlo,y
sta plotter_x
ldy y

View File

@ -47,80 +47,78 @@ plots::@return: scope:[plots] from plots::@3
plot: scope:[plot] from plots::@1
[23] (byte~) plot::$6 ← *((const byte[256]) plot_xhi#0 + (byte) plot::x#0)
[24] (byte*) plot::plotter_x#1 ← ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0 hi= (byte~) plot::$6
[25] (byte~) plot::$1 ← < (byte*) plot::plotter_x#1
[26] (byte~) plot::$7 ← *((const byte[256]) plot_xlo#0 + (byte) plot::x#0)
[27] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7
[28] (byte~) plot::$8 ← *((const byte[256]) plot_yhi#0 + (byte) plot::y#0)
[29] (word) plot::plotter_y#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 hi= (byte~) plot::$8
[30] (byte~) plot::$3 ← < (word) plot::plotter_y#1
[31] (byte~) plot::$9 ← *((const byte[256]) plot_ylo#0 + (byte) plot::y#0)
[32] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9
[33] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2
[34] (byte~) plot::$5 ← *((byte*) plot::plotter#0) | *((const byte[256]) plot_bit#0 + (byte) plot::x#0)
[35] *((byte*) plot::plotter#0) ← (byte~) plot::$5
[25] (byte~) plot::$7 ← *((const byte[256]) plot_xlo#0 + (byte) plot::x#0)
[26] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7
[27] (byte~) plot::$8 ← *((const byte[256]) plot_yhi#0 + (byte) plot::y#0)
[28] (word) plot::plotter_y#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 hi= (byte~) plot::$8
[29] (byte~) plot::$9 ← *((const byte[256]) plot_ylo#0 + (byte) plot::y#0)
[30] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9
[31] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2
[32] (byte~) plot::$5 ← *((byte*) plot::plotter#0) | *((const byte[256]) plot_bit#0 + (byte) plot::x#0)
[33] *((byte*) plot::plotter#0) ← (byte~) plot::$5
to:plot::@return
plot::@return: scope:[plot] from plot
[36] return
[34] return
to:@return
init_plot_tables: scope:[init_plot_tables] from main::@5
[37] phi()
[35] phi()
to:init_plot_tables::@1
init_plot_tables::@1: scope:[init_plot_tables] from init_plot_tables init_plot_tables::@2
[38] (byte) init_plot_tables::bits#3 ← phi( init_plot_tables/(byte/word/signed word/dword/signed dword) 128 init_plot_tables::@2/(byte) init_plot_tables::bits#4 )
[38] (byte) init_plot_tables::x#2 ← phi( init_plot_tables/(byte/signed byte/word/signed word/dword/signed dword) 0 init_plot_tables::@2/(byte) init_plot_tables::x#1 )
[39] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte/word/signed word/dword/signed dword) 248
[40] *((const byte[256]) plot_xlo#0 + (byte) init_plot_tables::x#2) ← (byte~) init_plot_tables::$0
[41] *((const byte[256]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0
[42] *((const byte[256]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3
[43] (byte) init_plot_tables::bits#1 ← (byte) init_plot_tables::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[44] if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@10
[36] (byte) init_plot_tables::bits#3 ← phi( init_plot_tables/(byte/word/signed word/dword/signed dword) 128 init_plot_tables::@2/(byte) init_plot_tables::bits#4 )
[36] (byte) init_plot_tables::x#2 ← phi( init_plot_tables/(byte/signed byte/word/signed word/dword/signed dword) 0 init_plot_tables::@2/(byte) init_plot_tables::x#1 )
[37] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte/word/signed word/dword/signed dword) 248
[38] *((const byte[256]) plot_xlo#0 + (byte) init_plot_tables::x#2) ← (byte~) init_plot_tables::$0
[39] *((const byte[256]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0
[40] *((const byte[256]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3
[41] (byte) init_plot_tables::bits#1 ← (byte) init_plot_tables::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[42] if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@10
to:init_plot_tables::@2
init_plot_tables::@2: scope:[init_plot_tables] from init_plot_tables::@1 init_plot_tables::@10
[45] (byte) init_plot_tables::bits#4 ← phi( init_plot_tables::@10/(byte) init_plot_tables::bits#1 init_plot_tables::@1/(byte/word/signed word/dword/signed dword) 128 )
[46] (byte) init_plot_tables::x#1 ← ++ (byte) init_plot_tables::x#2
[47] if((byte) init_plot_tables::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@1
[43] (byte) init_plot_tables::bits#4 ← phi( init_plot_tables::@10/(byte) init_plot_tables::bits#1 init_plot_tables::@1/(byte/word/signed word/dword/signed dword) 128 )
[44] (byte) init_plot_tables::x#1 ← ++ (byte) init_plot_tables::x#2
[45] if((byte) init_plot_tables::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@1
to:init_plot_tables::@3
init_plot_tables::@3: scope:[init_plot_tables] from init_plot_tables::@2 init_plot_tables::@4
[48] (byte*) init_plot_tables::yoffs#2 ← phi( init_plot_tables::@4/(byte*) init_plot_tables::yoffs#4 init_plot_tables::@2/((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0 )
[48] (byte) init_plot_tables::y#2 ← phi( init_plot_tables::@4/(byte) init_plot_tables::y#1 init_plot_tables::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[49] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[50] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2
[51] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7
[52] *((const byte[256]) plot_ylo#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$8
[53] (byte~) init_plot_tables::$9 ← > (byte*) init_plot_tables::yoffs#2
[54] *((const byte[256]) plot_yhi#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$9
[55] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[56] if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto init_plot_tables::@4
[46] (byte*) init_plot_tables::yoffs#2 ← phi( init_plot_tables::@4/(byte*) init_plot_tables::yoffs#4 init_plot_tables::@2/((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0 )
[46] (byte) init_plot_tables::y#2 ← phi( init_plot_tables::@4/(byte) init_plot_tables::y#1 init_plot_tables::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[47] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[48] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2
[49] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7
[50] *((const byte[256]) plot_ylo#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$8
[51] (byte~) init_plot_tables::$9 ← > (byte*) init_plot_tables::yoffs#2
[52] *((const byte[256]) plot_yhi#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$9
[53] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[54] if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto init_plot_tables::@4
to:init_plot_tables::@7
init_plot_tables::@7: scope:[init_plot_tables] from init_plot_tables::@3
[57] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8
[55] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8
to:init_plot_tables::@4
init_plot_tables::@4: scope:[init_plot_tables] from init_plot_tables::@3 init_plot_tables::@7
[58] (byte*) init_plot_tables::yoffs#4 ← phi( init_plot_tables::@3/(byte*) init_plot_tables::yoffs#2 init_plot_tables::@7/(byte*) init_plot_tables::yoffs#1 )
[59] (byte) init_plot_tables::y#1 ← ++ (byte) init_plot_tables::y#2
[60] if((byte) init_plot_tables::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@3
[56] (byte*) init_plot_tables::yoffs#4 ← phi( init_plot_tables::@3/(byte*) init_plot_tables::yoffs#2 init_plot_tables::@7/(byte*) init_plot_tables::yoffs#1 )
[57] (byte) init_plot_tables::y#1 ← ++ (byte) init_plot_tables::y#2
[58] if((byte) init_plot_tables::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@3
to:init_plot_tables::@return
init_plot_tables::@return: scope:[init_plot_tables] from init_plot_tables::@4
[61] return
[59] return
to:@return
init_plot_tables::@10: scope:[init_plot_tables] from init_plot_tables::@1
[62] phi()
[60] phi()
to:init_plot_tables::@2
init_screen: scope:[init_screen] from main
[63] phi()
[61] phi()
to:init_screen::@1
init_screen::@1: scope:[init_screen] from init_screen init_screen::@1
[64] (byte*) init_screen::b#2 ← phi( init_screen/(const byte*) BITMAP#0 init_screen::@1/(byte*) init_screen::b#1 )
[65] *((byte*) init_screen::b#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[66] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2
[67] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word/signed word/dword/signed dword) 8192) goto init_screen::@1
[62] (byte*) init_screen::b#2 ← phi( init_screen/(const byte*) BITMAP#0 init_screen::@1/(byte*) init_screen::b#1 )
[63] *((byte*) init_screen::b#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[64] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2
[65] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word/signed word/dword/signed dword) 8192) goto init_screen::@1
to:init_screen::@2
init_screen::@2: scope:[init_screen] from init_screen::@1 init_screen::@2
[68] (byte*) init_screen::c#2 ← phi( init_screen::@2/(byte*) init_screen::c#1 init_screen::@1/(const byte*) SCREEN#0 )
[69] *((byte*) init_screen::c#2) ← (byte/signed byte/word/signed word/dword/signed dword) 20
[70] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2
[71] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1024) goto init_screen::@2
[66] (byte*) init_screen::c#2 ← phi( init_screen::@2/(byte*) init_screen::c#1 init_screen::@1/(const byte*) SCREEN#0 )
[67] *((byte*) init_screen::c#2) ← (byte/signed byte/word/signed word/dword/signed dword) 20
[68] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2
[69] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1024) goto init_screen::@2
to:init_screen::@return
init_screen::@return: scope:[init_screen] from init_screen::@2
[72] return
[70] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -71,8 +71,6 @@
(label) main::@5
(label) main::@7
(void()) plot((byte) plot::x , (byte) plot::y)
(byte~) plot::$1 reg byte a 20.0
(byte~) plot::$3 reg byte a 20.0
(byte~) plot::$5 reg byte a 4.0
(byte~) plot::$6 reg byte a 4.0
(byte~) plot::$7 reg byte a 4.0
@ -83,14 +81,14 @@
(byte*) plot::plotter#0 plotter zp ZP_WORD:2 3.0
(byte*) plot::plotter_x
(byte*) plot::plotter_x#1 plotter_x zp ZP_WORD:2 2.0
(byte*) plot::plotter_x#2 plotter_x zp ZP_WORD:2 0.6666666666666666
(byte*) plot::plotter_x#2 plotter_x zp ZP_WORD:2 0.8
(word) plot::plotter_y
(word) plot::plotter_y#1 plotter_y zp ZP_WORD:6 2.0
(word) plot::plotter_y#2 plotter_y zp ZP_WORD:6 4.0
(byte) plot::x
(byte) plot::x#0 x zp ZP_BYTE:4 8.23076923076923
(byte) plot::x#0 x zp ZP_BYTE:4 9.727272727272727
(byte) plot::y
(byte) plot::y#0 y zp ZP_BYTE:5 11.666666666666664
(byte) plot::y#0 y zp ZP_BYTE:5 15.000000000000002
(byte[256]) plot_bit
(const byte[256]) plot_bit#0 plot_bit = { fill( 256, 0) }
(byte[256]) plot_xhi
@ -123,11 +121,9 @@ zp ZP_WORD:2 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tab
zp ZP_BYTE:4 [ plot::x#0 init_plot_tables::$6 ]
zp ZP_BYTE:5 [ plot::y#0 ]
reg byte a [ plot::$6 ]
reg byte a [ plot::$1 ]
reg byte a [ plot::$7 ]
reg byte a [ plot::$8 ]
zp ZP_WORD:6 [ plot::plotter_y#1 plot::plotter_y#2 ]
reg byte a [ plot::$3 ]
reg byte a [ plot::$9 ]
reg byte a [ plot::$5 ]
reg byte a [ init_plot_tables::$0 ]

View File

@ -129,112 +129,110 @@ mulf8s_prepared::@6: scope:[mulf8s_prepared] from mulf8s_prepared
[66] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1
to:mulf8s_prepared::@3
mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@6
[67] (byte~) mulf8s_prepared::$4 ← > (word) mulf8s_prepared::m#0
[68] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0
[69] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4
[70] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15
[67] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0
[68] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4
[69] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15
to:mulf8s_prepared::@1
mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@6
[71] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 )
[72] if((signed byte) mulf8s_prepared::b#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2
[70] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 )
[71] if((signed byte) mulf8s_prepared::b#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2
to:mulf8s_prepared::@4
mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1
[73] (byte~) mulf8s_prepared::$10 ← > (word) mulf8s_prepared::m#5
[74] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5
[75] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0)
[76] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
[72] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5
[73] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0)
[74] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
to:mulf8s_prepared::@2
mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4
[77] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 )
[75] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 )
to:mulf8s_prepared::@return
mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2
[78] return
[76] return
to:@return
mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared
[79] *((const byte*) mulf8u_prepared::memB#0) ← (byte)(signed byte) mulf8s_prepared::b#4
[77] *((const byte*) mulf8u_prepared::memB#0) ← (byte)(signed byte) mulf8s_prepared::b#4
asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB }
[81] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0)
[79] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0)
to:mulf8u_prepared::@return
mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared
[82] return
[80] return
to:@return
mulf8u_prepare: scope:[mulf8u_prepare] from anim::mulf8s_prepare1 anim::mulf8s_prepare2
[83] (byte) mulf8u_prepare::a#2 ← phi( anim::mulf8s_prepare1/(byte~) mulf8u_prepare::a#3 anim::mulf8s_prepare2/(byte~) mulf8u_prepare::a#4 )
[84] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2
[81] (byte) mulf8u_prepare::a#2 ← phi( anim::mulf8s_prepare1/(byte~) mulf8u_prepare::a#3 anim::mulf8s_prepare2/(byte~) mulf8u_prepare::a#4 )
[82] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2
asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 }
to:mulf8u_prepare::@return
mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare
[86] return
[84] return
to:@return
init: scope:[init] from main
[87] phi()
[88] call mulf_init
[85] phi()
[86] call mulf_init
to:init::@3
init::@3: scope:[init] from init
[89] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255
[87] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255
to:init::@1
init::@1: scope:[init] from init::@1 init::@3
[90] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[91] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
[92] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0
[93] (byte) init::i#1 ← ++ (byte) init::i#2
[94] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@1
[88] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[89] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
[90] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0
[91] (byte) init::i#1 ← ++ (byte) init::i#2
[92] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@1
to:init::@return
init::@return: scope:[init] from init::@1
[95] return
[93] return
to:@return
mulf_init: scope:[mulf_init] from init
[96] phi()
[94] phi()
to:mulf_init::@1
mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@2
[97] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
[97] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
[97] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
[97] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
[97] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 )
[98] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[99] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
[100] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
[95] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
[95] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
[95] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
[95] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
[95] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 )
[96] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[97] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
[98] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
to:mulf_init::@5
mulf_init::@5: scope:[mulf_init] from mulf_init::@1
[101] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[102] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
[99] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[100] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
to:mulf_init::@2
mulf_init::@2: scope:[mulf_init] from mulf_init::@1 mulf_init::@5
[103] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 )
[103] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 )
[104] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
[105] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
[106] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
[107] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
[108] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[109] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[110] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[111] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1
[101] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 )
[101] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 )
[102] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
[103] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
[104] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
[105] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
[106] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[107] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[108] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[109] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1
to:mulf_init::@3
mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4
[112] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 )
[112] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 )
[112] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 )
[112] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 )
[113] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
[114] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
[115] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[116] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[117] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12
[110] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 )
[110] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 )
[110] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 )
[110] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 )
[111] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
[112] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
[113] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[114] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[115] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12
to:mulf_init::@4
mulf_init::@4: scope:[mulf_init] from mulf_init::@12 mulf_init::@3
[118] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[119] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[120] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3
[116] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[117] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[118] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3
to:mulf_init::@8
mulf_init::@8: scope:[mulf_init] from mulf_init::@4
[121] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256)
[122] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256)
[119] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256)
[120] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256)
to:mulf_init::@return
mulf_init::@return: scope:[mulf_init] from mulf_init::@8
[123] return
[121] return
to:@return
mulf_init::@12: scope:[mulf_init] from mulf_init::@3
[124] phi()
[122] phi()
to:mulf_init::@4

File diff suppressed because it is too large Load Diff

View File

@ -171,11 +171,9 @@
(label) main::@1
(label) main::@return
(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b)
(byte~) mulf8s_prepared::$10 reg byte a 20.0
(byte~) mulf8s_prepared::$11 reg byte a 4.0
(byte~) mulf8s_prepared::$15 reg byte a 4.0
(byte~) mulf8s_prepared::$16 reg byte a 4.0
(byte~) mulf8s_prepared::$4 reg byte a 20.0
(byte~) mulf8s_prepared::$5 reg byte a 4.0
(label) mulf8s_prepared::@1
(label) mulf8s_prepared::@2
@ -188,13 +186,13 @@
(signed byte) mulf8s_prepared::b#1 reg byte y 202.0
(signed byte) mulf8s_prepared::b#2 reg byte y 202.0
(signed byte) mulf8s_prepared::b#3 reg byte y 202.0
(signed byte) mulf8s_prepared::b#4 reg byte y 29.0
(signed byte) mulf8s_prepared::b#4 reg byte y 31.23076923076923
(word) mulf8s_prepared::m
(word) mulf8s_prepared::m#0 m zp ZP_WORD:5 2.0
(word) mulf8s_prepared::m#1 m zp ZP_WORD:5 4.0
(word) mulf8s_prepared::m#2 m zp ZP_WORD:5 4.0
(word) mulf8s_prepared::m#4 m zp ZP_WORD:5 0.6666666666666666
(word) mulf8s_prepared::m#5 m zp ZP_WORD:5 2.4
(word) mulf8s_prepared::m#5 m zp ZP_WORD:5 2.5
(signed byte*) mulf8s_prepared::memA
(const signed byte*) mulf8s_prepared::memA#0 memA = ((signed byte*))(byte/word/signed word/dword/signed dword) 253
(signed word) mulf8s_prepared::return
@ -295,10 +293,8 @@ reg byte a [ anim::$22 ]
reg byte y [ anim::ypos#0 ]
reg byte x [ anim::i2#0 ]
reg byte a [ anim::$25 ]
reg byte a [ mulf8s_prepared::$4 ]
reg byte a [ mulf8s_prepared::$5 ]
reg byte a [ mulf8s_prepared::$15 ]
reg byte a [ mulf8s_prepared::$10 ]
reg byte a [ mulf8s_prepared::$11 ]
reg byte a [ mulf8s_prepared::$16 ]
reg byte a [ mulf_init::$2 ]

View File

@ -332,7 +332,6 @@ sin16s_gen2: {
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage($17) a)
mul16s: {
.label _5 = 2
.label _6 = $e
.label _16 = $e
.label m = $a
@ -350,10 +349,6 @@ mul16s: {
lda a+1
bpl b2
lda m+2
sta _5
lda m+3
sta _5+1
lda m+2
sta _6
lda m+3
sta _6+1

View File

@ -254,200 +254,199 @@ mul16s::@6: scope:[mul16s] from mul16s
[122] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1
to:mul16s::@3
mul16s::@3: scope:[mul16s] from mul16s::@6
[123] (word~) mul16s::$5 ← > (dword) mul16s::m#0
[124] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[125] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0
[126] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
[123] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[124] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0
[125] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
to:mul16s::@1
mul16s::@1: scope:[mul16s] from mul16s::@3 mul16s::@6
[127] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
[126] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
to:mul16s::@2
mul16s::@2: scope:[mul16s] from mul16s::@1
[128] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
[127] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
to:mul16s::@return
mul16s::@return: scope:[mul16s] from mul16s::@2
[129] return
[128] return
to:@return
mul16u: scope:[mul16u] from mul16s mulu16_sel
[130] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[130] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
[131] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
[129] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[129] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
[130] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
to:mul16u::@1
mul16u::@1: scope:[mul16u] from mul16u mul16u::@4
[132] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[132] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[132] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[133] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
[131] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[131] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[131] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[132] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
to:mul16u::@return
mul16u::@return: scope:[mul16u] from mul16u::@1
[134] return
[133] return
to:@return
mul16u::@2: scope:[mul16u] from mul16u::@1
[135] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[136] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
[134] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[135] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
to:mul16u::@7
mul16u::@7: scope:[mul16u] from mul16u::@2
[137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
[136] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
to:mul16u::@4
mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@7
[138] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[139] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[140] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[137] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[138] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[139] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:mul16u::@1
sin16s: scope:[sin16s] from sin16s_gen2::@1
[141] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
[140] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
to:sin16s::@4
sin16s::@4: scope:[sin16s] from sin16s
[142] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
[141] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
to:sin16s::@1
sin16s::@1: scope:[sin16s] from sin16s sin16s::@4
[143] (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 )
[143] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[144] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
[142] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[142] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[143] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
to:sin16s::@5
sin16s::@5: scope:[sin16s] from sin16s::@1
[145] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
[144] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
to:sin16s::@2
sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5
[146] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[147] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[148] (word) sin16s::x1#0 ← > (dword~) sin16s::$6
[149] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[150] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[151] call mulu16_sel
[152] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
[145] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[146] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[147] (word) sin16s::x1#0 ← > (dword~) sin16s::$6
[148] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[149] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[150] call mulu16_sel
[151] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
to:sin16s::@8
sin16s::@8: scope:[sin16s] from sin16s::@2
[153] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[154] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[155] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[156] call mulu16_sel
[157] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
[152] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[153] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[154] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[155] call mulu16_sel
[156] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
to:sin16s::@9
sin16s::@9: scope:[sin16s] from sin16s::@8
[158] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[159] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[160] call mulu16_sel
[161] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
[157] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[158] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[159] call mulu16_sel
[160] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
to:sin16s::@10
sin16s::@10: scope:[sin16s] from sin16s::@9
[162] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[163] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[164] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[165] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[166] call mulu16_sel
[167] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
[161] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[162] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[163] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[164] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[165] call mulu16_sel
[166] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
to:sin16s::@11
sin16s::@11: scope:[sin16s] from sin16s::@10
[168] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[169] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[170] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[171] call mulu16_sel
[172] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
[167] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[168] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[169] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[170] call mulu16_sel
[171] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
to:sin16s::@12
sin16s::@12: scope:[sin16s] from sin16s::@11
[173] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[174] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[175] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[176] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15
[172] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[173] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[174] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[175] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15
to:sin16s::@6
sin16s::@6: scope:[sin16s] from sin16s::@12
[177] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
[176] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
to:sin16s::@3
sin16s::@3: scope:[sin16s] from sin16s::@15 sin16s::@6
[178] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
[177] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
to:sin16s::@return
sin16s::@return: scope:[sin16s] from sin16s::@3
[179] return
[178] return
to:@return
sin16s::@15: scope:[sin16s] from sin16s::@12
[180] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
[179] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
to:sin16s::@3
mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@11 sin16s::@2 sin16s::@8 sin16s::@9
[181] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 sin16s::@9/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[181] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 )
[181] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
[182] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[183] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[184] call mul16u
[185] (dword) mul16u::return#3 ← (dword) mul16u::res#2
[180] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 sin16s::@9/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[180] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 )
[180] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
[181] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[182] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[183] call mul16u
[184] (dword) mul16u::return#3 ← (dword) mul16u::res#2
to:mulu16_sel::@2
mulu16_sel::@2: scope:[mulu16_sel] from mulu16_sel
[186] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[187] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[188] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
[185] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[186] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[187] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
to:mulu16_sel::@return
mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@2
[189] return
[188] return
to:@return
div32u16u: scope:[div32u16u] from sin16s_gen2
[190] phi()
[191] call divr16u
[192] (word) divr16u::return#2 ← (word) divr16u::return#0
[189] phi()
[190] call divr16u
[191] (word) divr16u::return#2 ← (word) divr16u::return#0
to:div32u16u::@2
div32u16u::@2: scope:[div32u16u] from div32u16u
[193] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[194] (word) divr16u::rem#4 ← (word) rem16u#1
[195] call divr16u
[196] (word) divr16u::return#3 ← (word) divr16u::return#0
[192] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[193] (word) divr16u::rem#4 ← (word) rem16u#1
[194] call divr16u
[195] (word) divr16u::return#3 ← (word) divr16u::return#0
to:div32u16u::@3
div32u16u::@3: scope:[div32u16u] from div32u16u::@2
[197] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[198] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
[196] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[197] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
to:div32u16u::@return
div32u16u::@return: scope:[div32u16u] from div32u16u::@3
[199] return
[198] return
to:@return
divr16u: scope:[divr16u] from div32u16u div32u16u::@2
[200] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 )
[200] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 )
[199] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 )
[199] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 )
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[201] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[201] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[201] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[201] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[202] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
[203] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[204] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[205] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
[200] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[200] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[200] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[200] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[201] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
[202] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[203] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[204] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1
[206] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
[205] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[207] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[208] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[209] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[210] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3
[206] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[207] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[208] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[209] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3
to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2
[211] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[212] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0
[210] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[211] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0
to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[213] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[213] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[214] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[215] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
[212] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[212] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[213] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[214] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
to:divr16u::@6
divr16u::@6: scope:[divr16u] from divr16u::@3
[216] (word) rem16u#1 ← (word) divr16u::rem#11
[215] (word) rem16u#1 ← (word) divr16u::rem#11
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6
[217] return
[216] return
to:@return
fill: scope:[fill] from main::@3 main::@4
[218] (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 )
[218] (byte*) fill::addr#0 ← phi( main::@3/(const byte*) SCREEN#0 main::@4/(const byte*) COLS#0 )
[219] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
[217] (byte) fill::val#3 ← phi( main::@3/(const byte) BLACK#0 main::@4/(const byte) WHITE#0|(byte/signed byte/word/signed word/dword/signed dword) 8 )
[217] (byte*) fill::addr#0 ← phi( main::@3/(const byte*) SCREEN#0 main::@4/(const byte*) COLS#0 )
[218] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
to:fill::@1
fill::@1: scope:[fill] from fill fill::@1
[220] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
[221] *((byte*) fill::addr#2) ← (byte) fill::val#3
[222] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[223] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
[219] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
[220] *((byte*) fill::addr#2) ← (byte) fill::val#3
[221] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[222] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
to:fill::@return
fill::@return: scope:[fill] from fill::@1
[224] return
[223] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -206,7 +206,6 @@
(byte*) main::toD0181_screen
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 $16 zp ZP_WORD:14 4.0
(word~) mul16s::$5 $5 zp ZP_WORD:2 20.0
(word~) mul16s::$6 $6 zp ZP_WORD:14 4.0
(label) mul16s::@1
(label) mul16s::@2
@ -438,7 +437,7 @@
(word) xsin_idx#3 xsin_idx zp ZP_WORD:2 11.0
reg byte x [ main::ch#2 main::ch#1 ]
zp ZP_WORD:2 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 fill::addr#2 fill::addr#0 fill::addr#1 mul16s::$5 ]
zp ZP_WORD:2 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
reg byte x [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ]
reg byte y [ render_logo::logo_idx#11 render_logo::logo_idx#2 ]
reg byte y [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ]

View File

@ -327,7 +327,6 @@ sin16s_gen2: {
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage($17) a)
mul16s: {
.label _5 = 2
.label _6 = 6
.label _16 = 6
.label m = $c
@ -345,10 +344,6 @@ mul16s: {
lda a+1
bpl b2
lda m+2
sta _5
lda m+3
sta _5+1
lda m+2
sta _6
lda m+3
sta _6+1

View File

@ -184,262 +184,261 @@ mul16s::@6: scope:[mul16s] from mul16s
[94] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1
to:mul16s::@3
mul16s::@3: scope:[mul16s] from mul16s::@6
[95] (word~) mul16s::$5 ← > (dword) mul16s::m#0
[96] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[97] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0
[98] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
[95] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[96] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0
[97] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
to:mul16s::@1
mul16s::@1: scope:[mul16s] from mul16s::@3 mul16s::@6
[99] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
[98] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
to:mul16s::@2
mul16s::@2: scope:[mul16s] from mul16s::@1
[100] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
[99] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
to:mul16s::@return
mul16s::@return: scope:[mul16s] from mul16s::@2
[101] return
[100] return
to:@return
mul16u: scope:[mul16u] from mul16s mulu16_sel
[102] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[102] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
[103] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
[101] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[101] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
[102] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
to:mul16u::@1
mul16u::@1: scope:[mul16u] from mul16u mul16u::@4
[104] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[104] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[104] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[105] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
[103] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[103] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[103] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[104] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
to:mul16u::@return
mul16u::@return: scope:[mul16u] from mul16u::@1
[106] return
[105] return
to:@return
mul16u::@2: scope:[mul16u] from mul16u::@1
[107] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[108] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
[106] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[107] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
to:mul16u::@7
mul16u::@7: scope:[mul16u] from mul16u::@2
[109] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
[108] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
to:mul16u::@4
mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@7
[110] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[111] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[112] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[109] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[110] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[111] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:mul16u::@1
sin16s: scope:[sin16s] from sin16s_gen2::@1
[113] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
[112] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
to:sin16s::@4
sin16s::@4: scope:[sin16s] from sin16s
[114] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
[113] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
to:sin16s::@1
sin16s::@1: scope:[sin16s] from sin16s sin16s::@4
[115] (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 )
[115] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[116] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
[114] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[114] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[115] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
to:sin16s::@5
sin16s::@5: scope:[sin16s] from sin16s::@1
[117] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
[116] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
to:sin16s::@2
sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5
[118] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[119] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[120] (word) sin16s::x1#0 ← > (dword~) sin16s::$6
[121] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[122] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[123] call mulu16_sel
[124] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
[117] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[118] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[119] (word) sin16s::x1#0 ← > (dword~) sin16s::$6
[120] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[121] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[122] call mulu16_sel
[123] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
to:sin16s::@8
sin16s::@8: scope:[sin16s] from sin16s::@2
[125] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[126] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[127] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[128] call mulu16_sel
[129] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
[124] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[125] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[126] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[127] call mulu16_sel
[128] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
to:sin16s::@9
sin16s::@9: scope:[sin16s] from sin16s::@8
[130] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[131] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[132] call mulu16_sel
[133] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
[129] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[130] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[131] call mulu16_sel
[132] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
to:sin16s::@10
sin16s::@10: scope:[sin16s] from sin16s::@9
[134] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[135] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[136] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[137] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[138] call mulu16_sel
[139] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
[133] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[134] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[135] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[136] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[137] call mulu16_sel
[138] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
to:sin16s::@11
sin16s::@11: scope:[sin16s] from sin16s::@10
[140] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[141] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[142] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[143] call mulu16_sel
[144] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
[139] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[140] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[141] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[142] call mulu16_sel
[143] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
to:sin16s::@12
sin16s::@12: scope:[sin16s] from sin16s::@11
[145] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[146] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[147] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[148] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15
[144] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[145] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[146] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[147] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15
to:sin16s::@6
sin16s::@6: scope:[sin16s] from sin16s::@12
[149] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
[148] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
to:sin16s::@3
sin16s::@3: scope:[sin16s] from sin16s::@15 sin16s::@6
[150] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
[149] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
to:sin16s::@return
sin16s::@return: scope:[sin16s] from sin16s::@3
[151] return
[150] return
to:@return
sin16s::@15: scope:[sin16s] from sin16s::@12
[152] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
[151] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
to:sin16s::@3
mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@11 sin16s::@2 sin16s::@8 sin16s::@9
[153] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 sin16s::@9/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[153] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 )
[153] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
[154] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[155] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[156] call mul16u
[157] (dword) mul16u::return#3 ← (dword) mul16u::res#2
[152] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 sin16s::@9/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[152] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 )
[152] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
[153] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[154] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[155] call mul16u
[156] (dword) mul16u::return#3 ← (dword) mul16u::res#2
to:mulu16_sel::@2
mulu16_sel::@2: scope:[mulu16_sel] from mulu16_sel
[158] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[159] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[160] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
[157] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[158] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[159] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
to:mulu16_sel::@return
mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@2
[161] return
[160] return
to:@return
div32u16u: scope:[div32u16u] from sin16s_gen2
[162] phi()
[163] call divr16u
[164] (word) divr16u::return#2 ← (word) divr16u::return#0
[161] phi()
[162] call divr16u
[163] (word) divr16u::return#2 ← (word) divr16u::return#0
to:div32u16u::@2
div32u16u::@2: scope:[div32u16u] from div32u16u
[165] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[166] (word) divr16u::rem#4 ← (word) rem16u#1
[167] call divr16u
[168] (word) divr16u::return#3 ← (word) divr16u::return#0
[164] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[165] (word) divr16u::rem#4 ← (word) rem16u#1
[166] call divr16u
[167] (word) divr16u::return#3 ← (word) divr16u::return#0
to:div32u16u::@3
div32u16u::@3: scope:[div32u16u] from div32u16u::@2
[169] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[170] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
[168] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[169] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
to:div32u16u::@return
div32u16u::@return: scope:[div32u16u] from div32u16u::@3
[171] return
[170] return
to:@return
divr16u: scope:[divr16u] from div32u16u div32u16u::@2
[172] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 )
[172] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 )
[171] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 )
[171] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 )
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[173] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[173] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[173] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[173] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[174] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
[175] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[176] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[177] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
[172] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[172] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[172] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[172] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[173] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
[174] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[175] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[176] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1
[178] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
[177] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[179] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[180] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[181] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[182] if((word) divr16u::rem#6<(const word) SIN_SIZE#0) goto divr16u::@3
[178] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[179] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[180] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[181] if((word) divr16u::rem#6<(const word) SIN_SIZE#0) goto divr16u::@3
to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2
[183] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[184] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE#0
[182] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[183] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE#0
to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[185] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[185] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[186] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[187] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
[184] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[184] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[185] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[186] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
to:divr16u::@6
divr16u::@6: scope:[divr16u] from divr16u::@3
[188] (word) rem16u#1 ← (word) divr16u::rem#11
[187] (word) rem16u#1 ← (word) divr16u::rem#11
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6
[189] return
[188] return
to:@return
bitmap_clear: scope:[bitmap_clear] from main::@10
[190] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0) w= *((const byte[256]) bitmap_plot_ylo#0)
[191] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3
[189] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0) w= *((const byte[256]) bitmap_plot_ylo#0)
[190] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3
to:bitmap_clear::@1
bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3
[192] (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@3/(byte) bitmap_clear::y#1 )
[192] (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*~) bitmap_clear::bitmap#5 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#1 )
[191] (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@3/(byte) bitmap_clear::y#1 )
[191] (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*~) bitmap_clear::bitmap#5 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#1 )
to:bitmap_clear::@2
bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2
[193] (byte) bitmap_clear::x#2 ← phi( bitmap_clear::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@2/(byte) bitmap_clear::x#1 )
[193] (byte*) bitmap_clear::bitmap#2 ← phi( bitmap_clear::@1/(byte*) bitmap_clear::bitmap#3 bitmap_clear::@2/(byte*) bitmap_clear::bitmap#1 )
[194] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[195] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2
[196] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2
[197] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2
[192] (byte) bitmap_clear::x#2 ← phi( bitmap_clear::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@2/(byte) bitmap_clear::x#1 )
[192] (byte*) bitmap_clear::bitmap#2 ← phi( bitmap_clear::@1/(byte*) bitmap_clear::bitmap#3 bitmap_clear::@2/(byte*) bitmap_clear::bitmap#1 )
[193] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[194] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2
[195] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2
[196] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2
to:bitmap_clear::@3
bitmap_clear::@3: scope:[bitmap_clear] from bitmap_clear::@2
[198] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4
[199] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1
[197] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4
[198] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1
to:bitmap_clear::@return
bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@3
[200] return
[199] return
to:@return
bitmap_init: scope:[bitmap_init] from main::@9
[201] phi()
[200] phi()
to:bitmap_init::@1
bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2
[202] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_init::@2/(byte) bitmap_init::x#1 )
[202] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte/word/signed word/dword/signed dword) 128 bitmap_init::@2/(byte) bitmap_init::bits#4 )
[203] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3
[204] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[205] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10
[201] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_init::@2/(byte) bitmap_init::x#1 )
[201] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte/word/signed word/dword/signed dword) 128 bitmap_init::@2/(byte) bitmap_init::bits#4 )
[202] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3
[203] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[204] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10
to:bitmap_init::@2
bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@10
[206] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@10/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte/word/signed word/dword/signed dword) 128 )
[207] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2
[208] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1
[205] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@10/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte/word/signed word/dword/signed dword) 128 )
[206] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2
[207] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1
to:bitmap_init::@3
bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4
[209] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#4 bitmap_init::@2/(const byte*) BITMAP#0 )
[209] (byte) bitmap_init::y#2 ← phi( bitmap_init::@4/(byte) bitmap_init::y#1 bitmap_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[210] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[211] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2
[212] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4
[213] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5
[214] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2
[215] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6
[216] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[217] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4
[208] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#4 bitmap_init::@2/(const byte*) BITMAP#0 )
[208] (byte) bitmap_init::y#2 ← phi( bitmap_init::@4/(byte) bitmap_init::y#1 bitmap_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[209] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[210] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2
[211] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4
[212] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5
[213] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2
[214] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6
[215] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[216] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4
to:bitmap_init::@7
bitmap_init::@7: scope:[bitmap_init] from bitmap_init::@3
[218] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8
[217] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8
to:bitmap_init::@4
bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@7
[219] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@7/(byte*) bitmap_init::yoffs#1 )
[220] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2
[221] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3
[218] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@7/(byte*) bitmap_init::yoffs#1 )
[219] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2
[220] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3
to:bitmap_init::@return
bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4
[222] return
[221] return
to:@return
bitmap_init::@10: scope:[bitmap_init] from bitmap_init::@1
[223] phi()
[222] phi()
to:bitmap_init::@2
fill: scope:[fill] from main::@8
[224] phi()
[223] phi()
to:fill::@1
fill::@1: scope:[fill] from fill fill::@1
[225] (byte*) fill::addr#2 ← phi( fill/(const byte*) SCREEN#0 fill::@1/(byte*) fill::addr#1 )
[226] *((byte*) fill::addr#2) ← (const byte) WHITE#0
[227] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[228] if((byte*) fill::addr#1!=(const byte*) fill::end#0) goto fill::@1
[224] (byte*) fill::addr#2 ← phi( fill/(const byte*) SCREEN#0 fill::@1/(byte*) fill::addr#1 )
[225] *((byte*) fill::addr#2) ← (const byte) WHITE#0
[226] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[227] if((byte*) fill::addr#1!=(const byte*) fill::end#0) goto fill::@1
to:fill::@return
fill::@return: scope:[fill] from fill::@1
[229] return
[228] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -274,7 +274,6 @@
(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte/signed byte/word/signed word/dword/signed dword) 3^>((word))(const byte*) SCREEN#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 $16 zp ZP_WORD:6 4.0
(word~) mul16s::$5 $5 zp ZP_WORD:2 20.0
(word~) mul16s::$6 $6 zp ZP_WORD:6 4.0
(label) mul16s::@1
(label) mul16s::@2
@ -477,7 +476,7 @@
(signed word) wrap_y::y#6 y zp ZP_WORD:6 203.0
(signed word) wrap_y::y#9 y zp ZP_WORD:6 24.0
zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 fill::addr#2 fill::addr#1 mul16s::$5 ]
zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 fill::addr#2 fill::addr#1 ]
zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#8 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
reg byte x [ bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ]
zp ZP_WORD:6 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#0 wrap_y::y#1 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$0 render_sine::$1 render_sine::$4 render_sine::$5 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 bitmap_plot::$3 bitmap_plot::plotter#1 sin16s_gen2::$6 sin16s_gen2::$8 mul16s::$6 mul16s::$16 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]

View File

@ -246,194 +246,193 @@ mul8su::@4: scope:[mul8su] from mul8su
[121] if((signed byte) mul8su::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8su::@1
to:mul8su::@2
mul8su::@2: scope:[mul8su] from mul8su::@4
[122] (byte~) mul8su::$5 ← > (word) mul8su::m#0
[123] (byte~) mul8su::$6 ← > (word) mul8su::m#0
[124] (byte~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0
[125] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte~) mul8su::$10
[122] (byte~) mul8su::$6 ← > (word) mul8su::m#0
[123] (byte~) mul8su::$10 ← (byte~) mul8su::$6 - ((byte))(const byte) mul8su::b#0
[124] (word) mul8su::m#1 ← (word) mul8su::m#0 hi= (byte~) mul8su::$10
to:mul8su::@1
mul8su::@1: scope:[mul8su] from mul8su::@2 mul8su::@4
[126] (word) mul8su::m#2 ← phi( mul8su::@2/(word) mul8su::m#1 mul8su::@4/(word) mul8su::m#0 )
[125] (word) mul8su::m#2 ← phi( mul8su::@2/(word) mul8su::m#1 mul8su::@4/(word) mul8su::m#0 )
to:mul8su::@return
mul8su::@return: scope:[mul8su] from mul8su::@1
[127] return
[126] return
to:@return
mul8u: scope:[mul8u] from mul8su mulu8_sel
[128] (byte) mul8u::a#6 ← phi( mul8su/(byte~) mul8u::a#8 mulu8_sel/(byte) mul8u::a#2 )
[128] (byte) mul8u::b#2 ← phi( mul8su/((byte))(const byte) mul8su::b#0 mulu8_sel/(byte) mul8u::b#1 )
[129] (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#2
[127] (byte) mul8u::a#6 ← phi( mul8su/(byte~) mul8u::a#8 mulu8_sel/(byte) mul8u::a#2 )
[127] (byte) mul8u::b#2 ← phi( mul8su/((byte))(const byte) mul8su::b#0 mulu8_sel/(byte) mul8u::b#1 )
[128] (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#2
to:mul8u::@1
mul8u::@1: scope:[mul8u] from mul8u mul8u::@4
[130] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 )
[130] (word) mul8u::res#2 ← phi( mul8u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u::@4/(word) mul8u::res#6 )
[130] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@4/(byte) mul8u::a#0 )
[131] if((byte) mul8u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2
[129] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 )
[129] (word) mul8u::res#2 ← phi( mul8u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u::@4/(word) mul8u::res#6 )
[129] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@4/(byte) mul8u::a#0 )
[130] if((byte) mul8u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2
to:mul8u::@return
mul8u::@return: scope:[mul8u] from mul8u::@1
[132] return
[131] return
to:@return
mul8u::@2: scope:[mul8u] from mul8u::@1
[133] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[134] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4
[132] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[133] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4
to:mul8u::@7
mul8u::@7: scope:[mul8u] from mul8u::@2
[135] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
[134] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
to:mul8u::@4
mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@7
[136] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@7/(word) mul8u::res#1 )
[137] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[138] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[135] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@7/(word) mul8u::res#1 )
[136] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[137] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:mul8u::@1
sin8s: scope:[sin8s] from sin8u_table::@1
[139] if((word) sin8s::x#2<(const word) PI_u4f12#0) goto sin8s::@1
[138] if((word) sin8s::x#2<(const word) PI_u4f12#0) goto sin8s::@1
to:sin8s::@5
sin8s::@5: scope:[sin8s] from sin8s
[140] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12#0
[139] (word) sin8s::x#0 ← (word) sin8s::x#2 - (const word) PI_u4f12#0
to:sin8s::@1
sin8s::@1: scope:[sin8s] from sin8s sin8s::@5
[141] (byte) sin8s::isUpper#10 ← phi( sin8s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s::@5/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[141] (word) sin8s::x#4 ← phi( sin8s/(word) sin8s::x#2 sin8s::@5/(word) sin8s::x#0 )
[142] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2
[140] (byte) sin8s::isUpper#10 ← phi( sin8s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s::@5/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[140] (word) sin8s::x#4 ← phi( sin8s/(word) sin8s::x#2 sin8s::@5/(word) sin8s::x#0 )
[141] if((word) sin8s::x#4<(const word) PI_HALF_u4f12#0) goto sin8s::@2
to:sin8s::@6
sin8s::@6: scope:[sin8s] from sin8s::@1
[143] (word) sin8s::x#1 ← (const word) PI_u4f12#0 - (word) sin8s::x#4
[142] (word) sin8s::x#1 ← (const word) PI_u4f12#0 - (word) sin8s::x#4
to:sin8s::@2
sin8s::@2: scope:[sin8s] from sin8s::@1 sin8s::@6
[144] (word) sin8s::x#6 ← phi( sin8s::@1/(word) sin8s::x#4 sin8s::@6/(word) sin8s::x#1 )
[145] (word~) sin8s::$6 ← (word) sin8s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[146] (byte) sin8s::x1#0 ← > (word~) sin8s::$6
[147] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0
[148] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0
[149] call mulu8_sel
[150] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12
[143] (word) sin8s::x#6 ← phi( sin8s::@1/(word) sin8s::x#4 sin8s::@6/(word) sin8s::x#1 )
[144] (word~) sin8s::$6 ← (word) sin8s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[145] (byte) sin8s::x1#0 ← > (word~) sin8s::$6
[146] (byte) mulu8_sel::v1#0 ← (byte) sin8s::x1#0
[147] (byte) mulu8_sel::v2#0 ← (byte) sin8s::x1#0
[148] call mulu8_sel
[149] (byte) mulu8_sel::return#0 ← (byte) mulu8_sel::return#12
to:sin8s::@10
sin8s::@10: scope:[sin8s] from sin8s::@2
[151] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0
[152] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0
[153] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0
[154] call mulu8_sel
[155] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12
[150] (byte) sin8s::x2#0 ← (byte) mulu8_sel::return#0
[151] (byte) mulu8_sel::v1#1 ← (byte) sin8s::x2#0
[152] (byte) mulu8_sel::v2#1 ← (byte) sin8s::x1#0
[153] call mulu8_sel
[154] (byte) mulu8_sel::return#1 ← (byte) mulu8_sel::return#12
to:sin8s::@11
sin8s::@11: scope:[sin8s] from sin8s::@10
[156] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1
[157] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0
[158] call mulu8_sel
[159] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12
[155] (byte) sin8s::x3#0 ← (byte) mulu8_sel::return#1
[156] (byte) mulu8_sel::v1#2 ← (byte) sin8s::x3#0
[157] call mulu8_sel
[158] (byte) mulu8_sel::return#2 ← (byte) mulu8_sel::return#12
to:sin8s::@12
sin8s::@12: scope:[sin8s] from sin8s::@11
[160] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2
[161] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0
[162] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0
[163] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0
[164] call mulu8_sel
[165] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12
[159] (byte) sin8s::x3_6#0 ← (byte) mulu8_sel::return#2
[160] (byte) sin8s::usinx#0 ← (byte) sin8s::x1#0 - (byte) sin8s::x3_6#0
[161] (byte) mulu8_sel::v1#3 ← (byte) sin8s::x3#0
[162] (byte) mulu8_sel::v2#3 ← (byte) sin8s::x1#0
[163] call mulu8_sel
[164] (byte) mulu8_sel::return#10 ← (byte) mulu8_sel::return#12
to:sin8s::@13
sin8s::@13: scope:[sin8s] from sin8s::@12
[166] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10
[167] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0
[168] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0
[169] call mulu8_sel
[170] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12
[165] (byte) sin8s::x4#0 ← (byte) mulu8_sel::return#10
[166] (byte) mulu8_sel::v1#4 ← (byte) sin8s::x4#0
[167] (byte) mulu8_sel::v2#4 ← (byte) sin8s::x1#0
[168] call mulu8_sel
[169] (byte) mulu8_sel::return#11 ← (byte) mulu8_sel::return#12
to:sin8s::@14
sin8s::@14: scope:[sin8s] from sin8s::@13
[171] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11
[172] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[173] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0
[174] if((byte) sin8s::usinx#1<(byte/word/signed word/dword/signed dword) 128) goto sin8s::@3
[170] (byte) sin8s::x5#0 ← (byte) mulu8_sel::return#11
[171] (byte) sin8s::x5_128#0 ← (byte) sin8s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[172] (byte) sin8s::usinx#1 ← (byte) sin8s::usinx#0 + (byte) sin8s::x5_128#0
[173] if((byte) sin8s::usinx#1<(byte/word/signed word/dword/signed dword) 128) goto sin8s::@3
to:sin8s::@7
sin8s::@7: scope:[sin8s] from sin8s::@14
[175] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1
[174] (byte) sin8s::usinx#2 ← -- (byte) sin8s::usinx#1
to:sin8s::@3
sin8s::@3: scope:[sin8s] from sin8s::@14 sin8s::@7
[176] (byte) sin8s::usinx#4 ← phi( sin8s::@14/(byte) sin8s::usinx#1 sin8s::@7/(byte) sin8s::usinx#2 )
[177] if((byte) sin8s::isUpper#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin8s::@18
[175] (byte) sin8s::usinx#4 ← phi( sin8s::@14/(byte) sin8s::usinx#1 sin8s::@7/(byte) sin8s::usinx#2 )
[176] if((byte) sin8s::isUpper#10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin8s::@18
to:sin8s::@8
sin8s::@8: scope:[sin8s] from sin8s::@3
[178] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4
[177] (signed byte) sin8s::sinx#1 ← - (signed byte)(byte) sin8s::usinx#4
to:sin8s::@4
sin8s::@4: scope:[sin8s] from sin8s::@18 sin8s::@8
[179] (signed byte) sin8s::return#0 ← phi( sin8s::@18/(signed byte~) sin8s::return#5 sin8s::@8/(signed byte) sin8s::sinx#1 )
[178] (signed byte) sin8s::return#0 ← phi( sin8s::@18/(signed byte~) sin8s::return#5 sin8s::@8/(signed byte) sin8s::sinx#1 )
to:sin8s::@return
sin8s::@return: scope:[sin8s] from sin8s::@4
[180] return
[179] return
to:@return
sin8s::@18: scope:[sin8s] from sin8s::@3
[181] (signed byte~) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4
[180] (signed byte~) sin8s::return#5 ← (signed byte)(byte) sin8s::usinx#4
to:sin8s::@4
mulu8_sel: scope:[mulu8_sel] from sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@13 sin8s::@2
[182] (byte) mulu8_sel::select#5 ← phi( sin8s::@10/(byte/signed byte/word/signed word/dword/signed dword) 1 sin8s::@11/(byte/signed byte/word/signed word/dword/signed dword) 1 sin8s::@12/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s::@13/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[182] (byte) mulu8_sel::v2#5 ← phi( sin8s::@10/(byte) mulu8_sel::v2#1 sin8s::@11/(const byte) sin8s::DIV_6#0 sin8s::@12/(byte) mulu8_sel::v2#3 sin8s::@13/(byte) mulu8_sel::v2#4 sin8s::@2/(byte) mulu8_sel::v2#0 )
[182] (byte) mulu8_sel::v1#5 ← phi( sin8s::@10/(byte) mulu8_sel::v1#1 sin8s::@11/(byte) mulu8_sel::v1#2 sin8s::@12/(byte) mulu8_sel::v1#3 sin8s::@13/(byte) mulu8_sel::v1#4 sin8s::@2/(byte) mulu8_sel::v1#0 )
[183] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5
[184] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5
[185] call mul8u
[186] (word) mul8u::return#3 ← (word) mul8u::res#2
[181] (byte) mulu8_sel::select#5 ← phi( sin8s::@10/(byte/signed byte/word/signed word/dword/signed dword) 1 sin8s::@11/(byte/signed byte/word/signed word/dword/signed dword) 1 sin8s::@12/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s::@13/(byte/signed byte/word/signed word/dword/signed dword) 0 sin8s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[181] (byte) mulu8_sel::v2#5 ← phi( sin8s::@10/(byte) mulu8_sel::v2#1 sin8s::@11/(const byte) sin8s::DIV_6#0 sin8s::@12/(byte) mulu8_sel::v2#3 sin8s::@13/(byte) mulu8_sel::v2#4 sin8s::@2/(byte) mulu8_sel::v2#0 )
[181] (byte) mulu8_sel::v1#5 ← phi( sin8s::@10/(byte) mulu8_sel::v1#1 sin8s::@11/(byte) mulu8_sel::v1#2 sin8s::@12/(byte) mulu8_sel::v1#3 sin8s::@13/(byte) mulu8_sel::v1#4 sin8s::@2/(byte) mulu8_sel::v1#0 )
[182] (byte) mul8u::a#2 ← (byte) mulu8_sel::v1#5
[183] (byte) mul8u::b#1 ← (byte) mulu8_sel::v2#5
[184] call mul8u
[185] (word) mul8u::return#3 ← (word) mul8u::res#2
to:mulu8_sel::@2
mulu8_sel::@2: scope:[mulu8_sel] from mulu8_sel
[187] (word~) mulu8_sel::$0 ← (word) mul8u::return#3
[188] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5
[189] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1
[186] (word~) mulu8_sel::$0 ← (word) mul8u::return#3
[187] (word~) mulu8_sel::$1 ← (word~) mulu8_sel::$0 << (byte) mulu8_sel::select#5
[188] (byte) mulu8_sel::return#12 ← > (word~) mulu8_sel::$1
to:mulu8_sel::@return
mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel::@2
[190] return
[189] return
to:@return
div16u: scope:[div16u] from sin8u_table
[191] phi()
[192] call divr16u
[193] (word) divr16u::return#2 ← (word) divr16u::return#0
[190] phi()
[191] call divr16u
[192] (word) divr16u::return#2 ← (word) divr16u::return#0
to:div16u::@2
div16u::@2: scope:[div16u] from div16u
[194] (word) div16u::return#0 ← (word) divr16u::return#2
[193] (word) div16u::return#0 ← (word) divr16u::return#2
to:div16u::@return
div16u::@return: scope:[div16u] from div16u::@2
[195] return
[194] return
to:@return
divr16u: scope:[divr16u] from div16u
[196] phi()
[195] phi()
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[197] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[197] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[197] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12#0 divr16u::@3/(word) divr16u::dividend#0 )
[197] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 )
[198] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1
[199] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2
[200] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[201] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
[196] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[196] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[196] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12#0 divr16u::@3/(word) divr16u::dividend#0 )
[196] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 )
[197] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1
[198] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2
[199] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[200] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1
[202] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
[201] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[203] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[204] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[205] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[206] if((word) divr16u::rem#5<(const word) main::tabsize#0) goto divr16u::@3
[202] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[203] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[204] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[205] if((word) divr16u::rem#5<(const word) main::tabsize#0) goto divr16u::@3
to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2
[207] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[208] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize#0
[206] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[207] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize#0
to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[209] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[209] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 )
[210] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[211] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
[208] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[208] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 )
[209] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[210] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
to:divr16u::@6
divr16u::@6: scope:[divr16u] from divr16u::@3
[212] (word) rem16u#1 ← (word) divr16u::rem#10
[211] (word) rem16u#1 ← (word) divr16u::rem#10
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6
[213] return
[212] return
to:@return
print_cls: scope:[print_cls] from main
[214] phi()
[213] phi()
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[215] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 )
[216] *((byte*) print_cls::sc#2) ← (byte) ' '
[217] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[218] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
[214] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 )
[215] *((byte*) print_cls::sc#2) ← (byte) ' '
[216] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[217] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[219] return
[218] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -58,7 +58,6 @@
(const word) main::tabsize#0 tabsize = (byte/signed byte/word/signed word/dword/signed dword) 20
(signed word()) mul8su((signed byte) mul8su::a , (byte) mul8su::b)
(byte~) mul8su::$10 reg byte a 4.0
(byte~) mul8su::$5 reg byte a 20.0
(byte~) mul8su::$6 reg byte a 4.0
(label) mul8su::@1
(label) mul8su::@2
@ -351,7 +350,6 @@ reg byte a [ sin8u_table::$21 ]
reg byte x [ sin8u_table::sinx_tr#0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
reg byte a [ mul8su::$5 ]
reg byte a [ mul8su::$6 ]
reg byte a [ mul8su::$10 ]
reg byte a [ mul8u::$1 ]

View File

@ -4,9 +4,7 @@
.label print_line_cursor = 6
.label print_char_cursor = 8
main: {
.label _1 = 6
.label _2 = $a
.label _4 = 6
.label _5 = $a
.label _15 = $a
.label _19 = $a
@ -34,10 +32,6 @@ main: {
lda #>$12345678>>$10
sta dw+3
b1:
lda dw+2
sta _1
lda dw+3
sta _1+1
lda dw+2
sta _2
lda dw+3
@ -57,11 +51,6 @@ main: {
sta dw2+2
lda _32+1
sta dw2+3
// Test set/get high word of dword
lda dw2
sta _4
lda dw2+1
sta _4+1
lda dw
sta _5
lda dw+1

View File

@ -15,151 +15,149 @@ main::@1: scope:[main] from main main::@18
[6] (byte*) print_line_cursor#19 ← phi( main::@18/(byte*) print_line_cursor#1 main/((byte*))(word/signed word/dword/signed dword) 1024 )
[6] (byte*) print_char_cursor#69 ← phi( main::@18/(byte*~) print_char_cursor#72 main/((byte*))(word/signed word/dword/signed dword) 1024 )
[6] (dword) main::dw#10 ← phi( main::@18/(dword) main::dw#1 main/(dword/signed dword) 305419896 )
[7] (word~) main::$1 ← > (dword) main::dw#10
[8] (word~) main::$2 ← > (dword) main::dw#10
[9] (word/signed dword/dword~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369
[10] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word/signed dword/dword~) main::$32
[11] (word~) main::$4 ← < (dword) main::dw2#1
[12] (word~) main::$5 ← < (dword) main::dw#10
[13] (word/signed dword/dword~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369
[14] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33
[15] (dword) print_dword::dw#0 ← (dword) main::dw2#10
[16] call print_dword
[7] (word~) main::$2 ← > (dword) main::dw#10
[8] (word/signed dword/dword~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369
[9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word/signed dword/dword~) main::$32
[10] (word~) main::$5 ← < (dword) main::dw#10
[11] (word/signed dword/dword~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369
[12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word/signed dword/dword~) main::$33
[13] (dword) print_dword::dw#0 ← (dword) main::dw2#10
[14] call print_dword
to:main::@4
main::@4: scope:[main] from main::@1
[17] phi()
[18] call print_char
[15] phi()
[16] call print_char
to:main::@5
main::@5: scope:[main] from main::@4
[19] (word) print_word::w#2 ← > (dword) main::dw2#10
[20] call print_word
[17] (word) print_word::w#2 ← > (dword) main::dw2#10
[18] call print_word
to:main::@6
main::@6: scope:[main] from main::@5
[21] phi()
[22] call print_char
[19] phi()
[20] call print_char
to:main::@7
main::@7: scope:[main] from main::@6
[23] (word) print_word::w#3 ← < (dword) main::dw2#10
[24] call print_word
[21] (word) print_word::w#3 ← < (dword) main::dw2#10
[22] call print_word
to:main::@8
main::@8: scope:[main] from main::@7
[25] phi()
[26] call print_char
[23] phi()
[24] call print_char
to:main::@9
main::@9: scope:[main] from main::@8
[27] (word~) main::$15 ← > (dword) main::dw2#10
[28] (byte) print_byte::b#2 ← > (word~) main::$15
[29] call print_byte
[25] (word~) main::$15 ← > (dword) main::dw2#10
[26] (byte) print_byte::b#2 ← > (word~) main::$15
[27] call print_byte
to:main::@10
main::@10: scope:[main] from main::@9
[30] phi()
[31] call print_char
[28] phi()
[29] call print_char
to:main::@11
main::@11: scope:[main] from main::@10
[32] (word~) main::$19 ← > (dword) main::dw2#10
[33] (byte) print_byte::b#3 ← < (word~) main::$19
[34] call print_byte
[30] (word~) main::$19 ← > (dword) main::dw2#10
[31] (byte) print_byte::b#3 ← < (word~) main::$19
[32] call print_byte
to:main::@12
main::@12: scope:[main] from main::@11
[35] phi()
[36] call print_char
[33] phi()
[34] call print_char
to:main::@13
main::@13: scope:[main] from main::@12
[37] (word~) main::$23 ← < (dword) main::dw2#10
[38] (byte) print_byte::b#4 ← > (word~) main::$23
[39] call print_byte
[35] (word~) main::$23 ← < (dword) main::dw2#10
[36] (byte) print_byte::b#4 ← > (word~) main::$23
[37] call print_byte
to:main::@14
main::@14: scope:[main] from main::@13
[40] phi()
[41] call print_char
[38] phi()
[39] call print_char
to:main::@15
main::@15: scope:[main] from main::@14
[42] (word~) main::$27 ← < (dword) main::dw2#10
[43] (byte) print_byte::b#5 ← < (word~) main::$27
[44] call print_byte
[40] (word~) main::$27 ← < (dword) main::dw2#10
[41] (byte) print_byte::b#5 ← < (word~) main::$27
[42] call print_byte
to:main::@16
main::@16: scope:[main] from main::@15
[45] phi()
[46] call print_ln
[43] phi()
[44] call print_ln
to:main::@17
main::@17: scope:[main] from main::@16
[47] (dword) main::dw#1 ← ++ (dword) main::dw#10
[48] if((dword) main::dw#1!=(dword/signed dword) 305419920) goto main::@18
[45] (dword) main::dw#1 ← ++ (dword) main::dw#10
[46] if((dword) main::dw#1!=(dword/signed dword) 305419920) goto main::@18
to:main::@return
main::@return: scope:[main] from main::@17
[49] return
[47] return
to:@return
main::@18: scope:[main] from main::@17
[50] (byte*~) print_char_cursor#72 ← (byte*) print_line_cursor#1
[48] (byte*~) print_char_cursor#72 ← (byte*) print_line_cursor#1
to:main::@1
print_ln: scope:[print_ln] from main::@16
[51] phi()
[49] phi()
to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
[52] (byte*) print_line_cursor#9 ← phi( print_ln/(byte*) print_line_cursor#19 print_ln::@1/(byte*) print_line_cursor#1 )
[53] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) 40
[54] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1
[50] (byte*) print_line_cursor#9 ← phi( print_ln/(byte*) print_line_cursor#19 print_ln::@1/(byte*) print_line_cursor#1 )
[51] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) 40
[52] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1
to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@1
[55] return
[53] return
to:@return
print_byte: scope:[print_byte] from main::@11 main::@13 main::@15 main::@9 print_word print_word::@1
[56] (byte*) print_char_cursor#67 ← phi( main::@11/(byte*) print_char_cursor#12 main::@13/(byte*) print_char_cursor#12 main::@15/(byte*) print_char_cursor#12 main::@9/(byte*) print_char_cursor#12 print_word/(byte*) print_char_cursor#65 print_word::@1/(byte*) print_char_cursor#12 )
[56] (byte) print_byte::b#6 ← phi( main::@11/(byte) print_byte::b#3 main::@13/(byte) print_byte::b#4 main::@15/(byte) print_byte::b#5 main::@9/(byte) print_byte::b#2 print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
[57] (byte~) print_byte::$0 ← (byte) print_byte::b#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[58] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0)
[59] call print_char
[54] (byte*) print_char_cursor#67 ← phi( main::@11/(byte*) print_char_cursor#12 main::@13/(byte*) print_char_cursor#12 main::@15/(byte*) print_char_cursor#12 main::@9/(byte*) print_char_cursor#12 print_word/(byte*) print_char_cursor#65 print_word::@1/(byte*) print_char_cursor#12 )
[54] (byte) print_byte::b#6 ← phi( main::@11/(byte) print_byte::b#3 main::@13/(byte) print_byte::b#4 main::@15/(byte) print_byte::b#5 main::@9/(byte) print_byte::b#2 print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
[55] (byte~) print_byte::$0 ← (byte) print_byte::b#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[56] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0)
[57] call print_char
to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte
[60] (byte~) print_byte::$2 ← (byte) print_byte::b#6 & (byte/signed byte/word/signed word/dword/signed dword) 15
[61] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2)
[62] call print_char
[58] (byte~) print_byte::$2 ← (byte) print_byte::b#6 & (byte/signed byte/word/signed word/dword/signed dword) 15
[59] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2)
[60] call print_char
to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1
[63] return
[61] return
to:@return
print_char: scope:[print_char] from main::@10 main::@12 main::@14 main::@4 main::@6 main::@8 print_byte print_byte::@1
[64] (byte*) print_char_cursor#44 ← phi( main::@10/(byte*) print_char_cursor#12 main::@12/(byte*) print_char_cursor#12 main::@14/(byte*) print_char_cursor#12 main::@4/(byte*) print_char_cursor#12 main::@6/(byte*) print_char_cursor#12 main::@8/(byte*) print_char_cursor#12 print_byte/(byte*) print_char_cursor#67 print_byte::@1/(byte*) print_char_cursor#12 )
[64] (byte) print_char::ch#8 ← phi( main::@10/(byte) ' ' main::@12/(byte) ' ' main::@14/(byte) ' ' main::@4/(byte) ' ' main::@6/(byte) ' ' main::@8/(byte) ' ' print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
[65] *((byte*) print_char_cursor#44) ← (byte) print_char::ch#8
[66] (byte*) print_char_cursor#12 ← ++ (byte*) print_char_cursor#44
[62] (byte*) print_char_cursor#44 ← phi( main::@10/(byte*) print_char_cursor#12 main::@12/(byte*) print_char_cursor#12 main::@14/(byte*) print_char_cursor#12 main::@4/(byte*) print_char_cursor#12 main::@6/(byte*) print_char_cursor#12 main::@8/(byte*) print_char_cursor#12 print_byte/(byte*) print_char_cursor#67 print_byte::@1/(byte*) print_char_cursor#12 )
[62] (byte) print_char::ch#8 ← phi( main::@10/(byte) ' ' main::@12/(byte) ' ' main::@14/(byte) ' ' main::@4/(byte) ' ' main::@6/(byte) ' ' main::@8/(byte) ' ' print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
[63] *((byte*) print_char_cursor#44) ← (byte) print_char::ch#8
[64] (byte*) print_char_cursor#12 ← ++ (byte*) print_char_cursor#44
to:print_char::@return
print_char::@return: scope:[print_char] from print_char
[67] return
[65] return
to:@return
print_word: scope:[print_word] from main::@5 main::@7 print_dword print_dword::@1
[68] (byte*) print_char_cursor#65 ← phi( main::@5/(byte*) print_char_cursor#12 main::@7/(byte*) print_char_cursor#12 print_dword/(byte*) print_char_cursor#69 print_dword::@1/(byte*) print_char_cursor#12 )
[68] (word) print_word::w#4 ← phi( main::@5/(word) print_word::w#2 main::@7/(word) print_word::w#3 print_dword/(word) print_word::w#0 print_dword::@1/(word) print_word::w#1 )
[69] (byte) print_byte::b#0 ← > (word) print_word::w#4
[70] call print_byte
[66] (byte*) print_char_cursor#65 ← phi( main::@5/(byte*) print_char_cursor#12 main::@7/(byte*) print_char_cursor#12 print_dword/(byte*) print_char_cursor#69 print_dword::@1/(byte*) print_char_cursor#12 )
[66] (word) print_word::w#4 ← phi( main::@5/(word) print_word::w#2 main::@7/(word) print_word::w#3 print_dword/(word) print_word::w#0 print_dword::@1/(word) print_word::w#1 )
[67] (byte) print_byte::b#0 ← > (word) print_word::w#4
[68] call print_byte
to:print_word::@1
print_word::@1: scope:[print_word] from print_word
[71] (byte) print_byte::b#1 ← < (word) print_word::w#4
[72] call print_byte
[69] (byte) print_byte::b#1 ← < (word) print_word::w#4
[70] call print_byte
to:print_word::@return
print_word::@return: scope:[print_word] from print_word::@1
[73] return
[71] return
to:@return
print_dword: scope:[print_dword] from main::@1
[74] (word) print_word::w#0 ← > (dword) print_dword::dw#0
[75] call print_word
[72] (word) print_word::w#0 ← > (dword) print_dword::dw#0
[73] call print_word
to:print_dword::@1
print_dword::@1: scope:[print_dword] from print_dword
[76] (word) print_word::w#1 ← < (dword) print_dword::dw#0
[77] call print_word
[74] (word) print_word::w#1 ← < (dword) print_dword::dw#0
[75] call print_word
to:print_dword::@return
print_dword::@return: scope:[print_dword] from print_dword::@1
[78] return
[76] return
to:@return
print_cls: scope:[print_cls] from main
[79] phi()
[77] phi()
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[80] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 )
[81] *((byte*) print_cls::sc#2) ← (byte) ' '
[82] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[83] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
[78] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 )
[79] *((byte*) print_cls::sc#2) ← (byte) ' '
[80] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[81] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[84] return
[82] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,6 @@
(label) @begin
(label) @end
(void()) main()
(word~) main::$1 $1 zp ZP_WORD:6 110.0
(word~) main::$15 $15 zp ZP_WORD:10 22.0
(word~) main::$19 $19 zp ZP_WORD:10 22.0
(word~) main::$2 $2 zp ZP_WORD:10 22.0
@ -10,7 +9,6 @@
(word~) main::$27 $27 zp ZP_WORD:10 22.0
(word/signed dword/dword~) main::$32 $32 zp ZP_WORD:10 22.0
(word/signed dword/dword~) main::$33 $33 zp ZP_WORD:10 22.0
(word~) main::$4 $4 zp ZP_WORD:6 110.0
(word~) main::$5 $5 zp ZP_WORD:10 22.0
(label) main::@1
(label) main::@10
@ -31,9 +29,9 @@
(label) main::@return
(dword) main::dw
(dword) main::dw#1 dw zp ZP_DWORD:2 11.0
(dword) main::dw#10 dw zp ZP_DWORD:2 1.6097560975609757
(dword) main::dw#10 dw zp ZP_DWORD:2 1.4102564102564101
(dword) main::dw2
(dword) main::dw2#1 dw2 zp ZP_DWORD:12 8.25
(dword) main::dw2#1 dw2 zp ZP_DWORD:12 7.333333333333333
(dword) main::dw2#10 dw2 zp ZP_DWORD:12 3.142857142857143
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
@ -59,7 +57,7 @@
(byte*) print_char_cursor#44 print_char_cursor zp ZP_WORD:8 37.0
(byte*) print_char_cursor#65 print_char_cursor zp ZP_WORD:8 14.0
(byte*) print_char_cursor#67 print_char_cursor zp ZP_WORD:8 16.666666666666664
(byte*) print_char_cursor#69 print_char_cursor zp ZP_WORD:8 1.1818181818181819
(byte*) print_char_cursor#69 print_char_cursor zp ZP_WORD:8 1.4444444444444446
(byte*~) print_char_cursor#72 print_char_cursor zp ZP_WORD:8 22.0
(void()) print_cls()
(label) print_cls::@1
@ -76,7 +74,7 @@
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:6 46.42857142857143
(byte*) print_line_cursor#19 print_line_cursor zp ZP_WORD:6 0.3170731707317073
(byte*) print_line_cursor#19 print_line_cursor zp ZP_WORD:6 0.3333333333333333
(byte*) print_line_cursor#9 print_line_cursor zp ZP_WORD:6 204.0
(void()) print_ln()
(label) print_ln::@1
@ -93,7 +91,7 @@
(word) print_word::w#4 w zp ZP_WORD:10 9.999999999999998
zp ZP_DWORD:2 [ main::dw#10 main::dw#1 ]
zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 main::$1 main::$4 ]
zp ZP_WORD:6 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ]
reg byte x [ print_byte::b#6 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ]
zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#67 print_char_cursor#12 print_char_cursor#65 print_char_cursor#69 print_char_cursor#72 ]

View File

@ -341,9 +341,7 @@ print_sword: {
// Fixes offsets introduced by using unsigned multiplication
// mulf16s(signed word zeropage(3) a, signed word zeropage(5) b)
mulf16s: {
.label _5 = 3
.label _6 = 9
.label _11 = 3
.label _12 = 9
.label _16 = 9
.label _17 = 9
@ -363,10 +361,6 @@ mulf16s: {
lda a+1
bpl b1
lda m+2
sta _5
lda m+3
sta _5+1
lda m+2
sta _6
lda m+3
sta _6+1
@ -385,10 +379,6 @@ mulf16s: {
lda b+1
bpl b2
lda m+2
sta _11
lda m+3
sta _11+1
lda m+2
sta _12
lda m+3
sta _12+1
@ -530,9 +520,7 @@ mulf16u: {
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage(3) a, signed word zeropage(5) b)
mul16s: {
.label _5 = 3
.label _6 = 9
.label _11 = 3
.label _12 = 9
.label _16 = 9
.label _17 = 9
@ -552,10 +540,6 @@ mul16s: {
lda a+1
bpl b1
lda m+2
sta _5
lda m+3
sta _5+1
lda m+2
sta _6
lda m+3
sta _6+1
@ -574,10 +558,6 @@ mul16s: {
lda b+1
bpl b2
lda m+2
sta _11
lda m+3
sta _11+1
lda m+2
sta _12
lda m+3
sta _12+1

View File

@ -288,336 +288,332 @@ mulf16s::@6: scope:[mulf16s] from mulf16s
[141] if((signed word) mulf16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf16s::@1
to:mulf16s::@3
mulf16s::@3: scope:[mulf16s] from mulf16s::@6
[142] (word~) mulf16s::$5 ← > (dword) mulf16s::m#0
[143] (word~) mulf16s::$6 ← > (dword) mulf16s::m#0
[144] (word~) mulf16s::$16 ← (word~) mulf16s::$6 - (word)(signed word) mulf16s::b#0
[145] (dword) mulf16s::m#1 ← (dword) mulf16s::m#0 hi= (word~) mulf16s::$16
[142] (word~) mulf16s::$6 ← > (dword) mulf16s::m#0
[143] (word~) mulf16s::$16 ← (word~) mulf16s::$6 - (word)(signed word) mulf16s::b#0
[144] (dword) mulf16s::m#1 ← (dword) mulf16s::m#0 hi= (word~) mulf16s::$16
to:mulf16s::@1
mulf16s::@1: scope:[mulf16s] from mulf16s::@3 mulf16s::@6
[146] (dword) mulf16s::m#5 ← phi( mulf16s::@3/(dword) mulf16s::m#1 mulf16s::@6/(dword) mulf16s::m#0 )
[147] if((signed word) mulf16s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf16s::@2
[145] (dword) mulf16s::m#5 ← phi( mulf16s::@3/(dword) mulf16s::m#1 mulf16s::@6/(dword) mulf16s::m#0 )
[146] if((signed word) mulf16s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf16s::@2
to:mulf16s::@4
mulf16s::@4: scope:[mulf16s] from mulf16s::@1
[148] (word~) mulf16s::$11 ← > (dword) mulf16s::m#5
[149] (word~) mulf16s::$12 ← > (dword) mulf16s::m#5
[150] (word~) mulf16s::$17 ← (word~) mulf16s::$12 - (word)(signed word) mulf16s::a#0
[151] (dword) mulf16s::m#2 ← (dword) mulf16s::m#5 hi= (word~) mulf16s::$17
[147] (word~) mulf16s::$12 ← > (dword) mulf16s::m#5
[148] (word~) mulf16s::$17 ← (word~) mulf16s::$12 - (word)(signed word) mulf16s::a#0
[149] (dword) mulf16s::m#2 ← (dword) mulf16s::m#5 hi= (word~) mulf16s::$17
to:mulf16s::@2
mulf16s::@2: scope:[mulf16s] from mulf16s::@1 mulf16s::@4
[152] (dword) mulf16s::m#4 ← phi( mulf16s::@1/(dword) mulf16s::m#5 mulf16s::@4/(dword) mulf16s::m#2 )
[153] (signed dword) mulf16s::return#0 ← ((signed dword)) (dword) mulf16s::m#4
[150] (dword) mulf16s::m#4 ← phi( mulf16s::@1/(dword) mulf16s::m#5 mulf16s::@4/(dword) mulf16s::m#2 )
[151] (signed dword) mulf16s::return#0 ← ((signed dword)) (dword) mulf16s::m#4
to:mulf16s::@return
mulf16s::@return: scope:[mulf16s] from mulf16s::@2
[154] return
[152] return
to:@return
mulf16u: scope:[mulf16u] from mul16u_compare::@14 mulf16s
[155] (word) mulf16u::b#2 ← phi( mul16u_compare::@14/(word) mulf16u::b#1 mulf16s/(word~) mulf16u::b#4 )
[155] (word) mulf16u::a#2 ← phi( mul16u_compare::@14/(word) mulf16u::a#1 mulf16s/(word~) mulf16u::a#4 )
[156] *((const word*) mulf16u::memA#0) ← (word) mulf16u::a#2
[157] *((const word*) mulf16u::memB#0) ← (word) mulf16u::b#2
[153] (word) mulf16u::b#2 ← phi( mul16u_compare::@14/(word) mulf16u::b#1 mulf16s/(word~) mulf16u::b#4 )
[153] (word) mulf16u::a#2 ← phi( mul16u_compare::@14/(word) mulf16u::a#1 mulf16s/(word~) mulf16u::a#4 )
[154] *((const word*) mulf16u::memA#0) ← (word) mulf16u::a#2
[155] *((const word*) mulf16u::memB#0) ← (word) mulf16u::b#2
asm { ldamemA stasm1a+1 stasm3a+1 stasm5a+1 stasm7a+1 eor#$ff stasm2a+1 stasm4a+1 stasm6a+1 stasm8a+1 ldamemA+1 stasm1b+1 stasm3b+1 stasm5b+1 stasm7b+1 eor#$ff stasm2b+1 stasm4b+1 stasm6b+1 stasm8b+1 ldxmemB sec sm1a: ldamulf_sqr1_lo,x sm2a: sbcmulf_sqr2_lo,x stamemR+0 sm3a: ldamulf_sqr1_hi,x sm4a: sbcmulf_sqr2_hi,x sta_AA+1 sec sm1b: ldamulf_sqr1_lo,x sm2b: sbcmulf_sqr2_lo,x sta_cc+1 sm3b: ldamulf_sqr1_hi,x sm4b: sbcmulf_sqr2_hi,x sta_CC+1 ldxmemB+1 sec sm5a: ldamulf_sqr1_lo,x sm6a: sbcmulf_sqr2_lo,x sta_bb+1 sm7a: ldamulf_sqr1_hi,x sm8a: sbcmulf_sqr2_hi,x sta_BB+1 sec sm5b: ldamulf_sqr1_lo,x sm6b: sbcmulf_sqr2_lo,x sta_dd+1 sm7b: ldamulf_sqr1_hi,x sm8b: sbcmulf_sqr2_hi,x stamemR+3 clc _AA: lda#0 _bb: adc#0 stamemR+1 _BB: lda#0 _CC: adc#0 stamemR+2 bcc!+ incmemR+3 clc !: _cc: lda#0 adcmemR+1 stamemR+1 _dd: lda#0 adcmemR+2 stamemR+2 bcc!+ incmemR+3 !: }
[159] (dword) mulf16u::return#0 ← *((const dword*) mulf16u::memR#0)
[157] (dword) mulf16u::return#0 ← *((const dword*) mulf16u::memR#0)
to:mulf16u::@return
mulf16u::@return: scope:[mulf16u] from mulf16u
[160] return
[158] return
to:@return
mul16s: scope:[mul16s] from mul16s_compare::@13
[161] (word~) mul16u::b#3 ← (word)(signed word) mul16s::b#0
[162] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#0
[163] call mul16u
[164] (dword) mul16u::return#2 ← (dword) mul16u::res#2
[159] (word~) mul16u::b#3 ← (word)(signed word) mul16s::b#0
[160] (word~) mul16u::a#8 ← (word)(signed word) mul16s::a#0
[161] call mul16u
[162] (dword) mul16u::return#2 ← (dword) mul16u::res#2
to:mul16s::@6
mul16s::@6: scope:[mul16s] from mul16s
[165] (dword) mul16s::m#0 ← (dword) mul16u::return#2
[166] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1
[163] (dword) mul16s::m#0 ← (dword) mul16u::return#2
[164] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1
to:mul16s::@3
mul16s::@3: scope:[mul16s] from mul16s::@6
[167] (word~) mul16s::$5 ← > (dword) mul16s::m#0
[168] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[169] (word~) mul16s::$16 ← (word~) mul16s::$6 - (word)(signed word) mul16s::b#0
[170] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
[165] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[166] (word~) mul16s::$16 ← (word~) mul16s::$6 - (word)(signed word) mul16s::b#0
[167] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
to:mul16s::@1
mul16s::@1: scope:[mul16s] from mul16s::@3 mul16s::@6
[171] (dword) mul16s::m#5 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
[172] if((signed word) mul16s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@2
[168] (dword) mul16s::m#5 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
[169] if((signed word) mul16s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@2
to:mul16s::@4
mul16s::@4: scope:[mul16s] from mul16s::@1
[173] (word~) mul16s::$11 ← > (dword) mul16s::m#5
[174] (word~) mul16s::$12 ← > (dword) mul16s::m#5
[175] (word~) mul16s::$17 ← (word~) mul16s::$12 - (word)(signed word) mul16s::a#0
[176] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17
[170] (word~) mul16s::$12 ← > (dword) mul16s::m#5
[171] (word~) mul16s::$17 ← (word~) mul16s::$12 - (word)(signed word) mul16s::a#0
[172] (dword) mul16s::m#2 ← (dword) mul16s::m#5 hi= (word~) mul16s::$17
to:mul16s::@2
mul16s::@2: scope:[mul16s] from mul16s::@1 mul16s::@4
[177] (dword) mul16s::m#4 ← phi( mul16s::@1/(dword) mul16s::m#5 mul16s::@4/(dword) mul16s::m#2 )
[178] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
[173] (dword) mul16s::m#4 ← phi( mul16s::@1/(dword) mul16s::m#5 mul16s::@4/(dword) mul16s::m#2 )
[174] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
to:mul16s::@return
mul16s::@return: scope:[mul16s] from mul16s::@2
[179] return
[175] return
to:@return
mul16u: scope:[mul16u] from mul16s mul16u_compare::@13
[180] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mul16u_compare::@13/(word) mul16u::a#2 )
[180] (word) mul16u::b#2 ← phi( mul16s/(word~) mul16u::b#3 mul16u_compare::@13/(word) mul16u::b#1 )
[181] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
[176] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mul16u_compare::@13/(word) mul16u::a#2 )
[176] (word) mul16u::b#2 ← phi( mul16s/(word~) mul16u::b#3 mul16u_compare::@13/(word) mul16u::b#1 )
[177] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
to:mul16u::@1
mul16u::@1: scope:[mul16u] from mul16u mul16u::@4
[182] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[182] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[182] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[183] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
[178] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[178] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[178] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[179] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
to:mul16u::@return
mul16u::@return: scope:[mul16u] from mul16u::@1
[184] return
[180] return
to:@return
mul16u::@2: scope:[mul16u] from mul16u::@1
[185] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[186] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
[181] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[182] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
to:mul16u::@7
mul16u::@7: scope:[mul16u] from mul16u::@2
[187] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
[183] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
to:mul16u::@4
mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@7
[188] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[189] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[190] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[184] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[185] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[186] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:mul16u::@1
muls16s: scope:[muls16s] from mul16s_compare::@2
[191] if((signed word) muls16s::a#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls16s::@5
[187] if((signed word) muls16s::a#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls16s::@5
to:muls16s::@6
muls16s::@6: scope:[muls16s] from muls16s
[192] if((signed word) muls16s::a#0<=(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls16s::@4
[188] if((signed word) muls16s::a#0<=(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls16s::@4
to:muls16s::@3
muls16s::@3: scope:[muls16s] from muls16s::@3 muls16s::@6
[193] (signed word) muls16s::j#2 ← phi( muls16s::@3/(signed word) muls16s::j#1 muls16s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[193] (signed dword) muls16s::m#3 ← phi( muls16s::@3/(signed dword) muls16s::m#1 muls16s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[194] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0
[195] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2
[196] if((signed word) muls16s::j#1!=(signed word) muls16s::a#0) goto muls16s::@3
[189] (signed word) muls16s::j#2 ← phi( muls16s::@3/(signed word) muls16s::j#1 muls16s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[189] (signed dword) muls16s::m#3 ← phi( muls16s::@3/(signed dword) muls16s::m#1 muls16s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[190] (signed dword) muls16s::m#1 ← (signed dword) muls16s::m#3 + (signed word) muls16s::b#0
[191] (signed word) muls16s::j#1 ← ++ (signed word) muls16s::j#2
[192] if((signed word) muls16s::j#1!=(signed word) muls16s::a#0) goto muls16s::@3
to:muls16s::@4
muls16s::@4: scope:[muls16s] from muls16s::@3 muls16s::@5 muls16s::@6
[197] (signed dword) muls16s::return#0 ← phi( muls16s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 muls16s::@3/(signed dword) muls16s::m#1 muls16s::@5/(signed dword) muls16s::m#2 )
[193] (signed dword) muls16s::return#0 ← phi( muls16s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 muls16s::@3/(signed dword) muls16s::m#1 muls16s::@5/(signed dword) muls16s::m#2 )
to:muls16s::@return
muls16s::@return: scope:[muls16s] from muls16s::@4
[198] return
[194] return
to:@return
muls16s::@5: scope:[muls16s] from muls16s muls16s::@5
[199] (signed word) muls16s::i#2 ← phi( muls16s/(byte/signed byte/word/signed word/dword/signed dword) 0 muls16s::@5/(signed word) muls16s::i#1 )
[199] (signed dword) muls16s::m#5 ← phi( muls16s/(byte/signed byte/word/signed word/dword/signed dword) 0 muls16s::@5/(signed dword) muls16s::m#2 )
[200] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0
[201] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2
[202] if((signed word) muls16s::i#1!=(signed word) muls16s::a#0) goto muls16s::@5
[195] (signed word) muls16s::i#2 ← phi( muls16s/(byte/signed byte/word/signed word/dword/signed dword) 0 muls16s::@5/(signed word) muls16s::i#1 )
[195] (signed dword) muls16s::m#5 ← phi( muls16s/(byte/signed byte/word/signed word/dword/signed dword) 0 muls16s::@5/(signed dword) muls16s::m#2 )
[196] (signed dword) muls16s::m#2 ← (signed dword) muls16s::m#5 - (signed word) muls16s::b#0
[197] (signed word) muls16s::i#1 ← -- (signed word) muls16s::i#2
[198] if((signed word) muls16s::i#1!=(signed word) muls16s::a#0) goto muls16s::@5
to:muls16s::@4
mul16u_compare: scope:[mul16u_compare] from main::@2
[203] phi()
[199] phi()
to:mul16u_compare::@1
mul16u_compare::@1: scope:[mul16u_compare] from mul16u_compare mul16u_compare::@10
[204] (byte) mul16u_compare::i#12 ← phi( mul16u_compare/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u_compare::@10/(byte) mul16u_compare::i#1 )
[204] (word) mul16u_compare::b#6 ← phi( mul16u_compare/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u_compare::@10/(word) mul16u_compare::b#1 )
[204] (word) mul16u_compare::a#6 ← phi( mul16u_compare/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u_compare::@10/(word) mul16u_compare::a#1 )
[204] (byte*) print_char_cursor#139 ← phi( mul16u_compare/((byte*))(word/signed word/dword/signed dword) 1024 mul16u_compare::@10/(byte*) print_char_cursor#128 )
[205] call print_str
[200] (byte) mul16u_compare::i#12 ← phi( mul16u_compare/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u_compare::@10/(byte) mul16u_compare::i#1 )
[200] (word) mul16u_compare::b#6 ← phi( mul16u_compare/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u_compare::@10/(word) mul16u_compare::b#1 )
[200] (word) mul16u_compare::a#6 ← phi( mul16u_compare/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u_compare::@10/(word) mul16u_compare::a#1 )
[200] (byte*) print_char_cursor#139 ← phi( mul16u_compare/((byte*))(word/signed word/dword/signed dword) 1024 mul16u_compare::@10/(byte*) print_char_cursor#128 )
[201] call print_str
to:mul16u_compare::@2
mul16u_compare::@2: scope:[mul16u_compare] from mul16u_compare::@1 mul16u_compare::@5
[206] (byte) mul16u_compare::j#10 ← phi( mul16u_compare::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u_compare::@5/(byte) mul16u_compare::j#1 )
[206] (word) mul16u_compare::b#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::b#6 mul16u_compare::@5/(word) mul16u_compare::b#1 )
[206] (word) mul16u_compare::a#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::a#6 mul16u_compare::@5/(word) mul16u_compare::a#1 )
[207] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word/signed word/dword/signed dword) 3371
[208] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word/signed word/dword/signed dword) 4093
[209] (word) muls16u::a#0 ← (word) mul16u_compare::a#1
[210] (word) muls16u::b#0 ← (word) mul16u_compare::b#1
[211] call muls16u
[212] (dword) muls16u::return#2 ← (dword) muls16u::return#0
[202] (byte) mul16u_compare::j#10 ← phi( mul16u_compare::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u_compare::@5/(byte) mul16u_compare::j#1 )
[202] (word) mul16u_compare::b#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::b#6 mul16u_compare::@5/(word) mul16u_compare::b#1 )
[202] (word) mul16u_compare::a#2 ← phi( mul16u_compare::@1/(word) mul16u_compare::a#6 mul16u_compare::@5/(word) mul16u_compare::a#1 )
[203] (word) mul16u_compare::a#1 ← (word) mul16u_compare::a#2 + (word/signed word/dword/signed dword) 3371
[204] (word) mul16u_compare::b#1 ← (word) mul16u_compare::b#2 + (word/signed word/dword/signed dword) 4093
[205] (word) muls16u::a#0 ← (word) mul16u_compare::a#1
[206] (word) muls16u::b#0 ← (word) mul16u_compare::b#1
[207] call muls16u
[208] (dword) muls16u::return#2 ← (dword) muls16u::return#0
to:mul16u_compare::@13
mul16u_compare::@13: scope:[mul16u_compare] from mul16u_compare::@2
[213] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2
[214] (word) mul16u::a#2 ← (word) mul16u_compare::a#1
[215] (word) mul16u::b#1 ← (word) mul16u_compare::b#1
[216] call mul16u
[217] (dword) mul16u::return#3 ← (dword) mul16u::res#2
[209] (dword) mul16u_compare::ms#0 ← (dword) muls16u::return#2
[210] (word) mul16u::a#2 ← (word) mul16u_compare::a#1
[211] (word) mul16u::b#1 ← (word) mul16u_compare::b#1
[212] call mul16u
[213] (dword) mul16u::return#3 ← (dword) mul16u::res#2
to:mul16u_compare::@14
mul16u_compare::@14: scope:[mul16u_compare] from mul16u_compare::@13
[218] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3
[219] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1
[220] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1
[221] call mulf16u
[222] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0
[214] (dword) mul16u_compare::mn#0 ← (dword) mul16u::return#3
[215] (word) mulf16u::a#1 ← (word) mul16u_compare::a#1
[216] (word) mulf16u::b#1 ← (word) mul16u_compare::b#1
[217] call mulf16u
[218] (dword) mulf16u::return#3 ← (dword) mulf16u::return#0
to:mul16u_compare::@15
mul16u_compare::@15: scope:[mul16u_compare] from mul16u_compare::@14
[223] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3
[224] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3
[219] (dword) mul16u_compare::mf#0 ← (dword) mulf16u::return#3
[220] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mf#0) goto mul16u_compare::@3
to:mul16u_compare::@6
mul16u_compare::@6: scope:[mul16u_compare] from mul16u_compare::@15
[225] phi()
[221] phi()
to:mul16u_compare::@3
mul16u_compare::@3: scope:[mul16u_compare] from mul16u_compare::@15 mul16u_compare::@6
[226] (byte) mul16u_compare::ok#4 ← phi( mul16u_compare::@15/(byte/signed byte/word/signed word/dword/signed dword) 1 mul16u_compare::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[227] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@22
[222] (byte) mul16u_compare::ok#4 ← phi( mul16u_compare::@15/(byte/signed byte/word/signed word/dword/signed dword) 1 mul16u_compare::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[223] if((dword) mul16u_compare::ms#0==(dword) mul16u_compare::mn#0) goto mul16u_compare::@22
to:mul16u_compare::@4
mul16u_compare::@4: scope:[mul16u_compare] from mul16u_compare::@22 mul16u_compare::@3
[228] (byte) mul16u_compare::ok#3 ← phi( mul16u_compare::@22/(byte) mul16u_compare::ok#4 mul16u_compare::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[229] if((byte) mul16u_compare::ok#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u_compare::@5
[224] (byte) mul16u_compare::ok#3 ← phi( mul16u_compare::@22/(byte) mul16u_compare::ok#4 mul16u_compare::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[225] if((byte) mul16u_compare::ok#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u_compare::@5
to:mul16u_compare::@8
mul16u_compare::@8: scope:[mul16u_compare] from mul16u_compare::@4
[230] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
[231] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1
[232] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1
[233] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0
[234] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0
[235] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0
[236] call mul16u_error
[226] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
[227] (word) mul16u_error::a#0 ← (word) mul16u_compare::a#1
[228] (word) mul16u_error::b#0 ← (word) mul16u_compare::b#1
[229] (dword) mul16u_error::ms#0 ← (dword) mul16u_compare::ms#0
[230] (dword) mul16u_error::mn#0 ← (dword) mul16u_compare::mn#0
[231] (dword) mul16u_error::mf#0 ← (dword) mul16u_compare::mf#0
[232] call mul16u_error
to:mul16u_compare::@return
mul16u_compare::@return: scope:[mul16u_compare] from mul16u_compare::@18 mul16u_compare::@8
[237] return
[233] return
to:@return
mul16u_compare::@5: scope:[mul16u_compare] from mul16u_compare::@4
[238] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10
[239] if((byte) mul16u_compare::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto mul16u_compare::@2
[234] (byte) mul16u_compare::j#1 ← ++ (byte) mul16u_compare::j#10
[235] if((byte) mul16u_compare::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto mul16u_compare::@2
to:mul16u_compare::@10
mul16u_compare::@10: scope:[mul16u_compare] from mul16u_compare::@5
[240] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12
[241] if((byte) mul16u_compare::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto mul16u_compare::@1
[236] (byte) mul16u_compare::i#1 ← ++ (byte) mul16u_compare::i#12
[237] if((byte) mul16u_compare::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto mul16u_compare::@1
to:mul16u_compare::@11
mul16u_compare::@11: scope:[mul16u_compare] from mul16u_compare::@10
[242] phi()
[243] call print_ln
[238] phi()
[239] call print_ln
to:mul16u_compare::@17
mul16u_compare::@17: scope:[mul16u_compare] from mul16u_compare::@11
[244] (byte*~) print_char_cursor#192 ← (byte*) print_line_cursor#1
[245] call print_str
[240] (byte*~) print_char_cursor#192 ← (byte*) print_line_cursor#1
[241] call print_str
to:mul16u_compare::@18
mul16u_compare::@18: scope:[mul16u_compare] from mul16u_compare::@17
[246] phi()
[247] call print_ln
[242] phi()
[243] call print_ln
to:mul16u_compare::@return
mul16u_compare::@22: scope:[mul16u_compare] from mul16u_compare::@3
[248] phi()
[244] phi()
to:mul16u_compare::@4
mul16u_error: scope:[mul16u_error] from mul16u_compare::@8
[249] phi()
[250] call print_str
[245] phi()
[246] call print_str
to:mul16u_error::@1
mul16u_error::@1: scope:[mul16u_error] from mul16u_error
[251] (word) print_word::w#3 ← (word) mul16u_error::a#0
[252] call print_word
[247] (word) print_word::w#3 ← (word) mul16u_error::a#0
[248] call print_word
to:mul16u_error::@2
mul16u_error::@2: scope:[mul16u_error] from mul16u_error::@1
[253] phi()
[254] call print_str
[249] phi()
[250] call print_str
to:mul16u_error::@3
mul16u_error::@3: scope:[mul16u_error] from mul16u_error::@2
[255] (word) print_word::w#4 ← (word) mul16u_error::b#0
[256] call print_word
[251] (word) print_word::w#4 ← (word) mul16u_error::b#0
[252] call print_word
to:mul16u_error::@4
mul16u_error::@4: scope:[mul16u_error] from mul16u_error::@3
[257] phi()
[258] call print_str
[253] phi()
[254] call print_str
to:mul16u_error::@5
mul16u_error::@5: scope:[mul16u_error] from mul16u_error::@4
[259] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0
[260] call print_dword
[255] (dword) print_dword::dw#1 ← (dword) mul16u_error::ms#0
[256] call print_dword
to:mul16u_error::@6
mul16u_error::@6: scope:[mul16u_error] from mul16u_error::@5
[261] phi()
[262] call print_str
[257] phi()
[258] call print_str
to:mul16u_error::@7
mul16u_error::@7: scope:[mul16u_error] from mul16u_error::@6
[263] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0
[264] call print_dword
[259] (dword) print_dword::dw#2 ← (dword) mul16u_error::mn#0
[260] call print_dword
to:mul16u_error::@8
mul16u_error::@8: scope:[mul16u_error] from mul16u_error::@7
[265] phi()
[266] call print_str
[261] phi()
[262] call print_str
to:mul16u_error::@9
mul16u_error::@9: scope:[mul16u_error] from mul16u_error::@8
[267] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0
[268] call print_dword
[263] (dword) print_dword::dw#3 ← (dword) mul16u_error::mf#0
[264] call print_dword
to:mul16u_error::@10
mul16u_error::@10: scope:[mul16u_error] from mul16u_error::@9
[269] phi()
[270] call print_ln
[265] phi()
[266] call print_ln
to:mul16u_error::@return
mul16u_error::@return: scope:[mul16u_error] from mul16u_error::@10
[271] return
[267] return
to:@return
muls16u: scope:[muls16u] from mul16u_compare::@2
[272] if((word) muls16u::a#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls16u::@1
[268] if((word) muls16u::a#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls16u::@1
to:muls16u::@2
muls16u::@2: scope:[muls16u] from muls16u muls16u::@2
[273] (word) muls16u::i#2 ← phi( muls16u::@2/(word) muls16u::i#1 muls16u/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[273] (dword) muls16u::m#3 ← phi( muls16u::@2/(dword) muls16u::m#1 muls16u/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[274] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0
[275] (word) muls16u::i#1 ← ++ (word) muls16u::i#2
[276] if((word) muls16u::i#1!=(word) muls16u::a#0) goto muls16u::@2
[269] (word) muls16u::i#2 ← phi( muls16u::@2/(word) muls16u::i#1 muls16u/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[269] (dword) muls16u::m#3 ← phi( muls16u::@2/(dword) muls16u::m#1 muls16u/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[270] (dword) muls16u::m#1 ← (dword) muls16u::m#3 + (word) muls16u::b#0
[271] (word) muls16u::i#1 ← ++ (word) muls16u::i#2
[272] if((word) muls16u::i#1!=(word) muls16u::a#0) goto muls16u::@2
to:muls16u::@1
muls16u::@1: scope:[muls16u] from muls16u muls16u::@2
[277] (dword) muls16u::return#0 ← phi( muls16u/(byte/signed byte/word/signed word/dword/signed dword) 0 muls16u::@2/(dword) muls16u::m#1 )
[273] (dword) muls16u::return#0 ← phi( muls16u/(byte/signed byte/word/signed word/dword/signed dword) 0 muls16u::@2/(dword) muls16u::m#1 )
to:muls16u::@return
muls16u::@return: scope:[muls16u] from muls16u::@1
[278] return
[274] return
to:@return
mulf_init: scope:[mulf_init] from main::@1
[279] phi()
[275] phi()
to:mulf_init::@1
mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@2
[280] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
[280] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
[280] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
[280] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
[280] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 )
[281] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[282] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
[283] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
[276] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
[276] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
[276] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
[276] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
[276] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 )
[277] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[278] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
[279] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
to:mulf_init::@5
mulf_init::@5: scope:[mulf_init] from mulf_init::@1
[284] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[285] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
[280] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[281] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
to:mulf_init::@2
mulf_init::@2: scope:[mulf_init] from mulf_init::@1 mulf_init::@5
[286] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 )
[286] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 )
[287] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
[288] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
[289] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
[290] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
[291] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[292] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[293] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[294] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1
[282] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 )
[282] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 )
[283] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
[284] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
[285] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
[286] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
[287] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[288] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[289] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[290] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1
to:mulf_init::@3
mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4
[295] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 )
[295] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 )
[295] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 )
[295] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 )
[296] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
[297] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
[298] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[299] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[300] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12
[291] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 )
[291] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 )
[291] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 )
[291] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 )
[292] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
[293] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
[294] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[295] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[296] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12
to:mulf_init::@4
mulf_init::@4: scope:[mulf_init] from mulf_init::@12 mulf_init::@3
[301] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[302] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[303] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3
[297] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[298] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[299] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3
to:mulf_init::@8
mulf_init::@8: scope:[mulf_init] from mulf_init::@4
[304] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256)
[305] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256)
[300] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256)
[301] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256)
to:mulf_init::@return
mulf_init::@return: scope:[mulf_init] from mulf_init::@8
[306] return
[302] return
to:@return
mulf_init::@12: scope:[mulf_init] from mulf_init::@3
[307] phi()
[303] phi()
to:mulf_init::@4
print_cls: scope:[print_cls] from main
[308] phi()
[304] phi()
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[309] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 )
[310] *((byte*) print_cls::sc#2) ← (byte) ' '
[311] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[312] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
[305] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 )
[306] *((byte*) print_cls::sc#2) ← (byte) ' '
[307] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[308] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[313] return
[309] return
to:@return

File diff suppressed because one or more lines are too long

View File

@ -9,11 +9,9 @@
(label) main::@3
(label) main::@return
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$11 $11 zp ZP_WORD:3 20.0
(word~) mul16s::$12 $12 zp ZP_WORD:9 4.0
(word~) mul16s::$16 $16 zp ZP_WORD:9 4.0
(word~) mul16s::$17 $17 zp ZP_WORD:9 4.0
(word~) mul16s::$5 $5 zp ZP_WORD:3 20.0
(word~) mul16s::$6 $6 zp ZP_WORD:9 4.0
(label) mul16s::@1
(label) mul16s::@2
@ -22,15 +20,15 @@
(label) mul16s::@6
(label) mul16s::@return
(signed word) mul16s::a
(signed word) mul16s::a#0 a zp ZP_WORD:3 6.4375
(signed word) mul16s::a#0 a zp ZP_WORD:3 7.357142857142858
(signed word) mul16s::b
(signed word) mul16s::b#0 b zp ZP_WORD:5 8.583333333333332
(signed word) mul16s::b#0 b zp ZP_WORD:5 9.363636363636363
(dword) mul16s::m
(dword) mul16s::m#0 m zp ZP_DWORD:25 2.0
(dword) mul16s::m#1 m zp ZP_DWORD:25 4.0
(dword) mul16s::m#2 m zp ZP_DWORD:25 4.0
(dword) mul16s::m#4 m zp ZP_DWORD:25 6.0
(dword) mul16s::m#5 m zp ZP_DWORD:25 2.4
(dword) mul16s::m#5 m zp ZP_DWORD:25 2.5
(signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp ZP_DWORD:25 34.33333333333333
(signed dword) mul16s::return#2 return zp ZP_DWORD:25 202.0
@ -191,11 +189,9 @@
(dword) mul16u_error::ms#0 ms zp ZP_DWORD:11 0.3076923076923077
(const string) mul16u_error::str str = (string) "multiply mismatch @"
(signed dword()) mulf16s((signed word) mulf16s::a , (signed word) mulf16s::b)
(word~) mulf16s::$11 $11 zp ZP_WORD:3 20.0
(word~) mulf16s::$12 $12 zp ZP_WORD:9 4.0
(word~) mulf16s::$16 $16 zp ZP_WORD:9 4.0
(word~) mulf16s::$17 $17 zp ZP_WORD:9 4.0
(word~) mulf16s::$5 $5 zp ZP_WORD:3 20.0
(word~) mulf16s::$6 $6 zp ZP_WORD:9 4.0
(label) mulf16s::@1
(label) mulf16s::@2
@ -204,15 +200,15 @@
(label) mulf16s::@6
(label) mulf16s::@return
(signed word) mulf16s::a
(signed word) mulf16s::a#0 a zp ZP_WORD:3 6.4375
(signed word) mulf16s::a#0 a zp ZP_WORD:3 7.357142857142858
(signed word) mulf16s::b
(signed word) mulf16s::b#0 b zp ZP_WORD:5 8.583333333333332
(signed word) mulf16s::b#0 b zp ZP_WORD:5 9.363636363636363
(dword) mulf16s::m
(dword) mulf16s::m#0 m zp ZP_DWORD:17 2.0
(dword) mulf16s::m#1 m zp ZP_DWORD:17 4.0
(dword) mulf16s::m#2 m zp ZP_DWORD:17 4.0
(dword) mulf16s::m#4 m zp ZP_DWORD:17 6.0
(dword) mulf16s::m#5 m zp ZP_DWORD:17 2.4
(dword) mulf16s::m#5 m zp ZP_DWORD:17 2.5
(signed dword) mulf16s::return
(signed dword) mulf16s::return#0 return zp ZP_DWORD:17 34.33333333333333
(signed dword) mulf16s::return#2 return zp ZP_DWORD:17 202.0
@ -432,7 +428,7 @@
(const string) str4 str4 = (string) " / fast:@"
zp ZP_BYTE:2 [ mul16s_compare::i#12 mul16s_compare::i#1 mul16u_compare::i#12 mul16u_compare::i#1 mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 mulf_init::dir#2 mulf_init::dir#3 ]
zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#11 print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 mul16u_error::a#0 muls16u::i#2 muls16u::i#1 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 mulf16s::$5 mulf16s::$11 mul16s::$5 mul16s::$11 ]
zp ZP_WORD:3 [ mul16s_compare::a#2 mul16s_compare::a#6 mul16s_compare::a#1 muls16s::a#0 mul16s::a#0 mulf16s::a#0 mul16s_error::a#0 print_word::w#5 print_word::w#3 print_word::w#4 print_word::w#1 print_word::w#2 print_word::w#11 print_sword::w#4 print_sword::w#3 print_sword::w#1 print_sword::w#2 print_sword::w#0 mul16u_error::a#0 muls16u::i#2 muls16u::i#1 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 mulf_init::sqr2_lo#2 mulf_init::sqr2_lo#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_WORD:5 [ mul16s_compare::b#2 mul16s_compare::b#6 mul16s_compare::b#1 muls16s::b#0 mul16s::b#0 mulf16s::b#0 mul16s_error::b#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
reg byte y [ mul16s_compare::j#10 mul16s_compare::j#1 ]
reg byte x [ mul16s_compare::ok#3 mul16s_compare::ok#4 ]

View File

@ -274,413 +274,409 @@ mul8s::@6: scope:[mul8s] from mul8s
[136] if((signed byte) mul8s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8s::@1
to:mul8s::@3
mul8s::@3: scope:[mul8s] from mul8s::@6
[137] (byte~) mul8s::$5 ← > (word) mul8s::m#0
[138] (byte~) mul8s::$6 ← > (word) mul8s::m#0
[139] (byte~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0
[140] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16
[137] (byte~) mul8s::$6 ← > (word) mul8s::m#0
[138] (byte~) mul8s::$16 ← (byte~) mul8s::$6 - (byte)(signed byte) mul8s::b#0
[139] (word) mul8s::m#1 ← (word) mul8s::m#0 hi= (byte~) mul8s::$16
to:mul8s::@1
mul8s::@1: scope:[mul8s] from mul8s::@3 mul8s::@6
[141] (word) mul8s::m#5 ← phi( mul8s::@3/(word) mul8s::m#1 mul8s::@6/(word) mul8s::m#0 )
[142] if((signed byte) mul8s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8s::@2
[140] (word) mul8s::m#5 ← phi( mul8s::@3/(word) mul8s::m#1 mul8s::@6/(word) mul8s::m#0 )
[141] if((signed byte) mul8s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8s::@2
to:mul8s::@4
mul8s::@4: scope:[mul8s] from mul8s::@1
[143] (byte~) mul8s::$11 ← > (word) mul8s::m#5
[144] (byte~) mul8s::$12 ← > (word) mul8s::m#5
[145] (byte~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0
[146] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17
[142] (byte~) mul8s::$12 ← > (word) mul8s::m#5
[143] (byte~) mul8s::$17 ← (byte~) mul8s::$12 - (byte)(signed byte) mul8s::a#0
[144] (word) mul8s::m#2 ← (word) mul8s::m#5 hi= (byte~) mul8s::$17
to:mul8s::@2
mul8s::@2: scope:[mul8s] from mul8s::@1 mul8s::@4
[147] (word) mul8s::m#4 ← phi( mul8s::@1/(word) mul8s::m#5 mul8s::@4/(word) mul8s::m#2 )
[145] (word) mul8s::m#4 ← phi( mul8s::@1/(word) mul8s::m#5 mul8s::@4/(word) mul8s::m#2 )
to:mul8s::@return
mul8s::@return: scope:[mul8s] from mul8s::@2
[148] return
[146] return
to:@return
mul8u: scope:[mul8u] from mul8s mul8u_compare::@13
[149] (byte) mul8u::a#6 ← phi( mul8s/(byte~) mul8u::a#8 mul8u_compare::@13/(byte) mul8u::a#2 )
[149] (byte) mul8u::b#2 ← phi( mul8s/(byte~) mul8u::b#3 mul8u_compare::@13/(byte) mul8u::b#1 )
[150] (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#2
[147] (byte) mul8u::a#6 ← phi( mul8s/(byte~) mul8u::a#8 mul8u_compare::@13/(byte) mul8u::a#2 )
[147] (byte) mul8u::b#2 ← phi( mul8s/(byte~) mul8u::b#3 mul8u_compare::@13/(byte) mul8u::b#1 )
[148] (word) mul8u::mb#0 ← ((word)) (byte) mul8u::b#2
to:mul8u::@1
mul8u::@1: scope:[mul8u] from mul8u mul8u::@4
[151] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 )
[151] (word) mul8u::res#2 ← phi( mul8u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u::@4/(word) mul8u::res#6 )
[151] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@4/(byte) mul8u::a#0 )
[152] if((byte) mul8u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2
[149] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 )
[149] (word) mul8u::res#2 ← phi( mul8u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u::@4/(word) mul8u::res#6 )
[149] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@4/(byte) mul8u::a#0 )
[150] if((byte) mul8u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2
to:mul8u::@return
mul8u::@return: scope:[mul8u] from mul8u::@1
[153] return
[151] return
to:@return
mul8u::@2: scope:[mul8u] from mul8u::@1
[154] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[155] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4
[152] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[153] if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4
to:mul8u::@7
mul8u::@7: scope:[mul8u] from mul8u::@2
[156] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
[154] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
to:mul8u::@4
mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@7
[157] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@7/(word) mul8u::res#1 )
[158] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[159] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[155] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@7/(word) mul8u::res#1 )
[156] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[157] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:mul8u::@1
mulf8s: scope:[mulf8s] from mul8s_compare::@12
[160] phi()
[158] phi()
to:mulf8s::mulf8s_prepare1
mulf8s::mulf8s_prepare1: scope:[mulf8s] from mulf8s
[161] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte) mulf8s::a#0
[162] call mulf8u_prepare
[159] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte) mulf8s::a#0
[160] call mulf8u_prepare
to:mulf8s::@2
mulf8s::@2: scope:[mulf8s] from mulf8s::mulf8s_prepare1
[163] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0
[164] call mulf8s_prepared
[165] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4
[161] (signed byte) mulf8s_prepared::b#0 ← (signed byte) mulf8s::b#0
[162] call mulf8s_prepared
[163] (signed word) mulf8s_prepared::return#2 ← (signed word)(word) mulf8s_prepared::m#4
to:mulf8s::@4
mulf8s::@4: scope:[mulf8s] from mulf8s::@2
[166] (signed word) mulf8s::return#0 ← (signed word) mulf8s_prepared::return#2
[164] (signed word) mulf8s::return#0 ← (signed word) mulf8s_prepared::return#2
to:mulf8s::@return
mulf8s::@return: scope:[mulf8s] from mulf8s::@4
[167] return
[165] return
to:@return
mulf8s_prepared: scope:[mulf8s_prepared] from mulf8s::@2
[168] (byte~) mulf8u_prepared::b#3 ← (byte)(signed byte) mulf8s_prepared::b#0
[169] call mulf8u_prepared
[170] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0
[166] (byte~) mulf8u_prepared::b#3 ← (byte)(signed byte) mulf8s_prepared::b#0
[167] call mulf8u_prepared
[168] (word) mulf8u_prepared::return#3 ← (word) mulf8u_prepared::return#0
to:mulf8s_prepared::@6
mulf8s_prepared::@6: scope:[mulf8s_prepared] from mulf8s_prepared
[171] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3
[172] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1
[169] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#3
[170] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1
to:mulf8s_prepared::@3
mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@6
[173] (byte~) mulf8s_prepared::$4 ← > (word) mulf8s_prepared::m#0
[174] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0
[175] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#0
[176] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15
[171] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0
[172] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#0
[173] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15
to:mulf8s_prepared::@1
mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@6
[177] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 )
[178] if((signed byte) mulf8s_prepared::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2
[174] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 )
[175] if((signed byte) mulf8s_prepared::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2
to:mulf8s_prepared::@4
mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1
[179] (byte~) mulf8s_prepared::$10 ← > (word) mulf8s_prepared::m#5
[180] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5
[181] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0)
[182] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
[176] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5
[177] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0)
[178] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
to:mulf8s_prepared::@2
mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4
[183] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 )
[179] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 )
to:mulf8s_prepared::@return
mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2
[184] return
[180] return
to:@return
mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared mulf8u::@2
[185] (byte) mulf8u_prepared::b#2 ← phi( mulf8s_prepared/(byte~) mulf8u_prepared::b#3 mulf8u::@2/(byte) mulf8u_prepared::b#0 )
[186] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#2
[181] (byte) mulf8u_prepared::b#2 ← phi( mulf8s_prepared/(byte~) mulf8u_prepared::b#3 mulf8u::@2/(byte) mulf8u_prepared::b#0 )
[182] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#2
asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB }
[188] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0)
[184] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0)
to:mulf8u_prepared::@return
mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared
[189] return
[185] return
to:@return
mulf8u_prepare: scope:[mulf8u_prepare] from mulf8s::mulf8s_prepare1 mulf8u
[190] (byte) mulf8u_prepare::a#2 ← phi( mulf8s::mulf8s_prepare1/(byte~) mulf8u_prepare::a#3 mulf8u/(byte) mulf8u_prepare::a#0 )
[191] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2
[186] (byte) mulf8u_prepare::a#2 ← phi( mulf8s::mulf8s_prepare1/(byte~) mulf8u_prepare::a#3 mulf8u/(byte) mulf8u_prepare::a#0 )
[187] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2
asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 }
to:mulf8u_prepare::@return
mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare
[193] return
[189] return
to:@return
muls8s: scope:[muls8s] from mul8s_compare::@2
[194] if((signed byte) muls8s::a#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls8s::@5
[190] if((signed byte) muls8s::a#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls8s::@5
to:muls8s::@6
muls8s::@6: scope:[muls8s] from muls8s
[195] if((signed byte) muls8s::a#0<=(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls8s::@4
[191] if((signed byte) muls8s::a#0<=(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls8s::@4
to:muls8s::@3
muls8s::@3: scope:[muls8s] from muls8s::@3 muls8s::@6
[196] (signed byte) muls8s::j#2 ← phi( muls8s::@3/(signed byte) muls8s::j#1 muls8s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[196] (signed word) muls8s::m#3 ← phi( muls8s::@3/(signed word) muls8s::m#1 muls8s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[197] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0
[198] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2
[199] if((signed byte) muls8s::j#1!=(signed byte) muls8s::a#0) goto muls8s::@3
[192] (signed byte) muls8s::j#2 ← phi( muls8s::@3/(signed byte) muls8s::j#1 muls8s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[192] (signed word) muls8s::m#3 ← phi( muls8s::@3/(signed word) muls8s::m#1 muls8s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[193] (signed word) muls8s::m#1 ← (signed word) muls8s::m#3 + (signed byte) muls8s::b#0
[194] (signed byte) muls8s::j#1 ← ++ (signed byte) muls8s::j#2
[195] if((signed byte) muls8s::j#1!=(signed byte) muls8s::a#0) goto muls8s::@3
to:muls8s::@4
muls8s::@4: scope:[muls8s] from muls8s::@3 muls8s::@5 muls8s::@6
[200] (signed word) muls8s::return#0 ← phi( muls8s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8s::@3/(signed word) muls8s::m#1 muls8s::@5/(signed word) muls8s::m#2 )
[196] (signed word) muls8s::return#0 ← phi( muls8s::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8s::@3/(signed word) muls8s::m#1 muls8s::@5/(signed word) muls8s::m#2 )
to:muls8s::@return
muls8s::@return: scope:[muls8s] from muls8s::@4
[201] return
[197] return
to:@return
muls8s::@5: scope:[muls8s] from muls8s muls8s::@5
[202] (signed byte) muls8s::i#2 ← phi( muls8s/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8s::@5/(signed byte) muls8s::i#1 )
[202] (signed word) muls8s::m#5 ← phi( muls8s/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8s::@5/(signed word) muls8s::m#2 )
[203] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0
[204] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2
[205] if((signed byte) muls8s::i#1!=(signed byte) muls8s::a#0) goto muls8s::@5
[198] (signed byte) muls8s::i#2 ← phi( muls8s/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8s::@5/(signed byte) muls8s::i#1 )
[198] (signed word) muls8s::m#5 ← phi( muls8s/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8s::@5/(signed word) muls8s::m#2 )
[199] (signed word) muls8s::m#2 ← (signed word) muls8s::m#5 - (signed byte) muls8s::b#0
[200] (signed byte) muls8s::i#1 ← -- (signed byte) muls8s::i#2
[201] if((signed byte) muls8s::i#1!=(signed byte) muls8s::a#0) goto muls8s::@5
to:muls8s::@4
mul8u_compare: scope:[mul8u_compare] from main::@4
[206] phi()
[202] phi()
to:mul8u_compare::@1
mul8u_compare::@1: scope:[mul8u_compare] from mul8u_compare mul8u_compare::@10
[207] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u_compare::@10/(byte) mul8u_compare::a#1 )
[203] (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u_compare::@10/(byte) mul8u_compare::a#1 )
to:mul8u_compare::@2
mul8u_compare::@2: scope:[mul8u_compare] from mul8u_compare::@1 mul8u_compare::@5
[208] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 )
[209] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7
[210] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10
[211] call muls8u
[212] (word) muls8u::return#2 ← (word) muls8u::return#0
[204] (byte) mul8u_compare::b#10 ← phi( mul8u_compare::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 mul8u_compare::@5/(byte) mul8u_compare::b#1 )
[205] (byte) muls8u::a#0 ← (byte) mul8u_compare::a#7
[206] (byte) muls8u::b#0 ← (byte) mul8u_compare::b#10
[207] call muls8u
[208] (word) muls8u::return#2 ← (word) muls8u::return#0
to:mul8u_compare::@12
mul8u_compare::@12: scope:[mul8u_compare] from mul8u_compare::@2
[213] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2
[214] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7
[215] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10
[216] call mulf8u
[217] (word) mulf8u::return#2 ← (word) mulf8u::return#0
[209] (word) mul8u_compare::ms#0 ← (word) muls8u::return#2
[210] (byte) mulf8u::a#0 ← (byte) mul8u_compare::a#7
[211] (byte) mulf8u::b#0 ← (byte) mul8u_compare::b#10
[212] call mulf8u
[213] (word) mulf8u::return#2 ← (word) mulf8u::return#0
to:mul8u_compare::@13
mul8u_compare::@13: scope:[mul8u_compare] from mul8u_compare::@12
[218] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2
[219] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7
[220] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10
[221] call mul8u
[222] (word) mul8u::return#3 ← (word) mul8u::res#2
[214] (word) mul8u_compare::mf#0 ← (word) mulf8u::return#2
[215] (byte) mul8u::a#2 ← (byte) mul8u_compare::a#7
[216] (byte) mul8u::b#1 ← (byte) mul8u_compare::b#10
[217] call mul8u
[218] (word) mul8u::return#3 ← (word) mul8u::res#2
to:mul8u_compare::@14
mul8u_compare::@14: scope:[mul8u_compare] from mul8u_compare::@13
[223] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3
[224] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3
[219] (word) mul8u_compare::mn#0 ← (word) mul8u::return#3
[220] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mf#0) goto mul8u_compare::@3
to:mul8u_compare::@6
mul8u_compare::@6: scope:[mul8u_compare] from mul8u_compare::@14
[225] phi()
[221] phi()
to:mul8u_compare::@3
mul8u_compare::@3: scope:[mul8u_compare] from mul8u_compare::@14 mul8u_compare::@6
[226] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@14/(byte/signed byte/word/signed word/dword/signed dword) 1 mul8u_compare::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[227] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@20
[222] (byte) mul8u_compare::ok#4 ← phi( mul8u_compare::@14/(byte/signed byte/word/signed word/dword/signed dword) 1 mul8u_compare::@6/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[223] if((word) mul8u_compare::ms#0==(word) mul8u_compare::mn#0) goto mul8u_compare::@20
to:mul8u_compare::@4
mul8u_compare::@4: scope:[mul8u_compare] from mul8u_compare::@20 mul8u_compare::@3
[228] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@20/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[229] if((byte) mul8u_compare::ok#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u_compare::@5
[224] (byte) mul8u_compare::ok#3 ← phi( mul8u_compare::@20/(byte) mul8u_compare::ok#4 mul8u_compare::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[225] if((byte) mul8u_compare::ok#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u_compare::@5
to:mul8u_compare::@8
mul8u_compare::@8: scope:[mul8u_compare] from mul8u_compare::@4
[230] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
[231] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7
[232] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10
[233] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0
[234] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0
[235] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0
[236] call mul8u_error
[226] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
[227] (byte) mul8u_error::a#0 ← (byte) mul8u_compare::a#7
[228] (byte) mul8u_error::b#0 ← (byte) mul8u_compare::b#10
[229] (word) mul8u_error::ms#0 ← (word) mul8u_compare::ms#0
[230] (word) mul8u_error::mn#0 ← (word) mul8u_compare::mn#0
[231] (word) mul8u_error::mf#0 ← (word) mul8u_compare::mf#0
[232] call mul8u_error
to:mul8u_compare::@return
mul8u_compare::@return: scope:[mul8u_compare] from mul8u_compare::@16 mul8u_compare::@8
[237] return
[233] return
to:@return
mul8u_compare::@5: scope:[mul8u_compare] from mul8u_compare::@4
[238] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10
[239] if((byte) mul8u_compare::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u_compare::@2
[234] (byte) mul8u_compare::b#1 ← ++ (byte) mul8u_compare::b#10
[235] if((byte) mul8u_compare::b#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u_compare::@2
to:mul8u_compare::@10
mul8u_compare::@10: scope:[mul8u_compare] from mul8u_compare::@5
[240] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7
[241] if((byte) mul8u_compare::a#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u_compare::@1
[236] (byte) mul8u_compare::a#1 ← ++ (byte) mul8u_compare::a#7
[237] if((byte) mul8u_compare::a#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u_compare::@1
to:mul8u_compare::@11
mul8u_compare::@11: scope:[mul8u_compare] from mul8u_compare::@10
[242] phi()
[243] call print_str
[238] phi()
[239] call print_str
to:mul8u_compare::@16
mul8u_compare::@16: scope:[mul8u_compare] from mul8u_compare::@11
[244] phi()
[245] call print_ln
[240] phi()
[241] call print_ln
to:mul8u_compare::@return
mul8u_compare::@20: scope:[mul8u_compare] from mul8u_compare::@3
[246] phi()
[242] phi()
to:mul8u_compare::@4
mul8u_error: scope:[mul8u_error] from mul8u_compare::@8
[247] phi()
[248] call print_str
[243] phi()
[244] call print_str
to:mul8u_error::@1
mul8u_error::@1: scope:[mul8u_error] from mul8u_error
[249] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0
[250] call print_byte
[245] (byte) print_byte::b#3 ← (byte) mul8u_error::a#0
[246] call print_byte
to:mul8u_error::@2
mul8u_error::@2: scope:[mul8u_error] from mul8u_error::@1
[251] phi()
[252] call print_str
[247] phi()
[248] call print_str
to:mul8u_error::@3
mul8u_error::@3: scope:[mul8u_error] from mul8u_error::@2
[253] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0
[254] call print_byte
[249] (byte) print_byte::b#4 ← (byte) mul8u_error::b#0
[250] call print_byte
to:mul8u_error::@4
mul8u_error::@4: scope:[mul8u_error] from mul8u_error::@3
[255] phi()
[256] call print_str
[251] phi()
[252] call print_str
to:mul8u_error::@5
mul8u_error::@5: scope:[mul8u_error] from mul8u_error::@4
[257] (word) print_word::w#3 ← (word) mul8u_error::ms#0
[258] call print_word
[253] (word) print_word::w#3 ← (word) mul8u_error::ms#0
[254] call print_word
to:mul8u_error::@6
mul8u_error::@6: scope:[mul8u_error] from mul8u_error::@5
[259] phi()
[260] call print_str
[255] phi()
[256] call print_str
to:mul8u_error::@7
mul8u_error::@7: scope:[mul8u_error] from mul8u_error::@6
[261] (word) print_word::w#4 ← (word) mul8u_error::mn#0
[262] call print_word
[257] (word) print_word::w#4 ← (word) mul8u_error::mn#0
[258] call print_word
to:mul8u_error::@8
mul8u_error::@8: scope:[mul8u_error] from mul8u_error::@7
[263] phi()
[264] call print_str
[259] phi()
[260] call print_str
to:mul8u_error::@9
mul8u_error::@9: scope:[mul8u_error] from mul8u_error::@8
[265] (word) print_word::w#5 ← (word) mul8u_error::mf#0
[266] call print_word
[261] (word) print_word::w#5 ← (word) mul8u_error::mf#0
[262] call print_word
to:mul8u_error::@10
mul8u_error::@10: scope:[mul8u_error] from mul8u_error::@9
[267] phi()
[268] call print_ln
[263] phi()
[264] call print_ln
to:mul8u_error::@return
mul8u_error::@return: scope:[mul8u_error] from mul8u_error::@10
[269] return
[265] return
to:@return
mulf8u: scope:[mulf8u] from mul8u_compare::@12
[270] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0
[271] call mulf8u_prepare
[266] (byte) mulf8u_prepare::a#0 ← (byte) mulf8u::a#0
[267] call mulf8u_prepare
to:mulf8u::@2
mulf8u::@2: scope:[mulf8u] from mulf8u
[272] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0
[273] call mulf8u_prepared
[274] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0
[268] (byte) mulf8u_prepared::b#0 ← (byte) mulf8u::b#0
[269] call mulf8u_prepared
[270] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0
to:mulf8u::@3
mulf8u::@3: scope:[mulf8u] from mulf8u::@2
[275] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2
[271] (word) mulf8u::return#0 ← (word) mulf8u_prepared::return#2
to:mulf8u::@return
mulf8u::@return: scope:[mulf8u] from mulf8u::@3
[276] return
[272] return
to:@return
muls8u: scope:[muls8u] from mul8u_compare::@2
[277] if((byte) muls8u::a#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls8u::@1
[273] if((byte) muls8u::a#0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto muls8u::@1
to:muls8u::@2
muls8u::@2: scope:[muls8u] from muls8u muls8u::@2
[278] (byte) muls8u::i#2 ← phi( muls8u::@2/(byte) muls8u::i#1 muls8u/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[278] (word) muls8u::m#3 ← phi( muls8u::@2/(word) muls8u::m#1 muls8u/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[279] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0
[280] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2
[281] if((byte) muls8u::i#1!=(byte) muls8u::a#0) goto muls8u::@2
[274] (byte) muls8u::i#2 ← phi( muls8u::@2/(byte) muls8u::i#1 muls8u/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[274] (word) muls8u::m#3 ← phi( muls8u::@2/(word) muls8u::m#1 muls8u/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[275] (word) muls8u::m#1 ← (word) muls8u::m#3 + (byte) muls8u::b#0
[276] (byte) muls8u::i#1 ← ++ (byte) muls8u::i#2
[277] if((byte) muls8u::i#1!=(byte) muls8u::a#0) goto muls8u::@2
to:muls8u::@1
muls8u::@1: scope:[muls8u] from muls8u muls8u::@2
[282] (word) muls8u::return#0 ← phi( muls8u/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8u::@2/(word) muls8u::m#1 )
[278] (word) muls8u::return#0 ← phi( muls8u/(byte/signed byte/word/signed word/dword/signed dword) 0 muls8u::@2/(word) muls8u::m#1 )
to:muls8u::@return
muls8u::@return: scope:[muls8u] from muls8u::@1
[283] return
[279] return
to:@return
mulf_tables_cmp: scope:[mulf_tables_cmp] from main::@3
[284] phi()
[280] phi()
to:mulf_tables_cmp::@1
mulf_tables_cmp::@1: scope:[mulf_tables_cmp] from mulf_tables_cmp mulf_tables_cmp::@2
[285] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte[512]) mula_sqr1_lo#0 mulf_tables_cmp::@2/(byte*) mulf_tables_cmp::asm_sqr#1 )
[285] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte[512]) mulf_sqr1_lo#0 mulf_tables_cmp::@2/(byte*) mulf_tables_cmp::kc_sqr#1 )
[286] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@2
[281] (byte*) mulf_tables_cmp::asm_sqr#2 ← phi( mulf_tables_cmp/(const byte[512]) mula_sqr1_lo#0 mulf_tables_cmp::@2/(byte*) mulf_tables_cmp::asm_sqr#1 )
[281] (byte*) mulf_tables_cmp::kc_sqr#2 ← phi( mulf_tables_cmp/(const byte[512]) mulf_sqr1_lo#0 mulf_tables_cmp::@2/(byte*) mulf_tables_cmp::kc_sqr#1 )
[282] if(*((byte*) mulf_tables_cmp::kc_sqr#2)==*((byte*) mulf_tables_cmp::asm_sqr#2)) goto mulf_tables_cmp::@2
to:mulf_tables_cmp::@3
mulf_tables_cmp::@3: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1
[287] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
[288] call print_str
[283] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
[284] call print_str
to:mulf_tables_cmp::@6
mulf_tables_cmp::@6: scope:[mulf_tables_cmp] from mulf_tables_cmp::@3
[289] (word~) print_word::w#11 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2
[290] call print_word
[285] (word~) print_word::w#11 ← (word)(byte*) mulf_tables_cmp::asm_sqr#2
[286] call print_word
to:mulf_tables_cmp::@7
mulf_tables_cmp::@7: scope:[mulf_tables_cmp] from mulf_tables_cmp::@6
[291] phi()
[292] call print_str
[287] phi()
[288] call print_str
to:mulf_tables_cmp::@8
mulf_tables_cmp::@8: scope:[mulf_tables_cmp] from mulf_tables_cmp::@7
[293] (word~) print_word::w#12 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2
[294] call print_word
[289] (word~) print_word::w#12 ← (word)(byte*) mulf_tables_cmp::kc_sqr#2
[290] call print_word
to:mulf_tables_cmp::@return
mulf_tables_cmp::@return: scope:[mulf_tables_cmp] from mulf_tables_cmp::@10 mulf_tables_cmp::@8
[295] (byte*) print_line_cursor#10 ← phi( mulf_tables_cmp::@10/(byte*) print_line_cursor#1 mulf_tables_cmp::@8/((byte*))(word/signed word/dword/signed dword) 1024 )
[295] (byte*) print_char_cursor#31 ← phi( mulf_tables_cmp::@10/(byte*~) print_char_cursor#225 mulf_tables_cmp::@8/(byte*) print_char_cursor#18 )
[296] return
[291] (byte*) print_line_cursor#10 ← phi( mulf_tables_cmp::@10/(byte*) print_line_cursor#1 mulf_tables_cmp::@8/((byte*))(word/signed word/dword/signed dword) 1024 )
[291] (byte*) print_char_cursor#31 ← phi( mulf_tables_cmp::@10/(byte*~) print_char_cursor#225 mulf_tables_cmp::@8/(byte*) print_char_cursor#18 )
[292] return
to:@return
mulf_tables_cmp::@2: scope:[mulf_tables_cmp] from mulf_tables_cmp::@1
[297] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2
[298] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2
[299] if((byte*) mulf_tables_cmp::kc_sqr#1<(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512*(byte/signed byte/word/signed word/dword/signed dword) 4) goto mulf_tables_cmp::@1
[293] (byte*) mulf_tables_cmp::asm_sqr#1 ← ++ (byte*) mulf_tables_cmp::asm_sqr#2
[294] (byte*) mulf_tables_cmp::kc_sqr#1 ← ++ (byte*) mulf_tables_cmp::kc_sqr#2
[295] if((byte*) mulf_tables_cmp::kc_sqr#1<(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512*(byte/signed byte/word/signed word/dword/signed dword) 4) goto mulf_tables_cmp::@1
to:mulf_tables_cmp::@5
mulf_tables_cmp::@5: scope:[mulf_tables_cmp] from mulf_tables_cmp::@2
[300] phi()
[301] call print_str
[296] phi()
[297] call print_str
to:mulf_tables_cmp::@10
mulf_tables_cmp::@10: scope:[mulf_tables_cmp] from mulf_tables_cmp::@5
[302] phi()
[303] call print_ln
[304] (byte*~) print_char_cursor#225 ← (byte*) print_line_cursor#1
[298] phi()
[299] call print_ln
[300] (byte*~) print_char_cursor#225 ← (byte*) print_line_cursor#1
to:mulf_tables_cmp::@return
mulf_init_asm: scope:[mulf_init_asm] from main::@2
asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- }
[306] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr1_lo#0)
[307] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr1_hi#0)
[308] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr2_lo#0)
[309] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr2_hi#0)
[302] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr1_lo#0)
[303] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr1_hi#0)
[304] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr2_lo#0)
[305] *((const byte*) mulf_init_asm::mem#0) ← *((const byte[512]) mula_sqr2_hi#0)
to:mulf_init_asm::@return
mulf_init_asm::@return: scope:[mulf_init_asm] from mulf_init_asm
[310] return
[306] return
to:@return
mulf_init: scope:[mulf_init] from main::@1
[311] phi()
[307] phi()
to:mulf_init::@1
mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@2
[312] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
[312] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
[312] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
[312] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
[312] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 )
[313] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[314] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
[315] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
[308] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
[308] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
[308] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
[308] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
[308] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 )
[309] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[310] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
[311] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
to:mulf_init::@5
mulf_init::@5: scope:[mulf_init] from mulf_init::@1
[316] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[317] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
[312] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[313] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
to:mulf_init::@2
mulf_init::@2: scope:[mulf_init] from mulf_init::@1 mulf_init::@5
[318] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 )
[318] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 )
[319] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
[320] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
[321] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
[322] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
[323] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[324] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[325] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[326] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1
[314] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 )
[314] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 )
[315] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
[316] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
[317] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
[318] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
[319] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[320] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[321] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[322] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1
to:mulf_init::@3
mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4
[327] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 )
[327] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 )
[327] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 )
[327] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 )
[328] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
[329] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
[330] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[331] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[332] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12
[323] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 )
[323] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 )
[323] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 )
[323] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 )
[324] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
[325] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
[326] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[327] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[328] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12
to:mulf_init::@4
mulf_init::@4: scope:[mulf_init] from mulf_init::@12 mulf_init::@3
[333] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[334] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[335] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3
[329] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[330] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[331] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3
to:mulf_init::@8
mulf_init::@8: scope:[mulf_init] from mulf_init::@4
[336] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256)
[337] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256)
[332] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256)
[333] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256)
to:mulf_init::@return
mulf_init::@return: scope:[mulf_init] from mulf_init::@8
[338] return
[334] return
to:@return
mulf_init::@12: scope:[mulf_init] from mulf_init::@3
[339] phi()
[335] phi()
to:mulf_init::@4
print_cls: scope:[print_cls] from main
[340] phi()
[336] phi()
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[341] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 )
[342] *((byte*) print_cls::sc#2) ← (byte) ' '
[343] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[344] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
[337] (byte*) print_cls::sc#2 ← phi( print_cls/((byte*))(word/signed word/dword/signed dword) 1024 print_cls::@1/(byte*) print_cls::sc#1 )
[338] *((byte*) print_cls::sc#2) ← (byte) ' '
[339] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[340] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[345] return
[341] return
to:@return

File diff suppressed because one or more lines are too long

View File

@ -11,11 +11,9 @@
(label) main::@5
(label) main::@return
(signed word()) mul8s((signed byte) mul8s::a , (signed byte) mul8s::b)
(byte~) mul8s::$11 reg byte a 20.0
(byte~) mul8s::$12 reg byte a 4.0
(byte~) mul8s::$16 reg byte a 4.0
(byte~) mul8s::$17 reg byte a 4.0
(byte~) mul8s::$5 reg byte a 20.0
(byte~) mul8s::$6 reg byte a 4.0
(label) mul8s::@1
(label) mul8s::@2
@ -24,15 +22,15 @@
(label) mul8s::@6
(label) mul8s::@return
(signed byte) mul8s::a
(signed byte) mul8s::a#0 a zp ZP_BYTE:2 6.4375
(signed byte) mul8s::a#0 a zp ZP_BYTE:2 7.357142857142858
(signed byte) mul8s::b
(signed byte) mul8s::b#0 reg byte y 8.583333333333332
(signed byte) mul8s::b#0 reg byte y 9.363636363636363
(word) mul8s::m
(word) mul8s::m#0 m zp ZP_WORD:12 2.0
(word) mul8s::m#1 m zp ZP_WORD:12 4.0
(word) mul8s::m#2 m zp ZP_WORD:12 4.0
(word) mul8s::m#4 m zp ZP_WORD:12 1.3333333333333333
(word) mul8s::m#5 m zp ZP_WORD:12 2.4
(word) mul8s::m#5 m zp ZP_WORD:12 2.5
(signed word) mul8s::return
(signed word) mul8s::return#2 return zp ZP_WORD:12 202.0
(void()) mul8s_compare()
@ -196,11 +194,9 @@
(signed word) mulf8s::return#0 return zp ZP_WORD:14 34.33333333333333
(signed word) mulf8s::return#2 return zp ZP_WORD:14 202.0
(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b)
(byte~) mulf8s_prepared::$10 reg byte a 20.0
(byte~) mulf8s_prepared::$11 reg byte a 4.0
(byte~) mulf8s_prepared::$15 reg byte a 4.0
(byte~) mulf8s_prepared::$16 reg byte a 4.0
(byte~) mulf8s_prepared::$4 reg byte a 20.0
(byte~) mulf8s_prepared::$5 reg byte a 4.0
(label) mulf8s_prepared::@1
(label) mulf8s_prepared::@2
@ -209,13 +205,13 @@
(label) mulf8s_prepared::@6
(label) mulf8s_prepared::@return
(signed byte) mulf8s_prepared::b
(signed byte) mulf8s_prepared::b#0 b zp ZP_BYTE:3 0.36363636363636365
(signed byte) mulf8s_prepared::b#0 b zp ZP_BYTE:3 0.4
(word) mulf8s_prepared::m
(word) mulf8s_prepared::m#0 m zp ZP_WORD:14 2.0
(word) mulf8s_prepared::m#1 m zp ZP_WORD:14 4.0
(word) mulf8s_prepared::m#2 m zp ZP_WORD:14 4.0
(word) mulf8s_prepared::m#4 m zp ZP_WORD:14 1.3333333333333333
(word) mulf8s_prepared::m#5 m zp ZP_WORD:14 2.4
(word) mulf8s_prepared::m#5 m zp ZP_WORD:14 2.5
(signed byte*) mulf8s_prepared::memA
(const signed byte*) mulf8s_prepared::memA#0 memA = ((signed byte*))(byte/word/signed word/dword/signed dword) 253
(signed word) mulf8s_prepared::return
@ -493,17 +489,13 @@ reg byte y [ mul8s::b#0 ]
reg byte x [ mul8s_error::a#0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
reg byte a [ mul8s::$5 ]
reg byte a [ mul8s::$6 ]
reg byte a [ mul8s::$16 ]
reg byte a [ mul8s::$11 ]
reg byte a [ mul8s::$12 ]
reg byte a [ mul8s::$17 ]
reg byte a [ mul8u::$1 ]
reg byte a [ mulf8s_prepared::$4 ]
reg byte a [ mulf8s_prepared::$5 ]
reg byte a [ mulf8s_prepared::$15 ]
reg byte a [ mulf8s_prepared::$10 ]
reg byte a [ mulf8s_prepared::$11 ]
reg byte a [ mulf8s_prepared::$16 ]
reg byte x [ muls8u::b#0 ]