diff --git a/src/main/java/dk/camelot64/kickc/CompileLog.java b/src/main/java/dk/camelot64/kickc/CompileLog.java index 108e34535..579113205 100644 --- a/src/main/java/dk/camelot64/kickc/CompileLog.java +++ b/src/main/java/dk/camelot64/kickc/CompileLog.java @@ -35,7 +35,7 @@ public class CompileLog { /** * Should the log be output to System.out while being built */ - private boolean sysOut = true; + private boolean sysOut = false; public CompileLog() { this.log = new StringBuilder(); diff --git a/src/main/java/dk/camelot64/kickc/model/VariableReferenceInfos.java b/src/main/java/dk/camelot64/kickc/model/VariableReferenceInfos.java index 88279d971..73a873365 100644 --- a/src/main/java/dk/camelot64/kickc/model/VariableReferenceInfos.java +++ b/src/main/java/dk/camelot64/kickc/model/VariableReferenceInfos.java @@ -1,9 +1,6 @@ package dk.camelot64.kickc.model; -import dk.camelot64.kickc.model.values.ConstantRef; -import dk.camelot64.kickc.model.values.LabelRef; -import dk.camelot64.kickc.model.values.RValue; -import dk.camelot64.kickc.model.values.VariableRef; +import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.model.statements.Statement; import dk.camelot64.kickc.passes.PassNVariableReferenceInfos; @@ -11,12 +8,14 @@ import java.util.Collection; import java.util.LinkedHashSet; import java.util.Map; -/** Cached information about which variables/constants are defined/referenced/used in which statements / blocks / symbols . +/** + * Cached information about which variables/constants are defined/referenced/used in which statements / blocks / symbols . * */ + *
  • Defined means the variable/constant receives its value in a specific statement (or symbol for named constants)
  • + *
  • Used means the value of the variable/constant is used in a specific statement (or symbol for named constants)
  • + *
  • Referenced means the variable/constant is either defined or referenced in a specific statement (or symbol for named constants)
  • + * + */ public class VariableReferenceInfos { /** Variables referenced in each block. */ @@ -31,37 +30,113 @@ public class VariableReferenceInfos { /** Variables defined in each statement. */ private Map> stmtDefinedVars; - /** The statement defining each variable. */ - private Map varDefineStmt; + /** All references to symbol variables (constants/variables). References can be either statements or symbols in the symbol table */ + private Map> symbolVarReferences; - /** All statements referencing each variable . */ - private Map> varRefStmts; + /** + * A reference of a symbol variable (variable or const). + * The reference is either a specific statement or a symbol in the symbol table. + * The reference can either be defining the symbol variable or it can be using it. + */ + public interface ReferenceToSymbolVar { - /** All statements referencing each constant. */ - private Map> constRefStmts; + enum ReferenceType {USE, DEFINE} - /** All constants referencing another constant. (maps from a constant to all constants using it in their value) */ - private Map> constRefConsts; + /** + * Get the type of the reference + * + * @return The type of the reference (define or use) + */ + ReferenceType getReferenceType(); + + /** + * Get the symbol being referenced + * + * @return The symbol being referenced + */ + SymbolVariableRef getReferenced(); + + } + + /** A reference to a variable/constant inside a statement. */ + public static class ReferenceInStatement implements ReferenceToSymbolVar { + + /** The index of the statement. */ + private Integer statementIdx; + + /** The type of reference. */ + private ReferenceType referenceType; + + /** The symbol being referenced. */ + private SymbolVariableRef referencedSymbol; + + public ReferenceInStatement(Integer statementIdx, ReferenceType referenceType, SymbolVariableRef referencedSymbol) { + this.statementIdx = statementIdx; + this.referenceType = referenceType; + this.referencedSymbol = referencedSymbol; + } + + public Integer getStatementIdx() { + return statementIdx; + } + + @Override + public ReferenceType getReferenceType() { + return referenceType; + } + + @Override + public SymbolVariableRef getReferenced() { + return referencedSymbol; + } + } + + /** A reference to a variable/constant inside a symbol i he symbol table. */ + public static class ReferenceInSymbol implements ReferenceToSymbolVar { + + /** The symbol in the symbol table that contains the reference. */ + private SymbolVariableRef referencingSymbol; + + /** The type of reference. */ + private ReferenceType referenceType; + + /** The symbol being referenced. */ + private SymbolVariableRef referencedSymbol; + + public ReferenceInSymbol(SymbolVariableRef referencingSymbol, ReferenceType referenceType, SymbolVariableRef referencedSymbol) { + this.referencingSymbol = referencingSymbol; + this.referenceType = referenceType; + this.referencedSymbol = referencedSymbol; + } + + public SymbolVariableRef getReferencingSymbol() { + return referencingSymbol; + } + + @Override + public ReferenceType getReferenceType() { + return referenceType; + } + + @Override + public SymbolVariableRef getReferenced() { + return referencedSymbol; + } + } public VariableReferenceInfos( Map> blockReferencedVars, Map> blockUsedVars, Map> stmtReferencedVars, Map> stmtDefinedVars, - Map varDefineStmt, - Map> varRefStmts, - Map> constRefStmts, - Map> constRefConsts + Map> symbolVarReferences ) { this.blockReferencedVars = blockReferencedVars; this.blockUsedVars = blockUsedVars; this.stmtDefinedVars = stmtDefinedVars; this.stmtReferencedVars = stmtReferencedVars; - this.varDefineStmt = varDefineStmt; - this.varRefStmts = varRefStmts; - this.constRefStmts = constRefStmts; - this.constRefConsts = constRefConsts; + this.symbolVarReferences = symbolVarReferences; } /** @@ -132,41 +207,43 @@ public class VariableReferenceInfos { * * @return true if the variable is defined but never referenced */ - public boolean isUnused(VariableRef variableRef) { - Collection refs = new LinkedHashSet<>(varRefStmts.get(variableRef)); - refs.remove(varDefineStmt.get(variableRef)); - return refs.size() == 0; - } - - /** - * Determines if a constant is unused - * - * @return true if the constant is never referenced - */ - public boolean isUnused(ConstantRef constRef) { - Collection constStmts = this.constRefStmts.get(constRef); - Collection constRefs = constRefConsts.get(constRef); - boolean unusedInStmts = constStmts == null || constStmts.size() == 0; - boolean unusedInConsts = constRefs == null || constRefs.size() == 0; - return unusedInStmts && unusedInConsts; + public boolean isUnused(SymbolVariableRef variableRef) { + Collection refs = symbolVarReferences.get(variableRef); + if(refs==null) return true; + return !refs.stream() + .anyMatch(referenceToSymbolVar -> ReferenceToSymbolVar.ReferenceType.USE.equals(referenceToSymbolVar.getReferenceType()) + ); } /** * Get all statements referencing constant + * * @param constRef The constant to look for * @return Index of all statements referencing the constant */ public Collection getConstRefStatements(ConstantRef constRef) { - return constRefStmts.get(constRef); + Collection refs = symbolVarReferences.get(constRef); + LinkedHashSet stmts = new LinkedHashSet<>(); + refs.stream() + .filter(referenceToSymbolVar -> referenceToSymbolVar instanceof ReferenceInStatement) + .forEach(referenceToSymbolVar -> stmts.add(((ReferenceInStatement) referenceToSymbolVar).getStatementIdx())); + return stmts; } /** * Get all constatns referencing another constant + * * @param constRef The constant to look for * @return All constants that reference the constant in their value */ public Collection getConstRefConsts(ConstantRef constRef) { - return constRefConsts.get(constRef); + Collection refs = symbolVarReferences.get(constRef); + LinkedHashSet constRefs = new LinkedHashSet<>(); + refs.stream() + .filter(referenceToSymbolVar -> ReferenceToSymbolVar.ReferenceType.USE.equals(referenceToSymbolVar.getReferenceType())) + .filter(referenceToSymbolVar -> referenceToSymbolVar instanceof ReferenceInSymbol) + .forEach(referenceToSymbolVar -> constRefs.add((ConstantRef) ((ReferenceInSymbol) referenceToSymbolVar).getReferencingSymbol())); + return constRefs; } } diff --git a/src/main/java/dk/camelot64/kickc/model/values/SymbolRef.java b/src/main/java/dk/camelot64/kickc/model/values/SymbolRef.java index 277feccb8..b0a103172 100644 --- a/src/main/java/dk/camelot64/kickc/model/values/SymbolRef.java +++ b/src/main/java/dk/camelot64/kickc/model/values/SymbolRef.java @@ -51,6 +51,9 @@ public class SymbolRef implements Value { } else { try { Symbol symbol = program.getScope().getSymbol(fullName); + if(symbol==null) { + return fullName+"(null)"; + } return symbol.toString(program); } catch(NullPointerException e) { throw e; diff --git a/src/main/java/dk/camelot64/kickc/passes/PassNEliminateUnusedVars.java b/src/main/java/dk/camelot64/kickc/passes/PassNEliminateUnusedVars.java index 2f9e19961..230e809a0 100644 --- a/src/main/java/dk/camelot64/kickc/passes/PassNEliminateUnusedVars.java +++ b/src/main/java/dk/camelot64/kickc/passes/PassNEliminateUnusedVars.java @@ -39,7 +39,9 @@ public class PassNEliminateUnusedVars extends Pass2SsaOptimization { getLog().append("Eliminating unused variable " + lValue.toString(getProgram()) + " and assignment " + assignment.toString(getProgram(), false)); stmtIt.remove(); Variable variable = getScope().getVariable((VariableRef) lValue); - variable.getScope().remove(variable); + if(variable!=null) { + variable.getScope().remove(variable); + } modified = true; } } else if(statement instanceof StatementCall) { @@ -48,7 +50,9 @@ public class PassNEliminateUnusedVars extends Pass2SsaOptimization { if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue) && !Pass2ConstantIdentification.isAddressOfUsed((VariableRef) lValue, getProgram())) { getLog().append("Eliminating unused variable - keeping the call " + lValue.toString(getProgram())); Variable variable = getScope().getVariable((VariableRef) lValue); - variable.getScope().remove(variable); + if(variable!=null) { + variable.getScope().remove(variable); + } call.setlValue(null); modified = true; } @@ -61,7 +65,9 @@ public class PassNEliminateUnusedVars extends Pass2SsaOptimization { if(referenceInfos.isUnused(variableRef) && !Pass2ConstantIdentification.isAddressOfUsed(variableRef, getProgram())) { getLog().append("Eliminating unused variable - keeping the phi block " + variableRef.toString(getProgram())); Variable variable = getScope().getVariable(variableRef); - variable.getScope().remove(variable); + if(variable!=null) { + variable.getScope().remove(variable); + } phiVarIt.remove(); modified = true; } diff --git a/src/main/java/dk/camelot64/kickc/passes/PassNVariableReferenceInfos.java b/src/main/java/dk/camelot64/kickc/passes/PassNVariableReferenceInfos.java index 3ba88e738..f7d46b8a5 100644 --- a/src/main/java/dk/camelot64/kickc/passes/PassNVariableReferenceInfos.java +++ b/src/main/java/dk/camelot64/kickc/passes/PassNVariableReferenceInfos.java @@ -74,9 +74,7 @@ public class PassNVariableReferenceInfos extends Pass2Base { LinkedHashMap> blockUsedVars = new LinkedHashMap<>(); LinkedHashMap> stmtReferenced = new LinkedHashMap<>(); LinkedHashMap> stmtDefined = new LinkedHashMap<>(); - LinkedHashMap varDefineStmts = new LinkedHashMap<>(); - LinkedHashMap> varRefStmts = new LinkedHashMap<>(); - LinkedHashMap> constStmts = new LinkedHashMap<>(); + Map> symbolVarReferences = new LinkedHashMap<>(); for(ControlFlowBlock block : getProgram().getGraph().getAllBlocks()) { LabelRef blockLabel = block.getLabel(); blockReferencedVars.put(blockLabel, getReferencedVars(blockLabel, new ArrayList<>())); @@ -90,43 +88,37 @@ public class PassNVariableReferenceInfos extends Pass2Base { stmtReferenced.put(statement.getIndex(), referencedVars); // Identify statement defining variables for(VariableRef variableRef : defined) { - varDefineStmts.put(variableRef, statement.getIndex()); + symbolVarReferences.putIfAbsent(variableRef, new ArrayList<>()); + Collection references = symbolVarReferences.get(variableRef); + references.add(new VariableReferenceInfos.ReferenceInStatement(statement.getIndex(), VariableReferenceInfos.ReferenceToSymbolVar.ReferenceType.DEFINE, variableRef)); } // Gather statements referencing variables for(VariableRef variableRef : referencedVars) { - Collection stmts = varRefStmts.get(variableRef); - if(stmts == null) { - stmts = new LinkedHashSet<>(); - varRefStmts.put(variableRef, stmts); + if(!defined.contains(variableRef)) { + symbolVarReferences.putIfAbsent(variableRef, new ArrayList<>()); + Collection references = symbolVarReferences.get(variableRef); + references.add(new VariableReferenceInfos.ReferenceInStatement(statement.getIndex(), VariableReferenceInfos.ReferenceToSymbolVar.ReferenceType.USE, variableRef)); } - stmts.add(statement.getIndex()); } // Gather statements referencing constants Collection referencedConsts = getReferencedConsts(statement); for(ConstantRef constantRef : referencedConsts) { - Collection stmts = constStmts.get(constantRef); - if(stmts == null) { - stmts = new LinkedHashSet<>(); - constStmts.put(constantRef, stmts); - } - stmts.add(statement.getIndex()); + symbolVarReferences.putIfAbsent(constantRef, new ArrayList<>()); + Collection references = symbolVarReferences.get(constantRef); + references.add(new VariableReferenceInfos.ReferenceInStatement(statement.getIndex(), VariableReferenceInfos.ReferenceToSymbolVar.ReferenceType.USE, constantRef)); } } } // Gather constants referencing other constants - LinkedHashMap> constRefConsts = new LinkedHashMap<>(); for(ConstantVar constantVar : getSymbols().getAllConstants(true)) { Collection referencedConsts = getReferencedConsts(constantVar.getValue()); for(ConstantRef constantRef : referencedConsts) { - Collection consts = constRefConsts.get(constantRef); - if(consts == null) { - consts = new LinkedHashSet<>(); - constRefConsts.put(constantRef, consts); - } - consts.add(constantVar.getRef()); + symbolVarReferences.putIfAbsent(constantRef, new ArrayList<>()); + Collection references = symbolVarReferences.get(constantRef); + references.add(new VariableReferenceInfos.ReferenceInSymbol(constantVar.getRef(), VariableReferenceInfos.ReferenceToSymbolVar.ReferenceType.USE, constantRef)); } } - getProgram().setVariableReferenceInfos(new VariableReferenceInfos(blockReferencedVars, blockUsedVars, stmtReferenced, stmtDefined, varDefineStmts, varRefStmts, constStmts, constRefConsts)); + getProgram().setVariableReferenceInfos(new VariableReferenceInfos(blockReferencedVars, blockUsedVars, stmtReferenced, stmtDefined, symbolVarReferences)); } /** diff --git a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.asm b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.asm index b3b29277b..1c79a258f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.asm @@ -4,7 +4,6 @@ .label B = $1000 jsr main main: { - lda #0 b2: jsr menu jmp b2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.cfg b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.cfg index 6ca49980d..fb18c7ee4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.cfg @@ -9,33 +9,27 @@ [3] phi() [ ] ( ) main: scope:[main] from @3 [4] phi() [ ] ( main:2 [ ] ) - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) a#1 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) a#12 ) [ a#1 ] ( main:2 [ a#1 ] ) to:main::@2 -main::@2: scope:[main] from main::@1 - [6] phi() [ a#1 ] ( main:2 [ a#1 ] ) - [7] call menu [ a#12 ] ( main:2 [ a#12 ] ) - to:main::@1 +main::@2: scope:[main] from main main::@2 + [5] phi() [ ] ( main:2 [ ] ) + [6] call menu [ ] ( main:2 [ ] ) + to:main::@2 menu: scope:[menu] from main::@2 - [8] phi() [ a#1 ] ( main:2::menu:7 [ a#1 ] ) + [7] phi() [ ] ( main:2::menu:6 [ ] ) to:menu::@2 menu::@2: scope:[menu] from menu - [9] phi() [ a#1 ] ( main:2::menu:7 [ a#1 ] ) - [10] call mode [ a#12 ] ( main:2::menu:7 [ a#12 ] ) + [8] phi() [ ] ( main:2::menu:6 [ ] ) + [9] call mode [ ] ( main:2::menu:6 [ ] ) to:menu::@return menu::@return: scope:[menu] from menu::@2 - [11] return [ a#12 ] ( main:2::menu:7 [ a#12 ] ) + [10] return [ ] ( main:2::menu:6 [ ] ) to:@return mode: scope:[mode] from menu::@2 - [12] phi() [ a#1 ] ( main:2::menu:7::mode:10 [ a#1 ] ) - to:mode::@1 -mode::@1: scope:[mode] from mode mode::@2 mode::@7 - [13] (byte) a#12 ← phi( mode/(byte) a#1 mode::@7/(byte) a#5 ) [ ] ( main:2::menu:7::mode:10 [ ] ) + [11] phi() [ ] ( main:2::menu:6::mode:9 [ ] ) + to:mode::@2 +mode::@2: scope:[mode] from mode mode::@2 mode::@4 + [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 [ ] ( main:2::menu:6::mode:9 [ ] ) + to:mode::@2 +mode::@4: scope:[mode] from mode::@2 + [13] phi() [ ] ( main:2::menu:6::mode:9 [ ] ) to:mode::@2 -mode::@2: scope:[mode] from mode::@1 - [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 [ ] ( main:2::menu:7::mode:10 [ ] ) - to:mode::@7 -mode::@7: scope:[mode] from mode::@2 - [15] (byte) a#5 ← *((const byte*) B#0) [ a#5 ] ( main:2::menu:7::mode:10 [ a#5 ] ) - to:mode::@1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.log b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.log index 09680f53d..a3dda6d86 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.log @@ -150,6 +150,8 @@ mode::@return: scope:[mode] from mode::@3 Eliminating unused variable - keeping the call (void~) main::$0 Eliminating unused variable - keeping the call (void~) menu::$0 +Eliminating unused variable (byte) a and assignment [6] (byte) a ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable a(null) and assignment [12] a(null) ← *((byte*) B) Removing empty block main::@4 Removing empty block main::@3 Removing empty block main::@5 @@ -163,11 +165,9 @@ Removing empty block menu::@7 Removing empty block mode::@5 Removing empty block mode::@3 Removing empty block mode::@6 +Removing empty block mode::@7 Removing empty block mode::@8 PROCEDURE MODIFY VARIABLE ANALYSIS -main modifies a -menu modifies a -mode modifies a Completing Phi functions... Completing Phi functions... @@ -184,93 +184,65 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN @begin: scope:[] from to:@2 main: scope:[main] from @3 - (byte*) B#11 ← phi( @3/(byte*) B#13 ) - (byte) a#20 ← phi( @3/(byte) a#19 ) + (byte*) B#10 ← phi( @3/(byte*) B#12 ) to:main::@1 main::@1: scope:[main] from main main::@7 - (byte*) B#10 ← phi( main/(byte*) B#11 main::@7/(byte*) B#12 ) - (byte) a#15 ← phi( main/(byte) a#20 main::@7/(byte) a#0 ) + (byte*) B#9 ← phi( main/(byte*) B#10 main::@7/(byte*) B#11 ) if(true) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 - (byte*) B#9 ← phi( main::@1/(byte*) B#10 ) - (byte) a#14 ← phi( main::@1/(byte) a#15 ) + (byte*) B#8 ← phi( main::@1/(byte*) B#9 ) call menu to:main::@7 main::@7: scope:[main] from main::@2 - (byte*) B#12 ← phi( main::@2/(byte*) B#9 ) - (byte) a#8 ← phi( main::@2/(byte) a#3 ) - (byte) a#0 ← (byte) a#8 + (byte*) B#11 ← phi( main::@2/(byte*) B#8 ) to:main::@1 main::@return: scope:[main] from main::@1 - (byte) a#9 ← phi( main::@1/(byte) a#15 ) - (byte) a#1 ← (byte) a#9 return to:@return menu: scope:[menu] from main::@2 - (byte*) B#8 ← phi( main::@2/(byte*) B#9 ) - (byte) a#21 ← phi( main::@2/(byte) a#14 ) + (byte*) B#7 ← phi( main::@2/(byte*) B#8 ) to:menu::@1 menu::@1: scope:[menu] from menu - (byte*) B#7 ← phi( menu/(byte*) B#8 ) - (byte) a#17 ← phi( menu/(byte) a#21 ) + (byte*) B#6 ← phi( menu/(byte*) B#7 ) if(true) goto menu::@2 to:menu::@return menu::@2: scope:[menu] from menu::@1 - (byte*) B#6 ← phi( menu::@1/(byte*) B#7 ) - (byte) a#16 ← phi( menu::@1/(byte) a#17 ) + (byte*) B#5 ← phi( menu::@1/(byte*) B#6 ) call mode to:menu::@8 menu::@8: scope:[menu] from menu::@2 - (byte) a#10 ← phi( menu::@2/(byte) a#6 ) - (byte) a#2 ← (byte) a#10 to:menu::@return menu::@return: scope:[menu] from menu::@1 menu::@8 - (byte) a#11 ← phi( menu::@1/(byte) a#17 menu::@8/(byte) a#2 ) - (byte) a#3 ← (byte) a#11 return to:@return @2: scope:[] from @begin - (byte) a#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte*) B#0 ← ((byte*)) (word/signed word/dword/signed dword) 4096 to:@3 mode: scope:[mode] from menu::@2 - (byte) a#22 ← phi( menu::@2/(byte) a#16 ) - (byte*) B#4 ← phi( menu::@2/(byte*) B#6 ) + (byte*) B#3 ← phi( menu::@2/(byte*) B#5 ) to:mode::@1 -mode::@1: scope:[mode] from mode mode::@4 mode::@7 - (byte) a#18 ← phi( mode/(byte) a#22 mode::@4/(byte) a#23 mode::@7/(byte) a#5 ) - (byte*) B#3 ← phi( mode/(byte*) B#4 mode::@4/(byte*) B#5 mode::@7/(byte*) B#2 ) +mode::@1: scope:[mode] from mode mode::@2 mode::@4 + (byte*) B#2 ← phi( mode/(byte*) B#3 mode::@2/(byte*) B#1 mode::@4/(byte*) B#4 ) if(true) goto mode::@2 to:mode::@return mode::@2: scope:[mode] from mode::@1 - (byte) a#24 ← phi( mode::@1/(byte) a#18 ) - (byte*) B#1 ← phi( mode::@1/(byte*) B#3 ) + (byte*) B#1 ← phi( mode::@1/(byte*) B#2 ) (bool~) mode::$0 ← *((byte*) B#1) == (byte/signed byte/word/signed word/dword/signed dword) 0 (bool~) mode::$1 ← ! (bool~) mode::$0 if((bool~) mode::$1) goto mode::@4 - to:mode::@7 -mode::@4: scope:[mode] from mode::@2 - (byte) a#23 ← phi( mode::@2/(byte) a#24 ) - (byte*) B#5 ← phi( mode::@2/(byte*) B#1 ) to:mode::@1 -mode::@7: scope:[mode] from mode::@2 - (byte*) B#2 ← phi( mode::@2/(byte*) B#1 ) - (byte) a#5 ← *((byte*) B#2) +mode::@4: scope:[mode] from mode::@2 + (byte*) B#4 ← phi( mode::@2/(byte*) B#1 ) to:mode::@1 mode::@return: scope:[mode] from mode::@1 - (byte) a#12 ← phi( mode::@1/(byte) a#18 ) - (byte) a#6 ← (byte) a#12 return to:@return @3: scope:[] from @2 - (byte*) B#13 ← phi( @2/(byte*) B#0 ) - (byte) a#19 ← phi( @2/(byte) a#4 ) + (byte*) B#12 ← phi( @2/(byte*) B#0 ) call main to:@4 @4: scope:[] from @3 - (byte) a#13 ← phi( @3/(byte) a#1 ) - (byte) a#7 ← (byte) a#13 to:@end @end: scope:[] from @4 @@ -286,7 +258,6 @@ SYMBOL TABLE SSA (byte*) B#10 (byte*) B#11 (byte*) B#12 -(byte*) B#13 (byte*) B#2 (byte*) B#3 (byte*) B#4 @@ -295,32 +266,6 @@ SYMBOL TABLE SSA (byte*) B#7 (byte*) B#8 (byte*) B#9 -(byte) a -(byte) a#0 -(byte) a#1 -(byte) a#10 -(byte) a#11 -(byte) a#12 -(byte) a#13 -(byte) a#14 -(byte) a#15 -(byte) a#16 -(byte) a#17 -(byte) a#18 -(byte) a#19 -(byte) a#2 -(byte) a#20 -(byte) a#21 -(byte) a#22 -(byte) a#23 -(byte) a#24 -(byte) a#3 -(byte) a#4 -(byte) a#5 -(byte) a#6 -(byte) a#7 -(byte) a#8 -(byte) a#9 (void()) main() (label) main::@1 (label) main::@2 @@ -337,116 +282,58 @@ SYMBOL TABLE SSA (label) mode::@1 (label) mode::@2 (label) mode::@4 -(label) mode::@7 (label) mode::@return OPTIMIZING CONTROL FLOW GRAPH +Culled Empty Block (label) menu::@8 +Culled Empty Block (label) @4 +Succesful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) mode::$1 ← *((byte*) B#1) != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) mode::$0 ← *((byte*) B#1) == (byte/signed byte/word/signed word/dword/signed dword) 0 Succesful SSA optimization Pass2UnaryNotSimplification -Not aliassing across scopes: a#20 a#19 -Not aliassing across scopes: B#11 B#13 -Not aliassing across scopes: a#8 a#3 -Not aliassing across scopes: a#21 a#14 -Not aliassing across scopes: B#8 B#9 -Not aliassing across scopes: a#10 a#6 -Not aliassing across scopes: B#4 B#6 -Not aliassing across scopes: a#22 a#16 -Not aliassing across scopes: a#13 a#1 -Alias (byte) a#1 = (byte) a#14 (byte) a#15 (byte) a#9 -Alias (byte*) B#10 = (byte*) B#9 (byte*) B#12 -Alias (byte) a#0 = (byte) a#8 -Alias (byte) a#16 = (byte) a#17 (byte) a#21 -Alias (byte*) B#6 = (byte*) B#7 (byte*) B#8 -Alias (byte) a#10 = (byte) a#2 -Alias (byte) a#11 = (byte) a#3 -Alias (byte*) B#1 = (byte*) B#3 (byte*) B#5 (byte*) B#2 -Alias (byte) a#12 = (byte) a#24 (byte) a#18 (byte) a#23 (byte) a#6 -Alias (byte) a#19 = (byte) a#4 -Alias (byte*) B#0 = (byte*) B#13 -Alias (byte) a#13 = (byte) a#7 +Not aliassing across scopes: B#10 B#12 +Not aliassing across scopes: B#7 B#8 +Not aliassing across scopes: B#3 B#5 +Alias (byte*) B#11 = (byte*) B#8 (byte*) B#9 +Alias (byte*) B#5 = (byte*) B#6 (byte*) B#7 +Alias (byte*) B#1 = (byte*) B#2 (byte*) B#4 +Alias (byte*) B#0 = (byte*) B#12 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: a#20 a#19 -Not aliassing across scopes: B#11 B#0 -Not aliassing across scopes: a#0 a#11 -Not aliassing across scopes: a#16 a#1 -Not aliassing across scopes: B#6 B#10 -Not aliassing across scopes: a#10 a#12 -Not aliassing across scopes: B#4 B#6 -Not aliassing across scopes: a#22 a#16 -Not aliassing across scopes: a#13 a#1 -Self Phi Eliminated (byte*) B#10 +Not aliassing across scopes: B#10 B#0 +Not aliassing across scopes: B#5 B#11 +Not aliassing across scopes: B#3 B#5 +Self Phi Eliminated (byte*) B#11 Self Phi Eliminated (byte*) B#1 Self Phi Eliminated (byte*) B#1 -Self Phi Eliminated (byte) a#12 Succesful SSA optimization Pass2SelfPhiElimination -Redundant Phi (byte) a#20 (byte) a#19 -Redundant Phi (byte*) B#11 (byte*) B#0 -Redundant Phi (byte*) B#10 (byte*) B#11 -Redundant Phi (byte) a#0 (byte) a#11 -Redundant Phi (byte) a#16 (byte) a#1 -Redundant Phi (byte*) B#6 (byte*) B#10 -Redundant Phi (byte) a#10 (byte) a#12 -Redundant Phi (byte*) B#4 (byte*) B#6 -Redundant Phi (byte) a#22 (byte) a#16 -Redundant Phi (byte*) B#1 (byte*) B#4 -Redundant Phi (byte) a#13 (byte) a#1 +Redundant Phi (byte*) B#10 (byte*) B#0 +Redundant Phi (byte*) B#11 (byte*) B#10 +Redundant Phi (byte*) B#5 (byte*) B#11 +Redundant Phi (byte*) B#3 (byte*) B#5 +Redundant Phi (byte*) B#1 (byte*) B#3 Succesful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) mode::$1 if(*((byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 Succesful SSA optimization Pass2ConditionalJumpSimplification -Constant (const byte) a#19 = 0 Constant (const byte*) B#0 = ((byte*))4096 Succesful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 -Removing PHI-reference to removed block (menu::@1) in block menu::@return if() condition always true - replacing block destination if(true) goto menu::@2 if() condition always true - replacing block destination if(true) goto mode::@2 Succesful SSA optimization Pass2ConstantIfs Removing unused block main::@return Removing unused block mode::@return Succesful SSA optimization Pass2EliminateUnusedBlocks +Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@7 Culled Empty Block (label) menu::@1 -Culled Empty Block (label) menu::@8 Culled Empty Block (label) @2 -Culled Empty Block (label) mode::@4 -Culled Empty Block (label) @4 +Culled Empty Block (label) mode::@1 +Not culling empty block because it shares successor with its predecessor. (label) mode::@4 Succesful SSA optimization Pass2CullEmptyBlocks -Not aliassing across scopes: a#11 a#12 -Not aliassing across scopes: a#12 a#1 -Redundant Phi (byte) a#11 (byte) a#12 -Succesful SSA optimization Pass2RedundantPhiElimination -Not aliassing across scopes: a#12 a#1 +Not culling empty block because it shares successor with its predecessor. (label) mode::@4 +Not culling empty block because it shares successor with its predecessor. (label) mode::@4 OPTIMIZING CONTROL FLOW GRAPH -Inlining constant with var siblings (const byte) a#19 -Inlining constant with var siblings (const byte) a#19 -Inlining constant with var siblings (const byte) a#19 -Constant inlined a#19 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@1 main::@2 menu menu::@2 menu::@return mode mode::@1 mode::@2 mode::@7 -Block Sequence Planned @begin @3 @end main main::@1 main::@2 menu menu::@2 menu::@return mode mode::@1 mode::@2 mode::@7 -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @3 -Adding NOP phi() at start of @end -Adding NOP phi() at start of main -Adding NOP phi() at start of main::@2 -Adding NOP phi() at start of menu -Adding NOP phi() at start of menu::@2 -CALL GRAPH -Calls in [] to main:2 -Calls in [main] to menu:7 -Calls in [menu] to mode:11 - -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Created 2 initial phi equivalence classes -Coalesced [8] a#25 ← a#12 -Coalesced (already) [13] a#26 ← a#1 -Coalesced [17] a#27 ← a#5 -Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @3 @end main main::@1 main::@2 menu menu::@2 menu::@return mode mode::@1 mode::@2 mode::@7 +Block Sequence Planned @begin @3 @end main main::@2 menu menu::@2 menu::@return mode mode::@2 mode::@4 +Block Sequence Planned @begin @3 @end main main::@2 menu menu::@2 menu::@return mode mode::@2 mode::@4 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -455,11 +342,26 @@ Adding NOP phi() at start of main::@2 Adding NOP phi() at start of menu Adding NOP phi() at start of menu::@2 Adding NOP phi() at start of mode +Adding NOP phi() at start of mode::@4 +CALL GRAPH +Calls in [] to main:2 +Calls in [main] to menu:6 +Calls in [menu] to mode:9 + Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Not culling empty block because it shares successor with its predecessor. (label) mode::@4 +Block Sequence Planned @begin @3 @end main main::@2 menu menu::@2 menu::@return mode mode::@2 mode::@4 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @3 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of menu +Adding NOP phi() at start of menu::@2 +Adding NOP phi() at start of mode +Adding NOP phi() at start of mode::@4 Propagating live ranges... FINAL CONTROL FLOW GRAPH @@ -474,91 +376,76 @@ FINAL CONTROL FLOW GRAPH [3] phi() [ ] ( ) main: scope:[main] from @3 [4] phi() [ ] ( main:2 [ ] ) - to:main::@1 -main::@1: scope:[main] from main main::@2 - [5] (byte) a#1 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) a#12 ) [ a#1 ] ( main:2 [ a#1 ] ) to:main::@2 -main::@2: scope:[main] from main::@1 - [6] phi() [ a#1 ] ( main:2 [ a#1 ] ) - [7] call menu [ a#12 ] ( main:2 [ a#12 ] ) - to:main::@1 +main::@2: scope:[main] from main main::@2 + [5] phi() [ ] ( main:2 [ ] ) + [6] call menu [ ] ( main:2 [ ] ) + to:main::@2 menu: scope:[menu] from main::@2 - [8] phi() [ a#1 ] ( main:2::menu:7 [ a#1 ] ) + [7] phi() [ ] ( main:2::menu:6 [ ] ) to:menu::@2 menu::@2: scope:[menu] from menu - [9] phi() [ a#1 ] ( main:2::menu:7 [ a#1 ] ) - [10] call mode [ a#12 ] ( main:2::menu:7 [ a#12 ] ) + [8] phi() [ ] ( main:2::menu:6 [ ] ) + [9] call mode [ ] ( main:2::menu:6 [ ] ) to:menu::@return menu::@return: scope:[menu] from menu::@2 - [11] return [ a#12 ] ( main:2::menu:7 [ a#12 ] ) + [10] return [ ] ( main:2::menu:6 [ ] ) to:@return mode: scope:[mode] from menu::@2 - [12] phi() [ a#1 ] ( main:2::menu:7::mode:10 [ a#1 ] ) - to:mode::@1 -mode::@1: scope:[mode] from mode mode::@2 mode::@7 - [13] (byte) a#12 ← phi( mode/(byte) a#1 mode::@7/(byte) a#5 ) [ ] ( main:2::menu:7::mode:10 [ ] ) + [11] phi() [ ] ( main:2::menu:6::mode:9 [ ] ) + to:mode::@2 +mode::@2: scope:[mode] from mode mode::@2 mode::@4 + [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 [ ] ( main:2::menu:6::mode:9 [ ] ) + to:mode::@2 +mode::@4: scope:[mode] from mode::@2 + [13] phi() [ ] ( main:2::menu:6::mode:9 [ ] ) to:mode::@2 -mode::@2: scope:[mode] from mode::@1 - [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 [ ] ( main:2::menu:7::mode:10 [ ] ) - to:mode::@7 -mode::@7: scope:[mode] from mode::@2 - [15] (byte) a#5 ← *((const byte*) B#0) [ a#5 ] ( main:2::menu:7::mode:10 [ a#5 ] ) - to:mode::@1 DOMINATORS @begin dominated by @begin @3 dominated by @begin @3 -@end dominated by @begin @end @3 -main dominated by @begin main @3 -main::@1 dominated by @begin main @3 main::@1 -main::@2 dominated by @begin main @3 main::@1 main::@2 -menu dominated by @begin main menu @3 main::@1 main::@2 -menu::@2 dominated by @begin menu::@2 main menu @3 main::@1 main::@2 -menu::@return dominated by @begin menu::@return menu::@2 main menu @3 main::@1 main::@2 -mode dominated by @begin menu::@2 main menu mode @3 main::@1 main::@2 -mode::@1 dominated by @begin menu::@2 main menu mode @3 mode::@1 main::@1 main::@2 -mode::@2 dominated by @begin menu::@2 main menu mode @3 mode::@1 mode::@2 main::@1 main::@2 -mode::@7 dominated by @begin menu::@2 main menu mode @3 mode::@1 mode::@2 main::@1 mode::@7 main::@2 +@end dominated by @begin @3 @end +main dominated by @begin @3 main +main::@2 dominated by @begin @3 main::@2 main +menu dominated by @begin @3 main::@2 main menu +menu::@2 dominated by @begin @3 menu::@2 main::@2 main menu +menu::@return dominated by @begin @3 menu::@return menu::@2 main::@2 main menu +mode dominated by mode @begin @3 menu::@2 main::@2 main menu +mode::@2 dominated by mode @begin @3 menu::@2 mode::@2 main::@2 main menu +mode::@4 dominated by mode @begin @3 mode::@4 menu::@2 mode::@2 main::@2 main menu NATURAL LOOPS -Found back edge: Loop head: main::@1 tails: main::@2 blocks: null -Found back edge: Loop head: mode::@1 tails: mode::@2 blocks: null -Found back edge: Loop head: mode::@1 tails: mode::@7 blocks: null -Populated: Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 -Populated: Loop head: mode::@1 tails: mode::@2 blocks: mode::@2 mode::@1 -Populated: Loop head: mode::@1 tails: mode::@7 blocks: mode::@7 mode::@2 mode::@1 -Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 -Loop head: mode::@1 tails: mode::@2 blocks: mode::@2 mode::@1 -Loop head: mode::@1 tails: mode::@7 blocks: mode::@7 mode::@2 mode::@1 +Found back edge: Loop head: main::@2 tails: main::@2 blocks: null +Found back edge: Loop head: mode::@2 tails: mode::@2 blocks: null +Found back edge: Loop head: mode::@2 tails: mode::@4 blocks: null +Populated: Loop head: main::@2 tails: main::@2 blocks: main::@2 +Populated: Loop head: mode::@2 tails: mode::@2 blocks: mode::@2 +Populated: Loop head: mode::@2 tails: mode::@4 blocks: mode::@4 mode::@2 +Loop head: main::@2 tails: main::@2 blocks: main::@2 +Loop head: mode::@2 tails: mode::@2 blocks: mode::@2 +Loop head: mode::@2 tails: mode::@4 blocks: mode::@4 mode::@2 NATURAL LOOPS WITH DEPTH Found 0 loops in scope [] Found 1 loops in scope [main] - Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 + Loop head: main::@2 tails: main::@2 blocks: main::@2 Found 0 loops in scope [menu] Found 2 loops in scope [mode] - Loop head: mode::@1 tails: mode::@2 blocks: mode::@2 mode::@1 - Loop head: mode::@1 tails: mode::@7 blocks: mode::@7 mode::@2 mode::@1 -Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 depth: 1 -Loop head: mode::@1 tails: mode::@2 blocks: mode::@2 mode::@1 depth: 3 -Loop head: mode::@1 tails: mode::@7 blocks: mode::@7 mode::@2 mode::@1 depth: 2 + Loop head: mode::@2 tails: mode::@2 blocks: mode::@2 + Loop head: mode::@2 tails: mode::@4 blocks: mode::@4 mode::@2 +Loop head: main::@2 tails: main::@2 blocks: main::@2 depth: 1 +Loop head: mode::@2 tails: mode::@2 blocks: mode::@2 depth: 3 +Loop head: mode::@2 tails: mode::@4 blocks: mode::@4 mode::@2 depth: 2 VARIABLE REGISTER WEIGHTS (byte*) B -(byte) a -(byte) a#1 2.6 -(byte) a#12 38.0 -(byte) a#5 202.0 (void()) main() (void()) menu() (void()) mode() Initial phi equivalence classes -[ a#1 a#12 a#5 ] Complete equivalence classes -[ a#1 a#12 a#5 ] -Allocated zp ZP_BYTE:2 [ a#1 a#12 a#5 ] INITIAL ASM //SEG0 Basic Upstart @@ -567,7 +454,6 @@ INITIAL ASM .pc = $80d "Program" //SEG1 Global Constants & labels .label B = $1000 - .label a = 2 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -586,87 +472,66 @@ bend_from_b3: bend: //SEG9 main main: { - //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - //SEG11 [5] phi (byte) a#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta a - jmp b1 - //SEG12 main::@1 - b1: - //SEG13 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: + //SEG10 [5] phi from main main::@2 to main::@2 [phi:main/main::@2->main::@2] + b2_from_main: + b2_from_b2: jmp b2 - //SEG14 main::@2 + //SEG11 main::@2 b2: - //SEG15 [7] call menu [ a#12 ] ( main:2 [ a#12 ] ) - //SEG16 [8] phi from main::@2 to menu [phi:main::@2->menu] + //SEG12 [6] call menu [ ] ( main:2 [ ] ) + //SEG13 [7] phi from main::@2 to menu [phi:main::@2->menu] menu_from_b2: jsr menu - //SEG17 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - //SEG18 [5] phi (byte) a#1 = (byte) a#12 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 + jmp b2_from_b2 } -//SEG19 menu +//SEG14 menu menu: { - //SEG20 [9] phi from menu to menu::@2 [phi:menu->menu::@2] + //SEG15 [8] phi from menu to menu::@2 [phi:menu->menu::@2] b2_from_menu: jmp b2 - //SEG21 menu::@2 + //SEG16 menu::@2 b2: - //SEG22 [10] call mode [ a#12 ] ( main:2::menu:7 [ a#12 ] ) - //SEG23 [12] phi from menu::@2 to mode [phi:menu::@2->mode] + //SEG17 [9] call mode [ ] ( main:2::menu:6 [ ] ) + //SEG18 [11] phi from menu::@2 to mode [phi:menu::@2->mode] mode_from_b2: jsr mode jmp breturn - //SEG24 menu::@return + //SEG19 menu::@return breturn: - //SEG25 [11] return [ a#12 ] ( main:2::menu:7 [ a#12 ] ) + //SEG20 [10] return [ ] ( main:2::menu:6 [ ] ) rts } -//SEG26 mode +//SEG21 mode mode: { - //SEG27 [13] phi from mode mode::@7 to mode::@1 [phi:mode/mode::@7->mode::@1] - b1_from_mode: - b1_from_b7: - //SEG28 [13] phi (byte) a#12 = (byte) a#1 [phi:mode/mode::@7->mode::@1#0] -- register_copy - jmp b1 - //SEG29 [13] phi from mode::@2 to mode::@1 [phi:mode::@2->mode::@1] - b1_from_b2: - jmp b1 - //SEG30 mode::@1 - b1: jmp b2 - //SEG31 mode::@2 + //SEG22 mode::@2 b2: - //SEG32 [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 [ ] ( main:2::menu:7::mode:10 [ ] ) -- _deref_pbuc1_neq_0_then_la1 + //SEG23 [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 [ ] ( main:2::menu:6::mode:9 [ ] ) -- _deref_pbuc1_neq_0_then_la1 lda B cmp #0 - bne b1_from_b2 - jmp b7 - //SEG33 mode::@7 - b7: - //SEG34 [15] (byte) a#5 ← *((const byte*) B#0) [ a#5 ] ( main:2::menu:7::mode:10 [ a#5 ] ) -- vbuz1=_deref_pbuc1 - lda B - sta a - jmp b1_from_b7 + bne b4_from_b2 + jmp b2 + //SEG24 [13] phi from mode::@2 to mode::@4 [phi:mode::@2->mode::@4] + b4_from_b2: + jmp b4 + //SEG25 mode::@4 + b4: + jmp b2 } REGISTER UPLIFT POTENTIAL REGISTERS -Statement [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 [ ] ( main:2::menu:7::mode:10 [ ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ a#1 a#12 a#5 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Statement [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 [ ] ( main:2::menu:6::mode:9 [ ] ) always clobbers reg byte a REGISTER UPLIFT SCOPES -Uplift Scope [] 242.6: zp ZP_BYTE:2 [ a#1 a#12 a#5 ] Uplift Scope [main] Uplift Scope [menu] Uplift Scope [mode] +Uplift Scope [] -Uplifting [] best 18376 combination reg byte a [ a#1 a#12 a#5 ] -Uplifting [main] best 18376 combination -Uplifting [menu] best 18376 combination -Uplifting [mode] best 18376 combination +Uplifting [main] best 11929 combination +Uplifting [menu] best 11929 combination +Uplifting [mode] best 11929 combination +Uplifting [] best 11929 combination ASSEMBLER BEFORE OPTIMIZATION //SEG0 Basic Upstart @@ -693,116 +558,86 @@ bend_from_b3: bend: //SEG9 main main: { - //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] - b1_from_main: - //SEG11 [5] phi (byte) a#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1 - lda #0 - jmp b1 - //SEG12 main::@1 - b1: - //SEG13 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - b2_from_b1: + //SEG10 [5] phi from main main::@2 to main::@2 [phi:main/main::@2->main::@2] + b2_from_main: + b2_from_b2: jmp b2 - //SEG14 main::@2 + //SEG11 main::@2 b2: - //SEG15 [7] call menu [ a#12 ] ( main:2 [ a#12 ] ) - //SEG16 [8] phi from main::@2 to menu [phi:main::@2->menu] + //SEG12 [6] call menu [ ] ( main:2 [ ] ) + //SEG13 [7] phi from main::@2 to menu [phi:main::@2->menu] menu_from_b2: jsr menu - //SEG17 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - b1_from_b2: - //SEG18 [5] phi (byte) a#1 = (byte) a#12 [phi:main::@2->main::@1#0] -- register_copy - jmp b1 + jmp b2_from_b2 } -//SEG19 menu +//SEG14 menu menu: { - //SEG20 [9] phi from menu to menu::@2 [phi:menu->menu::@2] + //SEG15 [8] phi from menu to menu::@2 [phi:menu->menu::@2] b2_from_menu: jmp b2 - //SEG21 menu::@2 + //SEG16 menu::@2 b2: - //SEG22 [10] call mode [ a#12 ] ( main:2::menu:7 [ a#12 ] ) - //SEG23 [12] phi from menu::@2 to mode [phi:menu::@2->mode] + //SEG17 [9] call mode [ ] ( main:2::menu:6 [ ] ) + //SEG18 [11] phi from menu::@2 to mode [phi:menu::@2->mode] mode_from_b2: jsr mode jmp breturn - //SEG24 menu::@return + //SEG19 menu::@return breturn: - //SEG25 [11] return [ a#12 ] ( main:2::menu:7 [ a#12 ] ) + //SEG20 [10] return [ ] ( main:2::menu:6 [ ] ) rts } -//SEG26 mode +//SEG21 mode mode: { - //SEG27 [13] phi from mode mode::@7 to mode::@1 [phi:mode/mode::@7->mode::@1] - b1_from_mode: - b1_from_b7: - //SEG28 [13] phi (byte) a#12 = (byte) a#1 [phi:mode/mode::@7->mode::@1#0] -- register_copy - jmp b1 - //SEG29 [13] phi from mode::@2 to mode::@1 [phi:mode::@2->mode::@1] - b1_from_b2: - jmp b1 - //SEG30 mode::@1 - b1: jmp b2 - //SEG31 mode::@2 + //SEG22 mode::@2 b2: - //SEG32 [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 [ ] ( main:2::menu:7::mode:10 [ ] ) -- _deref_pbuc1_neq_0_then_la1 + //SEG23 [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 [ ] ( main:2::menu:6::mode:9 [ ] ) -- _deref_pbuc1_neq_0_then_la1 lda B cmp #0 - bne b1_from_b2 - jmp b7 - //SEG33 mode::@7 - b7: - //SEG34 [15] (byte) a#5 ← *((const byte*) B#0) [ a#5 ] ( main:2::menu:7::mode:10 [ a#5 ] ) -- vbuaa=_deref_pbuc1 - lda B - jmp b1_from_b7 + bne b4_from_b2 + jmp b2 + //SEG24 [13] phi from mode::@2 to mode::@4 [phi:mode::@2->mode::@4] + b4_from_b2: + jmp b4 + //SEG25 mode::@4 + b4: + jmp b2 } ASSEMBLER OPTIMIZATIONS Removing instruction jmp b3 Removing instruction jmp bend -Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp b2 Removing instruction jmp breturn -Removing instruction jmp b1 Removing instruction jmp b2 -Removing instruction jmp b7 +Removing instruction jmp b4 Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1 with b2 -Replacing label b1 with b2 -Replacing label b1_from_b2 with b2 +Replacing label b2_from_b2 with b2 +Replacing label b4_from_b2 with b4 Removing instruction bbegin: Removing instruction b3_from_bbegin: Removing instruction main_from_b3: Removing instruction bend_from_b3: -Removing instruction b1: -Removing instruction b2_from_b1: +Removing instruction b2_from_main: +Removing instruction b2_from_b2: Removing instruction menu_from_b2: Removing instruction b2_from_menu: Removing instruction mode_from_b2: -Removing instruction b1_from_mode: -Removing instruction b1_from_b2: -Removing instruction b1: +Removing instruction b4_from_b2: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction b3: Removing instruction bend: -Removing instruction b1_from_main: -Removing instruction b1_from_b2: Removing instruction b2: Removing instruction breturn: -Removing instruction b7: Succesful ASM optimization Pass5UnusedLabelElimination -Skipping double jump to b2 in jmp b1_from_b7 +Skipping double jump to b2 in bne b4 Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b1_from_b7 to b1 -Succesful ASM optimization Pass5RelabelLongLabels -Removing instruction jmp b2 -Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda B -Succesful ASM optimization Pass5UnnecesaryLoadElimination -Removing instruction b1: -Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction b4: +Succesful ASM optimization Pass5UnusedLabelElimination +Removing unreachable instruction jmp b2 +Succesful ASM optimization Pass5UnreachableCodeElimination FINAL SYMBOL TABLE (label) @3 @@ -810,26 +645,19 @@ FINAL SYMBOL TABLE (label) @end (byte*) B (const byte*) B#0 B = ((byte*))(word/signed word/dword/signed dword) 4096 -(byte) a -(byte) a#1 reg byte a 2.6 -(byte) a#12 reg byte a 38.0 -(byte) a#5 reg byte a 202.0 (void()) main() -(label) main::@1 (label) main::@2 (void()) menu() (label) menu::@2 (label) menu::@return (void()) mode() -(label) mode::@1 (label) mode::@2 -(label) mode::@7 +(label) mode::@4 -reg byte a [ a#1 a#12 a#5 ] FINAL ASSEMBLER -Score: 8874 +Score: 11527 //SEG0 Basic Upstart .pc = $801 "Basic" @@ -847,45 +675,35 @@ Score: 8874 //SEG8 @end //SEG9 main main: { - //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] - //SEG11 [5] phi (byte) a#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1 - lda #0 - //SEG12 main::@1 - //SEG13 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - //SEG14 main::@2 + //SEG10 [5] phi from main main::@2 to main::@2 [phi:main/main::@2->main::@2] + //SEG11 main::@2 b2: - //SEG15 [7] call menu [ a#12 ] ( main:2 [ a#12 ] ) - //SEG16 [8] phi from main::@2 to menu [phi:main::@2->menu] + //SEG12 [6] call menu [ ] ( main:2 [ ] ) + //SEG13 [7] phi from main::@2 to menu [phi:main::@2->menu] jsr menu - //SEG17 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1] - //SEG18 [5] phi (byte) a#1 = (byte) a#12 [phi:main::@2->main::@1#0] -- register_copy jmp b2 } -//SEG19 menu +//SEG14 menu menu: { - //SEG20 [9] phi from menu to menu::@2 [phi:menu->menu::@2] - //SEG21 menu::@2 - //SEG22 [10] call mode [ a#12 ] ( main:2::menu:7 [ a#12 ] ) - //SEG23 [12] phi from menu::@2 to mode [phi:menu::@2->mode] + //SEG15 [8] phi from menu to menu::@2 [phi:menu->menu::@2] + //SEG16 menu::@2 + //SEG17 [9] call mode [ ] ( main:2::menu:6 [ ] ) + //SEG18 [11] phi from menu::@2 to mode [phi:menu::@2->mode] jsr mode - //SEG24 menu::@return - //SEG25 [11] return [ a#12 ] ( main:2::menu:7 [ a#12 ] ) + //SEG19 menu::@return + //SEG20 [10] return [ ] ( main:2::menu:6 [ ] ) rts } -//SEG26 mode +//SEG21 mode mode: { - //SEG27 [13] phi from mode mode::@7 to mode::@1 [phi:mode/mode::@7->mode::@1] - //SEG28 [13] phi (byte) a#12 = (byte) a#1 [phi:mode/mode::@7->mode::@1#0] -- register_copy - //SEG29 [13] phi from mode::@2 to mode::@1 [phi:mode::@2->mode::@1] - //SEG30 mode::@1 - //SEG31 mode::@2 + //SEG22 mode::@2 b2: - //SEG32 [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 [ ] ( main:2::menu:7::mode:10 [ ] ) -- _deref_pbuc1_neq_0_then_la1 + //SEG23 [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 [ ] ( main:2::menu:6::mode:9 [ ] ) -- _deref_pbuc1_neq_0_then_la1 lda B cmp #0 bne b2 - //SEG33 mode::@7 - //SEG34 [15] (byte) a#5 ← *((const byte*) B#0) [ a#5 ] ( main:2::menu:7::mode:10 [ a#5 ] ) -- vbuaa=_deref_pbuc1 jmp b2 + //SEG24 [13] phi from mode::@2 to mode::@4 [phi:mode::@2->mode::@4] + //SEG25 mode::@4 } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.sym b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.sym index 49a7d62c4..6a0e6d39f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.sym @@ -3,19 +3,12 @@ (label) @end (byte*) B (const byte*) B#0 B = ((byte*))(word/signed word/dword/signed dword) 4096 -(byte) a -(byte) a#1 reg byte a 2.6 -(byte) a#12 reg byte a 38.0 -(byte) a#5 reg byte a 202.0 (void()) main() -(label) main::@1 (label) main::@2 (void()) menu() (label) menu::@2 (label) menu::@return (void()) mode() -(label) mode::@1 (label) mode::@2 -(label) mode::@7 +(label) mode::@4 -reg byte a [ a#1 a#12 a#5 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/immzero.asm b/src/test/java/dk/camelot64/kickc/test/ref/immzero.asm index 8391e6d23..c20e255d6 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/immzero.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/immzero.asm @@ -4,10 +4,10 @@ jsr main main: { .label w = 2 - lda #<0 + ldx #0 + txa sta w sta w+1 - tax b1: txa clc diff --git a/src/test/java/dk/camelot64/kickc/test/ref/immzero.cfg b/src/test/java/dk/camelot64/kickc/test/ref/immzero.cfg index 2d1d504bf..87c40f786 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/immzero.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/immzero.cfg @@ -11,11 +11,11 @@ main: scope:[main] from @1 [4] phi() [ ] ( main:2 [ ] ) to:main::@1 main::@1: scope:[main] from main main::@1 - [5] (word) main::w#2 ← phi( main/((word))(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(word) main::w#1 ) [ main::i#1 main::w#2 ] ( main:2 [ main::i#1 main::w#2 ] ) - [5] (byte) main::i#1 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::j#1 ) [ main::i#1 main::w#2 ] ( main:2 [ main::i#1 main::w#2 ] ) - [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::i#1 [ main::i#1 main::w#1 ] ( main:2 [ main::i#1 main::w#1 ] ) - [7] (byte) main::j#1 ← ++ (byte) main::i#1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) - [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) + [5] (byte) main::j#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::j#1 ) [ main::w#2 main::j#2 ] ( main:2 [ main::w#2 main::j#2 ] ) + [5] (word) main::w#2 ← phi( main/((word))(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(word) main::w#1 ) [ main::w#2 main::j#2 ] ( main:2 [ main::w#2 main::j#2 ] ) + [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::j#2 [ main::j#2 main::w#1 ] ( main:2 [ main::j#2 main::w#1 ] ) + [7] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) + [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) to:main::@return main::@return: scope:[main] from main::@1 [9] return [ ] ( main:2 [ ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/immzero.log b/src/test/java/dk/camelot64/kickc/test/ref/immzero.log index c56e17aac..895f874d9 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/immzero.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/immzero.log @@ -50,6 +50,8 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 +Eliminating unused variable (byte) main::i and assignment [0] (byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable main::i(null) and assignment [4] main::i(null) ← (byte) main::j Removing empty block main::@2 PROCEDURE MODIFY VARIABLE ANALYSIS @@ -59,15 +61,13 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN @begin: scope:[] from to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte/signed byte/word/signed word/dword/signed dword~) main::$0 ← ((word)) (byte/signed byte/word/signed word/dword/signed dword) 0 (word) main::w#0 ← (byte/signed byte/word/signed word/dword/signed dword~) main::$0 (byte) main::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (word) main::w#2 ← phi( main/(word) main::w#0 main::@1/(word) main::w#1 ) (byte) main::j#2 ← phi( main/(byte) main::j#0 main::@1/(byte) main::j#1 ) - (byte) main::i#1 ← (byte) main::j#2 + (word) main::w#2 ← phi( main/(word) main::w#0 main::@1/(word) main::w#1 ) (word~) main::$1 ← (word) main::w#2 + (byte) main::j#2 (word) main::w#1 ← (word~) main::$1 (byte) main::j#1 ← (byte) main::j#2 + rangenext(0,10) @@ -95,9 +95,6 @@ SYMBOL TABLE SSA (bool~) main::$2 (label) main::@1 (label) main::@return -(byte) main::i -(byte) main::i#0 -(byte) main::i#1 (byte) main::j (byte) main::j#0 (byte) main::j#1 @@ -111,23 +108,20 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks Alias (word) main::w#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$0 -Alias (byte) main::i#1 = (byte) main::j#2 Alias (word) main::w#1 = (word~) main::$1 Succesful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$2 if((byte) main::j#1!=rangelast(0,10)) goto main::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification -Constant (const byte) main::i#0 = 0 Constant (const word) main::w#0 = ((word))0 Constant (const byte) main::j#0 = 0 Succesful SSA optimization Pass2ConstantIdentification -Eliminating unused constant (const byte) main::i#0 -Succesful SSA optimization PassNEliminateUnusedVars -Resolved ranged next value main::j#1 ← ++ main::i#1 to ++ +Resolved ranged next value main::j#1 ← ++ main::j#2 to ++ Resolved ranged comparison value if(main::j#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) main::w#0 Inlining constant with var siblings (const word) main::w#0 Inlining constant with var siblings (const byte) main::j#0 +Inlining constant with var siblings (const byte) main::j#0 Constant inlined main::w#0 = ((word))(byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Succesful SSA optimization Pass2ConstantInlining @@ -145,10 +139,9 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... -Propagating live ranges... Created 2 initial phi equivalence classes -Coalesced [10] main::i#2 ← main::j#1 -Coalesced [11] main::w#3 ← main::w#1 +Coalesced [10] main::w#3 ← main::w#1 +Coalesced [11] main::j#3 ← main::j#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@3 Block Sequence Planned @begin @1 @end main main::@1 main::@return @@ -174,11 +167,11 @@ main: scope:[main] from @1 [4] phi() [ ] ( main:2 [ ] ) to:main::@1 main::@1: scope:[main] from main main::@1 - [5] (word) main::w#2 ← phi( main/((word))(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(word) main::w#1 ) [ main::i#1 main::w#2 ] ( main:2 [ main::i#1 main::w#2 ] ) - [5] (byte) main::i#1 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::j#1 ) [ main::i#1 main::w#2 ] ( main:2 [ main::i#1 main::w#2 ] ) - [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::i#1 [ main::i#1 main::w#1 ] ( main:2 [ main::i#1 main::w#1 ] ) - [7] (byte) main::j#1 ← ++ (byte) main::i#1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) - [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) + [5] (byte) main::j#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::j#1 ) [ main::w#2 main::j#2 ] ( main:2 [ main::w#2 main::j#2 ] ) + [5] (word) main::w#2 ← phi( main/((word))(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(word) main::w#1 ) [ main::w#2 main::j#2 ] ( main:2 [ main::w#2 main::j#2 ] ) + [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::j#2 [ main::j#2 main::w#1 ] ( main:2 [ main::j#2 main::w#1 ] ) + [7] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) + [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) to:main::@return main::@return: scope:[main] from main::@1 [9] return [ ] ( main:2 [ ] ) @@ -206,22 +199,21 @@ Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1 VARIABLE REGISTER WEIGHTS (void()) main() -(byte) main::i -(byte) main::i#1 16.5 (byte) main::j (byte) main::j#1 16.5 +(byte) main::j#2 16.5 (word) main::w (word) main::w#1 7.333333333333333 (word) main::w#2 22.0 Initial phi equivalence classes -[ main::i#1 main::j#1 ] [ main::w#2 main::w#1 ] +[ main::j#2 main::j#1 ] Complete equivalence classes -[ main::i#1 main::j#1 ] [ main::w#2 main::w#1 ] -Allocated zp ZP_BYTE:2 [ main::i#1 main::j#1 ] -Allocated zp ZP_WORD:3 [ main::w#2 main::w#1 ] +[ main::j#2 main::j#1 ] +Allocated zp ZP_WORD:2 [ main::w#2 main::w#1 ] +Allocated zp ZP_BYTE:4 [ main::j#2 main::j#1 ] INITIAL ASM //SEG0 Basic Upstart @@ -247,38 +239,37 @@ bend_from_b1: bend: //SEG9 main main: { - .label i = 2 - .label w = 3 - .label j = 2 + .label w = 2 + .label j = 4 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: - //SEG11 [5] phi (word) main::w#2 = ((word))(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + //SEG11 [5] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta j + //SEG12 [5] phi (word) main::w#2 = ((word))(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vwuz1=vbuc1 lda #<0 sta w lda #>0 sta w+1 - //SEG12 [5] phi (byte) main::i#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 - lda #0 - sta i jmp b1 //SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] b1_from_b1: - //SEG14 [5] phi (word) main::w#2 = (word) main::w#1 [phi:main::@1->main::@1#0] -- register_copy - //SEG15 [5] phi (byte) main::i#1 = (byte) main::j#1 [phi:main::@1->main::@1#1] -- register_copy + //SEG14 [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@1->main::@1#0] -- register_copy + //SEG15 [5] phi (word) main::w#2 = (word) main::w#1 [phi:main::@1->main::@1#1] -- register_copy jmp b1 //SEG16 main::@1 b1: - //SEG17 [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::i#1 [ main::i#1 main::w#1 ] ( main:2 [ main::i#1 main::w#1 ] ) -- vwuz1=vwuz1_plus_vbuz2 - lda i + //SEG17 [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::j#2 [ main::j#2 main::w#1 ] ( main:2 [ main::j#2 main::w#1 ] ) -- vwuz1=vwuz1_plus_vbuz2 + lda j clc adc w sta w lda #0 adc w+1 sta w+1 - //SEG18 [7] (byte) main::j#1 ← ++ (byte) main::i#1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG18 [7] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) -- vbuz1=_inc_vbuz1 inc j - //SEG19 [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG19 [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda j cmp #$b bne b1_from_b1 @@ -290,19 +281,18 @@ main: { } REGISTER UPLIFT POTENTIAL REGISTERS -Statement [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::i#1 [ main::i#1 main::w#1 ] ( main:2 [ main::i#1 main::w#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#1 main::j#1 ] -Statement [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::i#1 [ main::i#1 main::w#1 ] ( main:2 [ main::i#1 main::w#1 ] ) always clobbers reg byte a -Potential registers zp ZP_BYTE:2 [ main::i#1 main::j#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:3 [ main::w#2 main::w#1 ] : zp ZP_WORD:3 , +Statement [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::j#2 [ main::j#2 main::w#1 ] ( main:2 [ main::j#2 main::w#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::j#2 main::j#1 ] +Statement [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::j#2 [ main::j#2 main::w#1 ] ( main:2 [ main::j#2 main::w#1 ] ) always clobbers reg byte a +Potential registers zp ZP_WORD:2 [ main::w#2 main::w#1 ] : zp ZP_WORD:2 , +Potential registers zp ZP_BYTE:4 [ main::j#2 main::j#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 33: zp ZP_BYTE:2 [ main::i#1 main::j#1 ] 29.33: zp ZP_WORD:3 [ main::w#2 main::w#1 ] +Uplift Scope [main] 33: zp ZP_BYTE:4 [ main::j#2 main::j#1 ] 29.33: zp ZP_WORD:2 [ main::w#2 main::w#1 ] Uplift Scope [] -Uplifting [main] best 473 combination reg byte x [ main::i#1 main::j#1 ] zp ZP_WORD:3 [ main::w#2 main::w#1 ] +Uplifting [main] best 473 combination reg byte x [ main::j#2 main::j#1 ] zp ZP_WORD:2 [ main::w#2 main::w#1 ] Uplifting [] best 473 combination -Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ main::w#2 main::w#1 ] ASSEMBLER BEFORE OPTIMIZATION //SEG0 Basic Upstart @@ -331,22 +321,22 @@ main: { .label w = 2 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: - //SEG11 [5] phi (word) main::w#2 = ((word))(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 + //SEG11 [5] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG12 [5] phi (word) main::w#2 = ((word))(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vwuz1=vbuc1 lda #<0 sta w lda #>0 sta w+1 - //SEG12 [5] phi (byte) main::i#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 - ldx #0 jmp b1 //SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] b1_from_b1: - //SEG14 [5] phi (word) main::w#2 = (word) main::w#1 [phi:main::@1->main::@1#0] -- register_copy - //SEG15 [5] phi (byte) main::i#1 = (byte) main::j#1 [phi:main::@1->main::@1#1] -- register_copy + //SEG14 [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@1->main::@1#0] -- register_copy + //SEG15 [5] phi (word) main::w#2 = (word) main::w#1 [phi:main::@1->main::@1#1] -- register_copy jmp b1 //SEG16 main::@1 b1: - //SEG17 [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::i#1 [ main::i#1 main::w#1 ] ( main:2 [ main::i#1 main::w#1 ] ) -- vwuz1=vwuz1_plus_vbuxx + //SEG17 [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::j#2 [ main::j#2 main::w#1 ] ( main:2 [ main::j#2 main::w#1 ] ) -- vwuz1=vwuz1_plus_vbuxx txa clc adc w @@ -354,9 +344,9 @@ main: { lda #0 adc w+1 sta w+1 - //SEG18 [7] (byte) main::j#1 ← ++ (byte) main::i#1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) -- vbuxx=_inc_vbuxx + //SEG18 [7] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG19 [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG19 [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$b bne b1_from_b1 jmp breturn @@ -372,8 +362,8 @@ Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination +Replacing instruction lda #<0 with TXA Removing instruction lda #>0 -Replacing instruction ldx #0 with TAX Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b1 with b1 Removing instruction bbegin: @@ -397,16 +387,15 @@ FINAL SYMBOL TABLE (void()) main() (label) main::@1 (label) main::@return -(byte) main::i -(byte) main::i#1 reg byte x 16.5 (byte) main::j (byte) main::j#1 reg byte x 16.5 +(byte) main::j#2 reg byte x 16.5 (word) main::w (word) main::w#1 w zp ZP_WORD:2 7.333333333333333 (word) main::w#2 w zp ZP_WORD:2 22.0 -reg byte x [ main::i#1 main::j#1 ] zp ZP_WORD:2 [ main::w#2 main::w#1 ] +reg byte x [ main::j#2 main::j#1 ] FINAL ASSEMBLER @@ -429,18 +418,18 @@ Score: 357 main: { .label w = 2 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] - //SEG11 [5] phi (word) main::w#2 = ((word))(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 - lda #<0 + //SEG11 [5] phi (byte) main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG12 [5] phi (word) main::w#2 = ((word))(byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vwuz1=vbuc1 + txa sta w sta w+1 - //SEG12 [5] phi (byte) main::i#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1 - tax //SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] - //SEG14 [5] phi (word) main::w#2 = (word) main::w#1 [phi:main::@1->main::@1#0] -- register_copy - //SEG15 [5] phi (byte) main::i#1 = (byte) main::j#1 [phi:main::@1->main::@1#1] -- register_copy + //SEG14 [5] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@1->main::@1#0] -- register_copy + //SEG15 [5] phi (word) main::w#2 = (word) main::w#1 [phi:main::@1->main::@1#1] -- register_copy //SEG16 main::@1 b1: - //SEG17 [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::i#1 [ main::i#1 main::w#1 ] ( main:2 [ main::i#1 main::w#1 ] ) -- vwuz1=vwuz1_plus_vbuxx + //SEG17 [6] (word) main::w#1 ← (word) main::w#2 + (byte) main::j#2 [ main::j#2 main::w#1 ] ( main:2 [ main::j#2 main::w#1 ] ) -- vwuz1=vwuz1_plus_vbuxx txa clc adc w @@ -448,9 +437,9 @@ main: { lda #0 adc w+1 sta w+1 - //SEG18 [7] (byte) main::j#1 ← ++ (byte) main::i#1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) -- vbuxx=_inc_vbuxx + //SEG18 [7] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG19 [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::j#1 main::w#1 ] ( main:2 [ main::j#1 main::w#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG19 [8] if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1 [ main::w#1 main::j#1 ] ( main:2 [ main::w#1 main::j#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$b bne b1 //SEG20 main::@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/immzero.sym b/src/test/java/dk/camelot64/kickc/test/ref/immzero.sym index 96c04793d..b067eec77 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/immzero.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/immzero.sym @@ -4,13 +4,12 @@ (void()) main() (label) main::@1 (label) main::@return -(byte) main::i -(byte) main::i#1 reg byte x 16.5 (byte) main::j (byte) main::j#1 reg byte x 16.5 +(byte) main::j#2 reg byte x 16.5 (word) main::w (word) main::w#1 w zp ZP_WORD:2 7.333333333333333 (word) main::w#2 w zp ZP_WORD:2 22.0 -reg byte x [ main::i#1 main::j#1 ] zp ZP_WORD:2 [ main::w#2 main::w#1 ] +reg byte x [ main::j#2 main::j#1 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/line-anim.asm b/src/test/java/dk/camelot64/kickc/test/ref/line-anim.asm index 2453dde03..1a1ad4f5a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/line-anim.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/line-anim.asm @@ -17,8 +17,6 @@ .label BITMAP = $a000 .label SCREEN = $8800 .const DELAY = 8 - .label rem16s = 3 - .label rem16u = 9 jsr main main: { .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)>>6 @@ -40,11 +38,7 @@ main: { jsr bitmap_init jsr bitmap_clear jsr screen_fill - lda #<0 - sta rem16s - sta rem16s+1 - sta rem16u - sta rem16u+1 + lda #0 sta i b1: jsr point_init @@ -72,10 +66,10 @@ main: { jmp b5 } bitmap_plot: { - .label _1 = $b - .label x = 5 - .label plotter = 7 - .label _3 = 7 + .label _1 = 7 + .label x = 3 + .label plotter = 5 + .label _3 = 5 lda bitmap_plot_yhi,y sta _3+1 lda bitmap_plot_ylo,y @@ -102,20 +96,20 @@ bitmap_plot: { rts } point_init: { - .label _4 = $e - .label _5 = 5 - .label _16 = 5 - .label _17 = 5 - .label _18 = 5 + .label _4 = 7 + .label _5 = 3 + .label _16 = 3 + .label _17 = 3 + .label _18 = 3 .label point_idx = 2 - .label point_idx1 = $d - .label y_diff = $e - .label abs16s1__2 = 5 - .label abs16s1_return = 5 - .label abs16s2__2 = 7 - .label abs16s2_return = 7 + .label point_idx1 = $b + .label y_diff = 7 + .label abs16s1__2 = 3 + .label abs16s1_return = 3 + .label abs16s2__2 = 5 + .label abs16s2_return = 5 .label x_stepf = 5 - .label x_diff = $b + .label x_diff = 9 lda point_idx lsr sta point_idx1 @@ -216,10 +210,6 @@ point_init: { lda #$10 sta x_add,y b4: - lda y_diff - sta divr16s.rem - lda y_diff+1 - sta divr16s.rem+1 jsr divr16s lda x_stepf+1 lsr @@ -259,15 +249,15 @@ point_init: { } divr16s: { .const dividend = 0 - .label _7 = 9 - .label _11 = $b + .label _7 = 7 + .label _11 = 9 .label resultu = 5 .label return = 5 - .label divisor = $b - .label rem = 9 + .label divisor = 9 + .label rem = 7 .label dividendu = 3 - .label divisoru = $b - .label remu = 9 + .label divisoru = 9 + .label remu = 7 lda rem+1 bmi b1 lda #> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ) - [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ) - [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ) - [24] call bitmap_plot [ main::i#2 rem16u#18 rem16s#13 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 ] ) + [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 main::$9 ] ( main:2 [ main::i#2 main::$9 ] ) + [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 main::$9 bitmap_plot::x#0 ] ) + [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ) + [24] call bitmap_plot [ main::i#2 ] ( main:2 [ main::i#2 ] ) to:main::@21 main::@21: scope:[main] from main::@20 - [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) - [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) + [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) + [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@5 main::@5: scope:[main] from main::@21 main::@5 main::@7 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) @@ -61,256 +59,251 @@ main::@7: scope:[main] from main::@5 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ ] ( main:2 [ ] ) to:main::@5 bitmap_plot: scope:[bitmap_plot] from main::@20 - [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 ] ) - [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) - [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) - [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) - [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) + [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 ] ) + [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) + [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) + [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) + [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) to:bitmap_plot::@return bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot - [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) + [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) to:@return point_init: scope:[point_init] from main::@1 - [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ) - [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) - [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) - [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) - [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) + [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) + [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) + [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) + [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::abs16s1 point_init::abs16s1: scope:[point_init] from point_init - [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@12 point_init::@12: scope:[point_init] from point_init::abs16s1 - [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) + [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) to:point_init::abs16s1_@return point_init::abs16s1_@return: scope:[point_init] from point_init::@12 point_init::abs16s1_@1 - [42] (word) point_init::abs16s1_return#2 ← phi( point_init::abs16s1_@1/(word~) point_init::abs16s1_return#5 point_init::@12/(word~) point_init::abs16s1_return#6 ) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) + [42] (word) point_init::abs16s1_return#2 ← phi( point_init::abs16s1_@1/(word~) point_init::abs16s1_return#5 point_init::@12/(word~) point_init::abs16s1_return#6 ) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) to:point_init::abs16s2 point_init::abs16s2: scope:[point_init] from point_init::abs16s1_@return - [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) + [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) to:point_init::@13 point_init::@13: scope:[point_init] from point_init::abs16s2 - [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) + [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) to:point_init::abs16s2_@return point_init::abs16s2_@return: scope:[point_init] from point_init::@13 point_init::abs16s2_@1 - [45] (word) point_init::abs16s2_return#2 ← phi( point_init::abs16s2_@1/(word~) point_init::abs16s2_return#5 point_init::@13/(word~) point_init::abs16s2_return#6 ) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#2 ] ) + [45] (word) point_init::abs16s2_return#2 ← phi( point_init::abs16s2_@1/(word~) point_init::abs16s2_return#5 point_init::@13/(word~) point_init::abs16s2_return#6 ) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#2 ] ) to:point_init::@10 point_init::@10: scope:[point_init] from point_init::abs16s2_@return - [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@2 point_init::@2: scope:[point_init] from point_init::@10 point_init::@11 - [47] (signed word) rem16s#13 ← phi( point_init::@10/(signed word) rem16s#15 point_init::@11/(signed word) rem16s#3 ) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) - [47] (word) rem16u#18 ← phi( point_init::@10/(word) rem16u#21 point_init::@11/(word) divr16u::rem#10 ) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) - [48] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) - [49] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) - [50] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) - [51] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) - [52] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ rem16u#18 rem16s#13 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx1#0 ] ) - [53] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) + [47] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) + [48] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) + [49] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) + [50] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) + [51] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx1#0 ] ) + [52] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ ] ( main:2::point_init:20 [ main::i#2 ] ) to:point_init::@return point_init::@return: scope:[point_init] from point_init::@2 - [54] return [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) + [53] return [ ] ( main:2::point_init:20 [ main::i#2 ] ) to:@return point_init::@1: scope:[point_init] from point_init point_init::@10 - [55] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [54] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@7 point_init::@7: scope:[point_init] from point_init::@1 - [56] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [55] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@4 point_init::@4: scope:[point_init] from point_init::@3 point_init::@7 - [57] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) - [58] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) - [59] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) - [60] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ) + [56] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) + [57] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) + [58] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) + [59] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ) to:point_init::@11 point_init::@11: scope:[point_init] from point_init::@4 - [61] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ) - [62] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ) - [63] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ) - [64] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ) + [60] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ) + [61] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ) + [62] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ) + [63] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) to:point_init::@2 point_init::@3: scope:[point_init] from point_init::@1 - [65] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [64] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@4 point_init::abs16s2_@1: scope:[point_init] from point_init::abs16s2 - [66] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) - [67] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) + [65] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) + [66] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) to:point_init::abs16s2_@return point_init::abs16s1_@1: scope:[point_init] from point_init::abs16s1 - [68] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) - [69] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) + [67] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) + [68] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) to:point_init::abs16s1_@return divr16s: scope:[divr16s] from point_init::@4 - [70] phi() [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) + [69] phi() [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) to:divr16s::@16 divr16s::@16: scope:[divr16s] from divr16s - [71] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) + [70] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) to:divr16s::@17 divr16s::@17: scope:[divr16s] from divr16s::@16 - [72] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) + [71] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) to:divr16s::@2 divr16s::@2: scope:[divr16s] from divr16s::@1 divr16s::@17 - [73] (word) divr16s::remu#3 ← phi( divr16s::@1/(word~) divr16s::remu#7 divr16s::@17/(word~) divr16s::remu#8 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) - [73] (word) divr16s::dividendu#3 ← phi( divr16s::@1/((word))-(const signed word) divr16s::dividend#0 divr16s::@17/((word))(const signed word) divr16s::dividend#0 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) - [73] (byte) divr16s::neg#3 ← phi( divr16s::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 divr16s::@17/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) - [74] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) + [72] (word) divr16s::remu#3 ← phi( divr16s::@1/(word~) divr16s::remu#7 divr16s::@17/(word~) divr16s::remu#8 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) + [72] (word) divr16s::dividendu#3 ← phi( divr16s::@1/((word))-(const signed word) divr16s::dividend#0 divr16s::@17/((word))(const signed word) divr16s::dividend#0 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) + [72] (byte) divr16s::neg#3 ← phi( divr16s::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 divr16s::@17/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) + [73] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) to:divr16s::@18 divr16s::@18: scope:[divr16s] from divr16s::@2 - [75] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) + [74] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) to:divr16s::@4 divr16s::@4: scope:[divr16s] from divr16s::@18 divr16s::@3 - [76] (byte) divr16s::neg#4 ← phi( divr16s::@3/(byte) divr16s::neg#2 divr16s::@18/(byte) divr16s::neg#3 ) [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ) - [76] (word) divr16s::divisoru#3 ← phi( divr16s::@3/(word~) divr16s::divisoru#4 divr16s::@18/(word~) divr16s::divisoru#5 ) [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ) - [77] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) - [78] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) - [79] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) - [80] call divr16u [ divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ) - [81] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ) + [75] (byte) divr16s::neg#4 ← phi( divr16s::@3/(byte) divr16s::neg#2 divr16s::@18/(byte) divr16s::neg#3 ) [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ) + [75] (word) divr16s::divisoru#3 ← phi( divr16s::@3/(word~) divr16s::divisoru#4 divr16s::@18/(word~) divr16s::divisoru#5 ) [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ) + [76] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) + [77] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) + [78] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) + [79] call divr16u [ divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) + [80] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#2 ] ) to:divr16s::@15 divr16s::@15: scope:[divr16s] from divr16s::@4 - [82] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ) - [83] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16u::rem#10 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 ] ) + [81] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16s::resultu#0 ] ) + [82] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::resultu#0 ] ) to:divr16s::@11 divr16s::@11: scope:[divr16s] from divr16s::@15 - [84] (signed word) rem16s#2 ← - (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ) - [85] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 rem16s#2 divr16s::return#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#2 divr16s::return#1 ] ) + [83] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16s::return#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#1 ] ) to:divr16s::@return divr16s::@return: scope:[divr16s] from divr16s::@11 divr16s::@19 - [86] (signed word) rem16s#3 ← phi( divr16s::@11/(signed word) rem16s#2 divr16s::@19/(signed word~) rem16s#57 ) [ divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) - [86] (signed word) divr16s::return#2 ← phi( divr16s::@11/(signed word) divr16s::return#1 divr16s::@19/(signed word~) divr16s::return#7 ) [ divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) - [87] return [ divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) + [84] (signed word) divr16s::return#2 ← phi( divr16s::@11/(signed word) divr16s::return#1 divr16s::@19/(signed word~) divr16s::return#7 ) [ divr16s::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) + [85] return [ divr16s::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) to:@return divr16s::@19: scope:[divr16s] from divr16s::@15 - [88] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 divr16s::return#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 ] ) - [89] (signed word~) rem16s#57 ← (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::return#7 rem16s#57 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 rem16s#57 ] ) + [86] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16s::return#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#7 ] ) to:divr16s::@return divr16s::@3: scope:[divr16s] from divr16s::@2 - [90] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) - [91] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) - [92] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) + [87] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) + [88] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) + [89] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) to:divr16s::@4 divr16s::@1: scope:[divr16s] from divr16s::@16 - [93] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) - [94] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) + [90] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) + [91] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) to:divr16s::@2 divr16u: scope:[divr16u] from divr16s::@4 - [95] phi() [ divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) + [92] phi() [ divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [96] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [96] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [96] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [96] (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#3 divr16u::@3/(word) divr16u::rem#10 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [97] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) - [98] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) - [99] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) - [100] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) + [93] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [93] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [93] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [93] (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#3 divr16u::@3/(word) divr16u::rem#9 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [94] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) + [95] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) + [96] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) + [97] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [101] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) + [98] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [102] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ) - [103] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) - [104] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) - [105] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) + [99] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ) + [100] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) + [101] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) + [102] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [106] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) - [107] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) + [103] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) + [104] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [108] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ) - [108] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ) - [109] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) - [110] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) + [105] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [105] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [106] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) + [107] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 - [111] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::return#0 ] ) + [108] return [ divr16u::return#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) to:@return screen_fill: scope:[screen_fill] from main::@18 - [112] phi() [ ] ( main:2::screen_fill:17 [ ] ) + [109] phi() [ ] ( main:2::screen_fill:17 [ ] ) to:screen_fill::@1 screen_fill::@1: scope:[screen_fill] from screen_fill screen_fill::@3 - [113] (byte) screen_fill::y#4 ← phi( screen_fill/(byte/signed byte/word/signed word/dword/signed dword) 0 screen_fill::@3/(byte) screen_fill::y#1 ) [ screen_fill::screen#3 screen_fill::y#4 ] ( main:2::screen_fill:17 [ screen_fill::screen#3 screen_fill::y#4 ] ) - [113] (byte*) screen_fill::screen#3 ← phi( screen_fill/(const byte*) SCREEN#0 screen_fill::@3/(byte*) screen_fill::screen#1 ) [ screen_fill::screen#3 screen_fill::y#4 ] ( main:2::screen_fill:17 [ screen_fill::screen#3 screen_fill::y#4 ] ) + [110] (byte) screen_fill::y#4 ← phi( screen_fill/(byte/signed byte/word/signed word/dword/signed dword) 0 screen_fill::@3/(byte) screen_fill::y#1 ) [ screen_fill::screen#3 screen_fill::y#4 ] ( main:2::screen_fill:17 [ screen_fill::screen#3 screen_fill::y#4 ] ) + [110] (byte*) screen_fill::screen#3 ← phi( screen_fill/(const byte*) SCREEN#0 screen_fill::@3/(byte*) screen_fill::screen#1 ) [ screen_fill::screen#3 screen_fill::y#4 ] ( main:2::screen_fill:17 [ screen_fill::screen#3 screen_fill::y#4 ] ) to:screen_fill::@2 screen_fill::@2: scope:[screen_fill] from screen_fill::@1 screen_fill::@2 - [114] (byte) screen_fill::x#2 ← phi( screen_fill::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 screen_fill::@2/(byte) screen_fill::x#1 ) [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) - [114] (byte*) screen_fill::screen#2 ← phi( screen_fill::@1/(byte*) screen_fill::screen#3 screen_fill::@2/(byte*) screen_fill::screen#1 ) [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) - [115] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) - [116] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) - [117] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) - [118] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) + [111] (byte) screen_fill::x#2 ← phi( screen_fill::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 screen_fill::@2/(byte) screen_fill::x#1 ) [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) + [111] (byte*) screen_fill::screen#2 ← phi( screen_fill::@1/(byte*) screen_fill::screen#3 screen_fill::@2/(byte*) screen_fill::screen#1 ) [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) + [112] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) + [113] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) + [114] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) + [115] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) to:screen_fill::@3 screen_fill::@3: scope:[screen_fill] from screen_fill::@2 - [119] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) - [120] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) + [116] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) + [117] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) to:screen_fill::@return screen_fill::@return: scope:[screen_fill] from screen_fill::@3 - [121] return [ ] ( main:2::screen_fill:17 [ ] ) + [118] return [ ] ( main:2::screen_fill:17 [ ] ) to:@return bitmap_clear: scope:[bitmap_clear] from main::@17 - [122] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) - [123] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) + [119] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) + [120] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3 - [124] (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ) - [124] (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*~) bitmap_clear::bitmap#5 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ) + [121] (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ) + [121] (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*~) bitmap_clear::bitmap#5 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ) to:bitmap_clear::@2 bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2 - [125] (byte) bitmap_clear::x#2 ← phi( bitmap_clear::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@2/(byte) bitmap_clear::x#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) - [125] (byte*) bitmap_clear::bitmap#2 ← phi( bitmap_clear::@1/(byte*) bitmap_clear::bitmap#3 bitmap_clear::@2/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) - [126] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) - [127] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) - [128] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) - [129] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) + [122] (byte) bitmap_clear::x#2 ← phi( bitmap_clear::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@2/(byte) bitmap_clear::x#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) + [122] (byte*) bitmap_clear::bitmap#2 ← phi( bitmap_clear::@1/(byte*) bitmap_clear::bitmap#3 bitmap_clear::@2/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) + [123] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) + [124] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) + [125] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) + [126] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) to:bitmap_clear::@3 bitmap_clear::@3: scope:[bitmap_clear] from bitmap_clear::@2 - [130] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) - [131] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) + [127] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) + [128] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) to:bitmap_clear::@return bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@3 - [132] return [ ] ( main:2::bitmap_clear:15 [ ] ) + [129] return [ ] ( main:2::bitmap_clear:15 [ ] ) to:@return bitmap_init: scope:[bitmap_init] from main::@16 - [133] phi() [ ] ( main:2::bitmap_init:13 [ ] ) + [130] phi() [ ] ( main:2::bitmap_init:13 [ ] ) to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 - [134] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) - [134] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte/word/signed word/dword/signed dword) 128 bitmap_init::@2/(byte) bitmap_init::bits#4 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) - [135] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) - [136] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) - [137] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) + [131] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) + [131] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte/word/signed word/dword/signed dword) 128 bitmap_init::@2/(byte) bitmap_init::bits#4 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) + [132] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) + [133] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) + [134] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) to:bitmap_init::@2 bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@10 - [138] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@10/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte/word/signed word/dword/signed dword) 128 ) [ bitmap_init::x#2 bitmap_init::bits#4 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#4 ] ) - [139] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) - [140] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) + [135] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@10/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte/word/signed word/dword/signed dword) 128 ) [ bitmap_init::x#2 bitmap_init::bits#4 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#4 ] ) + [136] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) + [137] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) to:bitmap_init::@3 bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4 - [141] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#4 bitmap_init::@2/(const byte*) BITMAP#0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) - [141] (byte) bitmap_init::y#2 ← phi( bitmap_init::@4/(byte) bitmap_init::y#1 bitmap_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) - [142] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) - [143] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) - [144] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) - [145] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) - [146] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) - [147] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) - [148] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) - [149] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [138] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#4 bitmap_init::@2/(const byte*) BITMAP#0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [138] (byte) bitmap_init::y#2 ← phi( bitmap_init::@4/(byte) bitmap_init::y#1 bitmap_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [139] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) + [140] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) + [141] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) + [142] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [143] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) + [144] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [145] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) + [146] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) to:bitmap_init::@7 bitmap_init::@7: scope:[bitmap_init] from bitmap_init::@3 - [150] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) + [147] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) to:bitmap_init::@4 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@7 - [151] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@7/(byte*) bitmap_init::yoffs#1 ) [ bitmap_init::y#2 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#4 ] ) - [152] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) - [153] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) + [148] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@7/(byte*) bitmap_init::yoffs#1 ) [ bitmap_init::y#2 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#4 ] ) + [149] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) + [150] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) to:bitmap_init::@return bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 - [154] return [ ] ( main:2::bitmap_init:13 [ ] ) + [151] return [ ] ( main:2::bitmap_init:13 [ ] ) to:@return bitmap_init::@10: scope:[bitmap_init] from bitmap_init::@1 - [155] phi() [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) + [152] phi() [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) to:bitmap_init::@2 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/line-anim.log b/src/test/java/dk/camelot64/kickc/test/ref/line-anim.log index 46f460c5e..77e469bbb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/line-anim.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/line-anim.log @@ -1663,6 +1663,9 @@ Eliminating unused variable (byte) LIGHT_BLUE and assignment [63] (byte) LIGHT_B Eliminating unused variable (byte) LIGHT_GREY and assignment [64] (byte) LIGHT_GREY ← (byte/signed byte/word/signed word/dword/signed dword) 15 Eliminating unused variable (byte) rem8u and assignment [65] (byte) rem8u ← (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating unused variable (signed byte) rem8s and assignment [95] (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (signed word) rem16s and assignment [96] (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable rem16s(null) and assignment [130] rem16s(null) ← (signed word~) divr16s::$20 +Eliminating unused variable rem16s(null) and assignment [135] rem16s(null) ← (signed word~) divr16s::$17 Eliminating unused variable (byte) SIZE and assignment [143] (byte) SIZE ← (byte/signed byte/word/signed word/dword/signed dword) 4 Eliminating unused variable (byte[4]) frame and assignment [154] (byte[4]) frame ← { fill( 4, 0) } Eliminating unused variable - keeping the call (void~) main::$5 @@ -1670,14 +1673,21 @@ Eliminating unused variable - keeping the call (void~) main::$6 Eliminating unused variable - keeping the call (void~) main::$7 Eliminating unused variable - keeping the call (void~) main::$8 Eliminating unused variable - keeping the call (void~) main::$10 +Eliminating unused variable (signed word~) divr16s::$20 and assignment [74] (signed word~) divr16s::$20 ← ((signed word)) (word) rem16u +Eliminating unused variable (signed word~) divr16s::$17 and assignment [78] (signed word~) divr16s::$17 ← - (signed word~) divr16s::$16 +Eliminating unused variable (signed word~) divr16s::$16 and assignment [76] (signed word~) divr16s::$16 ← ((signed word)) (word) rem16u +Eliminating unused variable (word) rem16u and assignment [13] (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable rem16u(null) and assignment [38] rem16u(null) ← (word) divr16u::rem Removing empty block @1 Removing empty block @2 Removing empty block @3 Removing empty block @4 +Removing empty block @5 Removing empty block divr16u::@7 Removing empty block @6 Removing empty block @7 Removing empty block @8 +Removing empty block @9 Removing empty block divr16s::@8 Removing empty block divr16s::@10 Removing empty block divr16s::@12 @@ -1716,13 +1726,6 @@ Removing empty block @16 Removing empty block bitmap_clear::@4 Removing empty block @17 PROCEDURE MODIFY VARIABLE ANALYSIS -divr16u modifies rem16u -divr16s modifies rem16u -divr16s modifies rem16s -main modifies rem16u -main modifies rem16s -point_init modifies rem16u -point_init modifies rem16s Completing Phi functions... Completing Phi functions... @@ -1732,12 +1735,6 @@ Completing Phi functions... Completing Phi functions... Completing Phi functions... Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN @begin: scope:[] from @@ -1754,14 +1751,11 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN (byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272 (byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576 (byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578 - to:@5 -@5: scope:[] from @begin - (word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:@9 + to:@11 divr16u: scope:[divr16u] from divr16s::@4 (word) divr16u::divisor#5 ← phi( divr16s::@4/(word) divr16u::divisor#0 ) (word) divr16u::dividend#4 ← phi( divr16s::@4/(word) divr16u::dividend#1 ) - (word) divr16u::rem#9 ← phi( divr16s::@4/(word) divr16u::rem#3 ) + (word) divr16u::rem#8 ← phi( divr16s::@4/(word) divr16u::rem#3 ) (word) divr16u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) divr16u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:divr16u::@1 @@ -1770,7 +1764,7 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (word) divr16u::divisor#3 ← phi( divr16u/(word) divr16u::divisor#5 divr16u::@3/(word) divr16u::divisor#6 ) (word) divr16u::quotient#6 ← phi( divr16u/(word) divr16u::quotient#0 divr16u::@3/(word) divr16u::quotient#8 ) (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#4 divr16u::@3/(word) divr16u::dividend#5 ) - (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#9 divr16u::@3/(word) divr16u::rem#10 ) + (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#8 divr16u::@3/(word) divr16u::rem#9 ) (word~) divr16u::$0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::rem#0 ← (word~) divr16u::$0 (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 @@ -1806,7 +1800,7 @@ divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#6 ← phi( divr16u::@2/(word) divr16u::divisor#1 divr16u::@5/(word) divr16u::divisor#2 ) (word) divr16u::quotient#8 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) (word) divr16u::dividend#5 ← phi( divr16u::@2/(word) divr16u::dividend#0 divr16u::@5/(word) divr16u::dividend#7 ) - (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) + (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) (byte) divr16u::i#2 ← phi( divr16u::@2/(byte) divr16u::i#3 divr16u::@5/(byte) divr16u::i#4 ) (byte) divr16u::i#1 ← (byte) divr16u::i#2 + rangenext(0,15) (bool~) divr16u::$11 ← (byte) divr16u::i#1 != rangelast(0,15) @@ -1824,23 +1818,14 @@ divr16u::@5: scope:[divr16u] from divr16u::@2 to:divr16u::@3 divr16u::@6: scope:[divr16u] from divr16u::@3 (word) divr16u::quotient#5 ← phi( divr16u::@3/(word) divr16u::quotient#8 ) - (word) divr16u::rem#8 ← phi( divr16u::@3/(word) divr16u::rem#10 ) - (word) rem16u#1 ← (word) divr16u::rem#8 (word) divr16u::return#0 ← (word) divr16u::quotient#5 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - (word) rem16u#10 ← phi( divr16u::@6/(word) rem16u#1 ) (word) divr16u::return#3 ← phi( divr16u::@6/(word) divr16u::return#0 ) (word) divr16u::return#1 ← (word) divr16u::return#3 - (word) rem16u#2 ← (word) rem16u#10 return to:@return -@9: scope:[] from @5 - (word) rem16u#43 ← phi( @5/(word) rem16u#0 ) - (signed word) rem16s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - to:@11 divr16s: scope:[divr16s] from point_init::@4 - (word) rem16u#51 ← phi( point_init::@4/(word) rem16u#23 ) (signed word) divr16s::divisor#6 ← phi( point_init::@4/(signed word) divr16s::divisor#0 ) (signed word) divr16s::rem#1 ← phi( point_init::@4/(signed word) divr16s::rem#0 ) (signed word) divr16s::dividend#1 ← phi( point_init::@4/(signed word) divr16s::dividend#0 ) @@ -1853,7 +1838,6 @@ divr16s: scope:[divr16s] from point_init::@4 if((bool~) divr16s::$2) goto divr16s::@1 to:divr16s::@7 divr16s::@1: scope:[divr16s] from divr16s - (word) rem16u#41 ← phi( divr16s/(word) rem16u#51 ) (signed word) divr16s::divisor#4 ← phi( divr16s/(signed word) divr16s::divisor#6 ) (signed word) divr16s::rem#2 ← phi( divr16s/(signed word) divr16s::rem#1 ) (signed word) divr16s::dividend#2 ← phi( divr16s/(signed word) divr16s::dividend#1 ) @@ -1866,7 +1850,6 @@ divr16s::@1: scope:[divr16s] from divr16s (byte) divr16s::neg#1 ← (byte/signed byte/word/signed word/dword/signed dword) 1 to:divr16s::@2 divr16s::@7: scope:[divr16s] from divr16s - (word) rem16u#42 ← phi( divr16s/(word) rem16u#51 ) (byte) divr16s::neg#7 ← phi( divr16s/(byte) divr16s::neg#0 ) (signed word) divr16s::divisor#5 ← phi( divr16s/(signed word) divr16s::divisor#6 ) (signed word) divr16s::rem#3 ← phi( divr16s/(signed word) divr16s::rem#1 ) @@ -1877,7 +1860,6 @@ divr16s::@7: scope:[divr16s] from divr16s (word) divr16s::remu#2 ← (word~) divr16s::$4 to:divr16s::@2 divr16s::@2: scope:[divr16s] from divr16s::@1 divr16s::@7 - (word) rem16u#35 ← phi( divr16s::@1/(word) rem16u#41 divr16s::@7/(word) rem16u#42 ) (word) divr16s::remu#6 ← phi( divr16s::@1/(word) divr16s::remu#1 divr16s::@7/(word) divr16s::remu#2 ) (word) divr16s::dividendu#6 ← phi( divr16s::@1/(word) divr16s::dividendu#1 divr16s::@7/(word) divr16s::dividendu#2 ) (byte) divr16s::neg#5 ← phi( divr16s::@1/(byte) divr16s::neg#1 divr16s::@7/(byte) divr16s::neg#7 ) @@ -1887,7 +1869,6 @@ divr16s::@2: scope:[divr16s] from divr16s::@1 divr16s::@7 if((bool~) divr16s::$9) goto divr16s::@3 to:divr16s::@9 divr16s::@3: scope:[divr16s] from divr16s::@2 - (word) rem16u#26 ← phi( divr16s::@2/(word) rem16u#35 ) (word) divr16s::remu#4 ← phi( divr16s::@2/(word) divr16s::remu#6 ) (word) divr16s::dividendu#4 ← phi( divr16s::@2/(word) divr16s::dividendu#6 ) (byte) divr16s::neg#3 ← phi( divr16s::@2/(byte) divr16s::neg#5 ) @@ -1900,7 +1881,6 @@ divr16s::@3: scope:[divr16s] from divr16s::@2 to:divr16s::@4 divr16s::@9: scope:[divr16s] from divr16s::@2 (byte) divr16s::neg#8 ← phi( divr16s::@2/(byte) divr16s::neg#5 ) - (word) rem16u#27 ← phi( divr16s::@2/(word) rem16u#35 ) (word) divr16s::remu#5 ← phi( divr16s::@2/(word) divr16s::remu#6 ) (word) divr16s::dividendu#5 ← phi( divr16s::@2/(word) divr16s::dividendu#6 ) (signed word) divr16s::divisor#3 ← phi( divr16s::@2/(signed word) divr16s::divisor#1 ) @@ -1909,7 +1889,6 @@ divr16s::@9: scope:[divr16s] from divr16s::@2 to:divr16s::@4 divr16s::@4: scope:[divr16s] from divr16s::@3 divr16s::@9 (byte) divr16s::neg#6 ← phi( divr16s::@3/(byte) divr16s::neg#2 divr16s::@9/(byte) divr16s::neg#8 ) - (word) rem16u#20 ← phi( divr16s::@3/(word) rem16u#26 divr16s::@9/(word) rem16u#27 ) (word) divr16s::remu#3 ← phi( divr16s::@3/(word) divr16s::remu#4 divr16s::@9/(word) divr16s::remu#5 ) (word) divr16s::divisoru#3 ← phi( divr16s::@3/(word) divr16s::divisoru#1 divr16s::@9/(word) divr16s::divisoru#2 ) (word) divr16s::dividendu#3 ← phi( divr16s::@3/(word) divr16s::dividendu#4 divr16s::@9/(word) divr16s::dividendu#5 ) @@ -1921,44 +1900,29 @@ divr16s::@4: scope:[divr16s] from divr16s::@3 divr16s::@9 to:divr16s::@15 divr16s::@15: scope:[divr16s] from divr16s::@4 (byte) divr16s::neg#4 ← phi( divr16s::@4/(byte) divr16s::neg#6 ) - (word) rem16u#11 ← phi( divr16s::@4/(word) rem16u#2 ) (word) divr16u::return#4 ← phi( divr16s::@4/(word) divr16u::return#2 ) (word~) divr16s::$14 ← (word) divr16u::return#4 - (word) rem16u#3 ← (word) rem16u#11 (word) divr16s::resultu#0 ← (word~) divr16s::$14 (bool~) divr16s::$15 ← (byte) divr16s::neg#4 == (byte/signed byte/word/signed word/dword/signed dword) 0 if((bool~) divr16s::$15) goto divr16s::@5 to:divr16s::@11 divr16s::@5: scope:[divr16s] from divr16s::@15 (word) divr16s::resultu#1 ← phi( divr16s::@15/(word) divr16s::resultu#0 ) - (word) rem16u#12 ← phi( divr16s::@15/(word) rem16u#3 ) - (signed word~) divr16s::$20 ← ((signed word)) (word) rem16u#12 - (signed word) rem16s#1 ← (signed word~) divr16s::$20 (signed word~) divr16s::$21 ← ((signed word)) (word) divr16s::resultu#1 (signed word) divr16s::return#0 ← (signed word~) divr16s::$21 to:divr16s::@return divr16s::@11: scope:[divr16s] from divr16s::@15 (word) divr16s::resultu#2 ← phi( divr16s::@15/(word) divr16s::resultu#0 ) - (word) rem16u#13 ← phi( divr16s::@15/(word) rem16u#3 ) - (signed word~) divr16s::$16 ← ((signed word)) (word) rem16u#13 - (signed word~) divr16s::$17 ← - (signed word~) divr16s::$16 - (signed word) rem16s#2 ← (signed word~) divr16s::$17 (signed word~) divr16s::$18 ← ((signed word)) (word) divr16s::resultu#2 (signed word~) divr16s::$19 ← - (signed word~) divr16s::$18 (signed word) divr16s::return#1 ← (signed word~) divr16s::$19 to:divr16s::@return divr16s::@return: scope:[divr16s] from divr16s::@11 divr16s::@5 - (signed word) rem16s#9 ← phi( divr16s::@11/(signed word) rem16s#2 divr16s::@5/(signed word) rem16s#1 ) - (word) rem16u#14 ← phi( divr16s::@11/(word) rem16u#13 divr16s::@5/(word) rem16u#12 ) (signed word) divr16s::return#4 ← phi( divr16s::@11/(signed word) divr16s::return#1 divr16s::@5/(signed word) divr16s::return#0 ) (signed word) divr16s::return#2 ← (signed word) divr16s::return#4 - (word) rem16u#4 ← (word) rem16u#14 - (signed word) rem16s#3 ← (signed word) rem16s#9 return to:@return -@11: scope:[] from @9 - (signed word) rem16s#31 ← phi( @9/(signed word) rem16s#0 ) - (word) rem16u#40 ← phi( @9/(word) rem16u#43 ) +@11: scope:[] from @begin (byte*) BITMAP#0 ← ((byte*)) (word/dword/signed dword) 40960 (byte*) SCREEN#0 ← ((byte*)) (word/dword/signed dword) 34816 (byte) DELAY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8 @@ -1973,8 +1937,6 @@ divr16s::@return: scope:[divr16s] from divr16s::@11 divr16s::@5 (byte[4]) delay#0 ← { fill( 4, 0) } to:@15 main: scope:[main] from @18 - (signed word) rem16s#52 ← phi( @18/(signed word) rem16s#19 ) - (word) rem16u#65 ← phi( @18/(word) rem16u#25 ) (byte*) BITMAP#9 ← phi( @18/(byte*) BITMAP#10 ) (byte*) SCREEN#1 ← phi( @18/(byte*) SCREEN#4 ) asm { sei } @@ -1987,8 +1949,6 @@ main: scope:[main] from @18 (byte*) main::vicSelectGfxBank1_gfx#0 ← (byte*) SCREEN#1 to:main::vicSelectGfxBank1 main::vicSelectGfxBank1: scope:[main] from main - (signed word) rem16s#51 ← phi( main/(signed word) rem16s#52 ) - (word) rem16u#64 ← phi( main/(word) rem16u#65 ) (byte*) BITMAP#8 ← phi( main/(byte*) BITMAP#9 ) (byte*) SCREEN#12 ← phi( main/(byte*) SCREEN#1 ) (byte*) main::vicSelectGfxBank1_gfx#1 ← phi( main/(byte*) main::vicSelectGfxBank1_gfx#0 ) @@ -1996,8 +1956,6 @@ main::vicSelectGfxBank1: scope:[main] from main (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ← (byte*) main::vicSelectGfxBank1_gfx#1 to:main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 - (signed word) rem16s#50 ← phi( main::vicSelectGfxBank1/(signed word) rem16s#51 ) - (word) rem16u#63 ← phi( main::vicSelectGfxBank1/(word) rem16u#64 ) (byte*) BITMAP#7 ← phi( main::vicSelectGfxBank1/(byte*) BITMAP#8 ) (byte*) SCREEN#10 ← phi( main::vicSelectGfxBank1/(byte*) SCREEN#12 ) (byte*) main::vicSelectGfxBank1_toDd001_gfx#1 ← phi( main::vicSelectGfxBank1/(byte*) main::vicSelectGfxBank1_toDd001_gfx#0 ) @@ -2008,16 +1966,12 @@ main::vicSelectGfxBank1_toDd001: scope:[main] from main::vicSelectGfxBank1 (byte) main::vicSelectGfxBank1_toDd001_return#0 ← (byte/word/dword) main::vicSelectGfxBank1_toDd001_$3#0 to:main::vicSelectGfxBank1_toDd001_@return main::vicSelectGfxBank1_toDd001_@return: scope:[main] from main::vicSelectGfxBank1_toDd001 - (signed word) rem16s#49 ← phi( main::vicSelectGfxBank1_toDd001/(signed word) rem16s#50 ) - (word) rem16u#62 ← phi( main::vicSelectGfxBank1_toDd001/(word) rem16u#63 ) (byte*) BITMAP#5 ← phi( main::vicSelectGfxBank1_toDd001/(byte*) BITMAP#7 ) (byte*) SCREEN#7 ← phi( main::vicSelectGfxBank1_toDd001/(byte*) SCREEN#10 ) (byte) main::vicSelectGfxBank1_toDd001_return#2 ← phi( main::vicSelectGfxBank1_toDd001/(byte) main::vicSelectGfxBank1_toDd001_return#0 ) (byte) main::vicSelectGfxBank1_toDd001_return#1 ← (byte) main::vicSelectGfxBank1_toDd001_return#2 to:main::vicSelectGfxBank1_@1 main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@return - (signed word) rem16s#48 ← phi( main::vicSelectGfxBank1_toDd001_@return/(signed word) rem16s#49 ) - (word) rem16u#61 ← phi( main::vicSelectGfxBank1_toDd001_@return/(word) rem16u#62 ) (byte*) BITMAP#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte*) BITMAP#5 ) (byte*) SCREEN#5 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte*) SCREEN#7 ) (byte) main::vicSelectGfxBank1_toDd001_return#3 ← phi( main::vicSelectGfxBank1_toDd001_@return/(byte) main::vicSelectGfxBank1_toDd001_return#1 ) @@ -2025,16 +1979,12 @@ main::vicSelectGfxBank1_@1: scope:[main] from main::vicSelectGfxBank1_toDd001_@ *((byte*) CIA2_PORT_A#0) ← (byte) main::vicSelectGfxBank1_$0#0 to:main::@15 main::@15: scope:[main] from main::vicSelectGfxBank1_@1 - (signed word) rem16s#47 ← phi( main::vicSelectGfxBank1_@1/(signed word) rem16s#48 ) - (word) rem16u#60 ← phi( main::vicSelectGfxBank1_@1/(word) rem16u#61 ) (byte*) BITMAP#1 ← phi( main::vicSelectGfxBank1_@1/(byte*) BITMAP#3 ) (byte*) SCREEN#2 ← phi( main::vicSelectGfxBank1_@1/(byte*) SCREEN#5 ) (byte*) main::toD0181_screen#0 ← (byte*) SCREEN#2 (byte*) main::toD0181_gfx#0 ← (byte*) BITMAP#1 to:main::toD0181 main::toD0181: scope:[main] from main::@15 - (signed word) rem16s#45 ← phi( main::@15/(signed word) rem16s#47 ) - (word) rem16u#58 ← phi( main::@15/(word) rem16u#60 ) (byte*) SCREEN#13 ← phi( main::@15/(byte*) SCREEN#2 ) (byte*) BITMAP#6 ← phi( main::@15/(byte*) BITMAP#1 ) (byte*) main::toD0181_gfx#1 ← phi( main::@15/(byte*) main::toD0181_gfx#0 ) @@ -2051,16 +2001,12 @@ main::toD0181: scope:[main] from main::@15 (byte) main::toD0181_return#0 ← (byte) main::toD0181_$8#0 to:main::toD0181_@return main::toD0181_@return: scope:[main] from main::toD0181 - (signed word) rem16s#42 ← phi( main::toD0181/(signed word) rem16s#45 ) - (word) rem16u#55 ← phi( main::toD0181/(word) rem16u#58 ) (byte*) SCREEN#11 ← phi( main::toD0181/(byte*) SCREEN#13 ) (byte*) BITMAP#4 ← phi( main::toD0181/(byte*) BITMAP#6 ) (byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 ) (byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2 to:main::@16 main::@16: scope:[main] from main::toD0181_@return - (signed word) rem16s#39 ← phi( main::toD0181_@return/(signed word) rem16s#42 ) - (word) rem16u#52 ← phi( main::toD0181_@return/(word) rem16u#55 ) (byte*) SCREEN#8 ← phi( main::toD0181_@return/(byte*) SCREEN#11 ) (byte*) BITMAP#2 ← phi( main::toD0181_@return/(byte*) BITMAP#4 ) (byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 ) @@ -2070,84 +2016,54 @@ main::@16: scope:[main] from main::toD0181_@return call bitmap_init to:main::@17 main::@17: scope:[main] from main::@16 - (signed word) rem16s#32 ← phi( main::@16/(signed word) rem16s#39 ) - (word) rem16u#44 ← phi( main::@16/(word) rem16u#52 ) (byte*) SCREEN#6 ← phi( main::@16/(byte*) SCREEN#8 ) call bitmap_clear to:main::@18 main::@18: scope:[main] from main::@17 - (signed word) rem16s#27 ← phi( main::@17/(signed word) rem16s#32 ) - (word) rem16u#36 ← phi( main::@17/(word) rem16u#44 ) (byte*) SCREEN#3 ← phi( main::@17/(byte*) SCREEN#6 ) (byte*) screen_fill::screen#0 ← (byte*) SCREEN#3 (byte) screen_fill::ch#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16 call screen_fill to:main::@19 main::@19: scope:[main] from main::@18 - (signed word) rem16s#20 ← phi( main::@18/(signed word) rem16s#27 ) - (word) rem16u#28 ← phi( main::@18/(word) rem16u#36 ) (byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@1 main::@1: scope:[main] from main::@19 main::@21 - (signed word) rem16s#15 ← phi( main::@19/(signed word) rem16s#20 main::@21/(signed word) rem16s#21 ) - (word) rem16u#21 ← phi( main::@19/(word) rem16u#28 main::@21/(word) rem16u#29 ) (byte) main::i#2 ← phi( main::@19/(byte) main::i#0 main::@21/(byte) main::i#1 ) (byte) point_init::point_idx#0 ← (byte) main::i#2 call point_init to:main::@20 main::@20: scope:[main] from main::@1 (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 ) - (signed word) rem16s#10 ← phi( main::@1/(signed word) rem16s#7 ) - (word) rem16u#15 ← phi( main::@1/(word) rem16u#8 ) - (word) rem16u#5 ← (word) rem16u#15 - (signed word) rem16s#4 ← (signed word) rem16s#10 (byte~) main::$9 ← (byte) main::i#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 (word) bitmap_plot::x#0 ← *((word[4]) x_start#0 + (byte) main::i#3) (byte) bitmap_plot::y#0 ← *((byte[4]) y_start#0 + (byte~) main::$9) call bitmap_plot to:main::@21 main::@21: scope:[main] from main::@20 - (signed word) rem16s#21 ← phi( main::@20/(signed word) rem16s#4 ) - (word) rem16u#29 ← phi( main::@20/(word) rem16u#5 ) (byte) main::i#4 ← phi( main::@20/(byte) main::i#3 ) (byte) main::i#1 ← (byte) main::i#4 + (byte/signed byte/word/signed word/dword/signed dword) 2 (bool~) main::$11 ← (byte) main::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 8 if((bool~) main::$11) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@21 main::@7 - (signed word) rem16s#16 ← phi( main::@21/(signed word) rem16s#21 main::@7/(signed word) rem16s#22 ) - (word) rem16u#22 ← phi( main::@21/(word) rem16u#29 main::@7/(word) rem16u#30 ) if(true) goto main::@3 to:main::@return main::@3: scope:[main] from main::@2 - (signed word) rem16s#33 ← phi( main::@2/(signed word) rem16s#16 ) - (word) rem16u#45 ← phi( main::@2/(word) rem16u#22 ) to:main::@5 main::@5: scope:[main] from main::@3 main::@6 - (signed word) rem16s#28 ← phi( main::@3/(signed word) rem16s#33 main::@6/(signed word) rem16s#34 ) - (word) rem16u#37 ← phi( main::@3/(word) rem16u#45 main::@6/(word) rem16u#46 ) (bool~) main::$12 ← *((byte*) RASTER#0) != (byte/word/signed word/dword/signed dword) 255 if((bool~) main::$12) goto main::@6 to:main::@7 main::@6: scope:[main] from main::@5 - (signed word) rem16s#34 ← phi( main::@5/(signed word) rem16s#28 ) - (word) rem16u#46 ← phi( main::@5/(word) rem16u#37 ) to:main::@5 main::@7: scope:[main] from main::@5 - (signed word) rem16s#22 ← phi( main::@5/(signed word) rem16s#28 ) - (word) rem16u#30 ← phi( main::@5/(word) rem16u#37 ) *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0) to:main::@2 main::@return: scope:[main] from main::@2 - (signed word) rem16s#11 ← phi( main::@2/(signed word) rem16s#16 ) - (word) rem16u#16 ← phi( main::@2/(word) rem16u#22 ) - (word) rem16u#6 ← (word) rem16u#16 - (signed word) rem16s#5 ← (signed word) rem16s#11 return to:@return point_init: scope:[point_init] from main::@1 - (signed word) rem16s#37 ← phi( main::@1/(signed word) rem16s#15 ) - (word) rem16u#49 ← phi( main::@1/(word) rem16u#21 ) (byte) point_init::point_idx#1 ← phi( main::@1/(byte) point_init::point_idx#0 ) (byte~) point_init::$0 ← (byte) point_init::point_idx#1 >> (byte/signed byte/word/signed word/dword/signed dword) 1 (byte) point_init::point_idx1#0 ← (byte~) point_init::$0 @@ -2163,8 +2079,6 @@ point_init: scope:[point_init] from main::@1 to:point_init::abs16s1 point_init::abs16s1: scope:[point_init] from point_init (byte) point_init::point_idx1#16 ← phi( point_init/(byte) point_init::point_idx1#0 ) - (signed word) rem16s#46 ← phi( point_init/(signed word) rem16s#37 ) - (word) rem16u#59 ← phi( point_init/(word) rem16u#49 ) (byte) point_init::point_idx#17 ← phi( point_init/(byte) point_init::point_idx#1 ) (signed word) point_init::x_diff#13 ← phi( point_init/(signed word) point_init::x_diff#0 ) (signed word) point_init::y_diff#9 ← phi( point_init/(signed word) point_init::y_diff#0 ) @@ -2174,8 +2088,6 @@ point_init::abs16s1: scope:[point_init] from point_init to:point_init::abs16s1_@3 point_init::abs16s1_@1: scope:[point_init] from point_init::abs16s1 (byte) point_init::point_idx1#14 ← phi( point_init::abs16s1/(byte) point_init::point_idx1#16 ) - (signed word) rem16s#43 ← phi( point_init::abs16s1/(signed word) rem16s#46 ) - (word) rem16u#56 ← phi( point_init::abs16s1/(word) rem16u#59 ) (byte) point_init::point_idx#14 ← phi( point_init::abs16s1/(byte) point_init::point_idx#17 ) (signed word) point_init::x_diff#9 ← phi( point_init::abs16s1/(signed word) point_init::x_diff#13 ) (signed word) point_init::y_diff#6 ← phi( point_init::abs16s1/(signed word) point_init::y_diff#9 ) @@ -2186,8 +2098,6 @@ point_init::abs16s1_@1: scope:[point_init] from point_init::abs16s1 to:point_init::abs16s1_@return point_init::abs16s1_@3: scope:[point_init] from point_init::abs16s1 (byte) point_init::point_idx1#15 ← phi( point_init::abs16s1/(byte) point_init::point_idx1#16 ) - (signed word) rem16s#44 ← phi( point_init::abs16s1/(signed word) rem16s#46 ) - (word) rem16u#57 ← phi( point_init::abs16s1/(word) rem16u#59 ) (byte) point_init::point_idx#15 ← phi( point_init::abs16s1/(byte) point_init::point_idx#17 ) (signed word) point_init::x_diff#10 ← phi( point_init::abs16s1/(signed word) point_init::x_diff#13 ) (signed word) point_init::y_diff#7 ← phi( point_init::abs16s1/(signed word) point_init::y_diff#9 ) @@ -2197,8 +2107,6 @@ point_init::abs16s1_@3: scope:[point_init] from point_init::abs16s1 to:point_init::abs16s1_@return point_init::abs16s1_@return: scope:[point_init] from point_init::abs16s1_@1 point_init::abs16s1_@3 (byte) point_init::point_idx1#13 ← phi( point_init::abs16s1_@1/(byte) point_init::point_idx1#14 point_init::abs16s1_@3/(byte) point_init::point_idx1#15 ) - (signed word) rem16s#40 ← phi( point_init::abs16s1_@1/(signed word) rem16s#43 point_init::abs16s1_@3/(signed word) rem16s#44 ) - (word) rem16u#53 ← phi( point_init::abs16s1_@1/(word) rem16u#56 point_init::abs16s1_@3/(word) rem16u#57 ) (byte) point_init::point_idx#11 ← phi( point_init::abs16s1_@1/(byte) point_init::point_idx#14 point_init::abs16s1_@3/(byte) point_init::point_idx#15 ) (signed word) point_init::x_diff#7 ← phi( point_init::abs16s1_@1/(signed word) point_init::x_diff#9 point_init::abs16s1_@3/(signed word) point_init::x_diff#10 ) (signed word) point_init::y_diff#3 ← phi( point_init::abs16s1_@1/(signed word) point_init::y_diff#6 point_init::abs16s1_@3/(signed word) point_init::y_diff#7 ) @@ -2207,8 +2115,6 @@ point_init::abs16s1_@return: scope:[point_init] from point_init::abs16s1_@1 poi to:point_init::@9 point_init::@9: scope:[point_init] from point_init::abs16s1_@return (byte) point_init::point_idx1#12 ← phi( point_init::abs16s1_@return/(byte) point_init::point_idx1#13 ) - (signed word) rem16s#38 ← phi( point_init::abs16s1_@return/(signed word) rem16s#40 ) - (word) rem16u#50 ← phi( point_init::abs16s1_@return/(word) rem16u#53 ) (byte) point_init::point_idx#9 ← phi( point_init::abs16s1_@return/(byte) point_init::point_idx#11 ) (signed word) point_init::x_diff#4 ← phi( point_init::abs16s1_@return/(signed word) point_init::x_diff#7 ) (signed word) point_init::y_diff#1 ← phi( point_init::abs16s1_@return/(signed word) point_init::y_diff#3 ) @@ -2218,8 +2124,6 @@ point_init::@9: scope:[point_init] from point_init::abs16s1_@return to:point_init::abs16s2 point_init::abs16s2: scope:[point_init] from point_init::@9 (signed word) point_init::y_diff#14 ← phi( point_init::@9/(signed word) point_init::y_diff#1 ) - (signed word) rem16s#41 ← phi( point_init::@9/(signed word) rem16s#38 ) - (word) rem16u#54 ← phi( point_init::@9/(word) rem16u#50 ) (byte) point_init::point_idx1#11 ← phi( point_init::@9/(byte) point_init::point_idx1#12 ) (byte) point_init::point_idx#16 ← phi( point_init::@9/(byte) point_init::point_idx#9 ) (signed word) point_init::x_diff#14 ← phi( point_init::@9/(signed word) point_init::x_diff#4 ) @@ -2229,8 +2133,6 @@ point_init::abs16s2: scope:[point_init] from point_init::@9 to:point_init::abs16s2_@3 point_init::abs16s2_@1: scope:[point_init] from point_init::abs16s2 (signed word) point_init::y_diff#12 ← phi( point_init::abs16s2/(signed word) point_init::y_diff#14 ) - (signed word) rem16s#35 ← phi( point_init::abs16s2/(signed word) rem16s#41 ) - (word) rem16u#47 ← phi( point_init::abs16s2/(word) rem16u#54 ) (byte) point_init::point_idx1#8 ← phi( point_init::abs16s2/(byte) point_init::point_idx1#11 ) (byte) point_init::point_idx#12 ← phi( point_init::abs16s2/(byte) point_init::point_idx#16 ) (signed word) point_init::x_diff#11 ← phi( point_init::abs16s2/(signed word) point_init::x_diff#14 ) @@ -2241,8 +2143,6 @@ point_init::abs16s2_@1: scope:[point_init] from point_init::abs16s2 to:point_init::abs16s2_@return point_init::abs16s2_@3: scope:[point_init] from point_init::abs16s2 (signed word) point_init::y_diff#13 ← phi( point_init::abs16s2/(signed word) point_init::y_diff#14 ) - (signed word) rem16s#36 ← phi( point_init::abs16s2/(signed word) rem16s#41 ) - (word) rem16u#48 ← phi( point_init::abs16s2/(word) rem16u#54 ) (byte) point_init::point_idx1#9 ← phi( point_init::abs16s2/(byte) point_init::point_idx1#11 ) (byte) point_init::point_idx#13 ← phi( point_init::abs16s2/(byte) point_init::point_idx#16 ) (signed word) point_init::x_diff#12 ← phi( point_init::abs16s2/(signed word) point_init::x_diff#14 ) @@ -2252,8 +2152,6 @@ point_init::abs16s2_@3: scope:[point_init] from point_init::abs16s2 to:point_init::abs16s2_@return point_init::abs16s2_@return: scope:[point_init] from point_init::abs16s2_@1 point_init::abs16s2_@3 (signed word) point_init::y_diff#11 ← phi( point_init::abs16s2_@1/(signed word) point_init::y_diff#12 point_init::abs16s2_@3/(signed word) point_init::y_diff#13 ) - (signed word) rem16s#29 ← phi( point_init::abs16s2_@1/(signed word) rem16s#35 point_init::abs16s2_@3/(signed word) rem16s#36 ) - (word) rem16u#38 ← phi( point_init::abs16s2_@1/(word) rem16u#47 point_init::abs16s2_@3/(word) rem16u#48 ) (byte) point_init::point_idx1#5 ← phi( point_init::abs16s2_@1/(byte) point_init::point_idx1#8 point_init::abs16s2_@3/(byte) point_init::point_idx1#9 ) (byte) point_init::point_idx#8 ← phi( point_init::abs16s2_@1/(byte) point_init::point_idx#12 point_init::abs16s2_@3/(byte) point_init::point_idx#13 ) (signed word) point_init::x_diff#8 ← phi( point_init::abs16s2_@1/(signed word) point_init::x_diff#11 point_init::abs16s2_@3/(signed word) point_init::x_diff#12 ) @@ -2262,8 +2160,6 @@ point_init::abs16s2_@return: scope:[point_init] from point_init::abs16s2_@1 poi to:point_init::@10 point_init::@10: scope:[point_init] from point_init::abs16s2_@return (signed word) point_init::y_diff#10 ← phi( point_init::abs16s2_@return/(signed word) point_init::y_diff#11 ) - (signed word) rem16s#23 ← phi( point_init::abs16s2_@return/(signed word) rem16s#29 ) - (word) rem16u#31 ← phi( point_init::abs16s2_@return/(word) rem16u#38 ) (byte) point_init::point_idx1#3 ← phi( point_init::abs16s2_@return/(byte) point_init::point_idx1#5 ) (byte) point_init::point_idx#5 ← phi( point_init::abs16s2_@return/(byte) point_init::point_idx#8 ) (signed word) point_init::x_diff#3 ← phi( point_init::abs16s2_@return/(signed word) point_init::x_diff#8 ) @@ -2274,8 +2170,6 @@ point_init::@10: scope:[point_init] from point_init::abs16s2_@return to:point_init::@2 point_init::@1: scope:[point_init] from point_init point_init::@10 point_init::@9 (byte) point_init::point_idx1#10 ← phi( point_init/(byte) point_init::point_idx1#0 point_init::@10/(byte) point_init::point_idx1#3 point_init::@9/(byte) point_init::point_idx1#12 ) - (signed word) rem16s#30 ← phi( point_init/(signed word) rem16s#37 point_init::@10/(signed word) rem16s#23 point_init::@9/(signed word) rem16s#38 ) - (word) rem16u#39 ← phi( point_init/(word) rem16u#49 point_init::@10/(word) rem16u#31 point_init::@9/(word) rem16u#50 ) (signed word) point_init::y_diff#8 ← phi( point_init/(signed word) point_init::y_diff#0 point_init::@10/(signed word) point_init::y_diff#10 point_init::@9/(signed word) point_init::y_diff#1 ) (byte) point_init::point_idx#7 ← phi( point_init/(byte) point_init::point_idx#1 point_init::@10/(byte) point_init::point_idx#5 point_init::@9/(byte) point_init::point_idx#9 ) (signed word) point_init::x_diff#1 ← phi( point_init/(signed word) point_init::x_diff#0 point_init::@10/(signed word) point_init::x_diff#3 point_init::@9/(signed word) point_init::x_diff#4 ) @@ -2283,8 +2177,6 @@ point_init::@1: scope:[point_init] from point_init point_init::@10 point_init:: if((bool~) point_init::$10) goto point_init::@3 to:point_init::@7 point_init::@2: scope:[point_init] from point_init::@10 point_init::@11 - (signed word) rem16s#18 ← phi( point_init::@10/(signed word) rem16s#23 point_init::@11/(signed word) rem16s#6 ) - (word) rem16u#24 ← phi( point_init::@10/(word) rem16u#31 point_init::@11/(word) rem16u#7 ) (byte) point_init::point_idx1#1 ← phi( point_init::@10/(byte) point_init::point_idx1#3 point_init::@11/(byte) point_init::point_idx1#2 ) (byte) point_init::point_idx#2 ← phi( point_init::@10/(byte) point_init::point_idx#5 point_init::@11/(byte) point_init::point_idx#6 ) (word~) point_init::$16 ← *((word[4]) x_start#0 + (byte) point_init::point_idx#2) << (byte/signed byte/word/signed word/dword/signed dword) 4 @@ -2296,8 +2188,6 @@ point_init::@2: scope:[point_init] from point_init::@10 point_init::@11 to:point_init::@return point_init::@3: scope:[point_init] from point_init::@1 (byte) point_init::point_idx1#6 ← phi( point_init::@1/(byte) point_init::point_idx1#10 ) - (signed word) rem16s#24 ← phi( point_init::@1/(signed word) rem16s#30 ) - (word) rem16u#32 ← phi( point_init::@1/(word) rem16u#39 ) (signed word) point_init::y_diff#4 ← phi( point_init::@1/(signed word) point_init::y_diff#8 ) (signed word) point_init::x_diff#5 ← phi( point_init::@1/(signed word) point_init::x_diff#1 ) (byte) point_init::point_idx#3 ← phi( point_init::@1/(byte) point_init::point_idx#7 ) @@ -2306,8 +2196,6 @@ point_init::@3: scope:[point_init] from point_init::@1 to:point_init::@4 point_init::@7: scope:[point_init] from point_init::@1 (byte) point_init::point_idx1#7 ← phi( point_init::@1/(byte) point_init::point_idx1#10 ) - (signed word) rem16s#25 ← phi( point_init::@1/(signed word) rem16s#30 ) - (word) rem16u#33 ← phi( point_init::@1/(word) rem16u#39 ) (signed word) point_init::y_diff#5 ← phi( point_init::@1/(signed word) point_init::y_diff#8 ) (signed word) point_init::x_diff#6 ← phi( point_init::@1/(signed word) point_init::x_diff#1 ) (byte) point_init::point_idx#4 ← phi( point_init::@1/(byte) point_init::point_idx#7 ) @@ -2316,8 +2204,6 @@ point_init::@7: scope:[point_init] from point_init::@1 point_init::@4: scope:[point_init] from point_init::@3 point_init::@7 (byte) point_init::point_idx#10 ← phi( point_init::@3/(byte) point_init::point_idx#3 point_init::@7/(byte) point_init::point_idx#4 ) (byte) point_init::point_idx1#4 ← phi( point_init::@3/(byte) point_init::point_idx1#6 point_init::@7/(byte) point_init::point_idx1#7 ) - (signed word) rem16s#17 ← phi( point_init::@3/(signed word) rem16s#24 point_init::@7/(signed word) rem16s#25 ) - (word) rem16u#23 ← phi( point_init::@3/(word) rem16u#32 point_init::@7/(word) rem16u#33 ) (signed word) point_init::y_diff#2 ← phi( point_init::@3/(signed word) point_init::y_diff#4 point_init::@7/(signed word) point_init::y_diff#5 ) (signed word) point_init::x_diff#2 ← phi( point_init::@3/(signed word) point_init::x_diff#5 point_init::@7/(signed word) point_init::x_diff#6 ) (signed word) divr16s::dividend#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -2329,12 +2215,8 @@ point_init::@4: scope:[point_init] from point_init::@3 point_init::@7 point_init::@11: scope:[point_init] from point_init::@4 (byte) point_init::point_idx#6 ← phi( point_init::@4/(byte) point_init::point_idx#10 ) (byte) point_init::point_idx1#2 ← phi( point_init::@4/(byte) point_init::point_idx1#4 ) - (signed word) rem16s#12 ← phi( point_init::@4/(signed word) rem16s#3 ) - (word) rem16u#17 ← phi( point_init::@4/(word) rem16u#4 ) (signed word) divr16s::return#5 ← phi( point_init::@4/(signed word) divr16s::return#3 ) (signed word~) point_init::$12 ← (signed word) divr16s::return#5 - (word) rem16u#7 ← (word) rem16u#17 - (signed word) rem16s#6 ← (signed word) rem16s#12 (signed word) point_init::x_stepf#0 ← (signed word~) point_init::$12 (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 @@ -2342,10 +2224,6 @@ point_init::@11: scope:[point_init] from point_init::@4 *((signed byte[4]) y_add#0 + (byte) point_init::point_idx1#2) ← (signed byte~) point_init::$15 to:point_init::@2 point_init::@return: scope:[point_init] from point_init::@2 - (signed word) rem16s#13 ← phi( point_init::@2/(signed word) rem16s#18 ) - (word) rem16u#18 ← phi( point_init::@2/(word) rem16u#24 ) - (word) rem16u#8 ← (word) rem16u#18 - (signed word) rem16s#7 ← (signed word) rem16s#13 return to:@return screen_fill: scope:[screen_fill] from main::@18 @@ -2383,8 +2261,6 @@ screen_fill::@return: scope:[screen_fill] from screen_fill::@3 to:@return @15: scope:[] from @11 (byte*) BITMAP#11 ← phi( @11/(byte*) BITMAP#0 ) - (signed word) rem16s#26 ← phi( @11/(signed word) rem16s#31 ) - (word) rem16u#34 ← phi( @11/(word) rem16u#40 ) (byte*) SCREEN#9 ← phi( @11/(byte*) SCREEN#0 ) (byte[256]) bitmap_plot_ylo#0 ← { fill( 256, 0) } (byte[256]) bitmap_plot_yhi#0 ← { fill( 256, 0) } @@ -2499,16 +2375,10 @@ bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot to:@return @18: scope:[] from @15 (byte*) BITMAP#10 ← phi( @15/(byte*) BITMAP#11 ) - (signed word) rem16s#19 ← phi( @15/(signed word) rem16s#26 ) - (word) rem16u#25 ← phi( @15/(word) rem16u#34 ) (byte*) SCREEN#4 ← phi( @15/(byte*) SCREEN#9 ) call main to:@19 @19: scope:[] from @18 - (signed word) rem16s#14 ← phi( @18/(signed word) rem16s#5 ) - (word) rem16u#19 ← phi( @18/(word) rem16u#6 ) - (word) rem16u#9 ← (word) rem16u#19 - (signed word) rem16s#8 ← (signed word) rem16s#14 to:@end @end: scope:[] from @19 @@ -2517,8 +2387,6 @@ SYMBOL TABLE SSA (label) @15 (label) @18 (label) @19 -(label) @5 -(label) @9 (label) @begin (label) @end (byte*) BITMAP @@ -2685,12 +2553,9 @@ SYMBOL TABLE SSA (byte/word/dword~) divr16s::$13 (word~) divr16s::$14 (bool~) divr16s::$15 -(signed word~) divr16s::$16 -(signed word~) divr16s::$17 (signed word~) divr16s::$18 (signed word~) divr16s::$19 (bool~) divr16s::$2 -(signed word~) divr16s::$20 (signed word~) divr16s::$21 (word~) divr16s::$3 (word~) divr16s::$4 @@ -2827,7 +2692,6 @@ SYMBOL TABLE SSA (word) divr16u::rem (word) divr16u::rem#0 (word) divr16u::rem#1 -(word) divr16u::rem#10 (word) divr16u::rem#2 (word) divr16u::rem#3 (word) divr16u::rem#4 @@ -3072,127 +2936,6 @@ SYMBOL TABLE SSA (signed word) point_init::y_diff#7 (signed word) point_init::y_diff#8 (signed word) point_init::y_diff#9 -(signed word) rem16s -(signed word) rem16s#0 -(signed word) rem16s#1 -(signed word) rem16s#10 -(signed word) rem16s#11 -(signed word) rem16s#12 -(signed word) rem16s#13 -(signed word) rem16s#14 -(signed word) rem16s#15 -(signed word) rem16s#16 -(signed word) rem16s#17 -(signed word) rem16s#18 -(signed word) rem16s#19 -(signed word) rem16s#2 -(signed word) rem16s#20 -(signed word) rem16s#21 -(signed word) rem16s#22 -(signed word) rem16s#23 -(signed word) rem16s#24 -(signed word) rem16s#25 -(signed word) rem16s#26 -(signed word) rem16s#27 -(signed word) rem16s#28 -(signed word) rem16s#29 -(signed word) rem16s#3 -(signed word) rem16s#30 -(signed word) rem16s#31 -(signed word) rem16s#32 -(signed word) rem16s#33 -(signed word) rem16s#34 -(signed word) rem16s#35 -(signed word) rem16s#36 -(signed word) rem16s#37 -(signed word) rem16s#38 -(signed word) rem16s#39 -(signed word) rem16s#4 -(signed word) rem16s#40 -(signed word) rem16s#41 -(signed word) rem16s#42 -(signed word) rem16s#43 -(signed word) rem16s#44 -(signed word) rem16s#45 -(signed word) rem16s#46 -(signed word) rem16s#47 -(signed word) rem16s#48 -(signed word) rem16s#49 -(signed word) rem16s#5 -(signed word) rem16s#50 -(signed word) rem16s#51 -(signed word) rem16s#52 -(signed word) rem16s#6 -(signed word) rem16s#7 -(signed word) rem16s#8 -(signed word) rem16s#9 -(word) rem16u -(word) rem16u#0 -(word) rem16u#1 -(word) rem16u#10 -(word) rem16u#11 -(word) rem16u#12 -(word) rem16u#13 -(word) rem16u#14 -(word) rem16u#15 -(word) rem16u#16 -(word) rem16u#17 -(word) rem16u#18 -(word) rem16u#19 -(word) rem16u#2 -(word) rem16u#20 -(word) rem16u#21 -(word) rem16u#22 -(word) rem16u#23 -(word) rem16u#24 -(word) rem16u#25 -(word) rem16u#26 -(word) rem16u#27 -(word) rem16u#28 -(word) rem16u#29 -(word) rem16u#3 -(word) rem16u#30 -(word) rem16u#31 -(word) rem16u#32 -(word) rem16u#33 -(word) rem16u#34 -(word) rem16u#35 -(word) rem16u#36 -(word) rem16u#37 -(word) rem16u#38 -(word) rem16u#39 -(word) rem16u#4 -(word) rem16u#40 -(word) rem16u#41 -(word) rem16u#42 -(word) rem16u#43 -(word) rem16u#44 -(word) rem16u#45 -(word) rem16u#46 -(word) rem16u#47 -(word) rem16u#48 -(word) rem16u#49 -(word) rem16u#5 -(word) rem16u#50 -(word) rem16u#51 -(word) rem16u#52 -(word) rem16u#53 -(word) rem16u#54 -(word) rem16u#55 -(word) rem16u#56 -(word) rem16u#57 -(word) rem16u#58 -(word) rem16u#59 -(word) rem16u#6 -(word) rem16u#60 -(word) rem16u#61 -(word) rem16u#62 -(word) rem16u#63 -(word) rem16u#64 -(word) rem16u#65 -(word) rem16u#7 -(word) rem16u#8 -(word) rem16u#9 (void()) screen_fill((byte*) screen_fill::screen , (byte) screen_fill::ch) (bool~) screen_fill::$0 (bool~) screen_fill::$1 @@ -3241,53 +2984,44 @@ SYMBOL TABLE SSA (byte[4]) y_start#0 OPTIMIZING CONTROL FLOW GRAPH +Culled Empty Block (label) main::@3 +Culled Empty Block (label) main::@6 +Culled Empty Block (label) @19 +Succesful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) divr16u::$9 ← (word) divr16u::rem#5 < (word) divr16u::divisor#1 from (bool~) divr16u::$8 ← (word) divr16u::rem#5 >= (word) divr16u::divisor#1 Inversing boolean not (bool~) bitmap_init::$1 ← (byte) bitmap_init::bits#1 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) bitmap_init::$9 ← (byte~) bitmap_init::$7 != (byte/signed byte/word/signed word/dword/signed dword) 7 from (bool~) bitmap_init::$8 ← (byte~) bitmap_init::$7 == (byte/signed byte/word/signed word/dword/signed dword) 7 Succesful SSA optimization Pass2UnaryNotSimplification -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#8 Not aliassing across scopes: divr16s::dividend#1 divr16s::dividend#0 Not aliassing across scopes: divr16s::rem#1 divr16s::rem#0 Not aliassing across scopes: divr16s::divisor#6 divr16s::divisor#0 -Not aliassing across scopes: rem16u#51 rem16u#23 Not aliassing across scopes: divr16u::dividend#1 divr16s::dividendu#3 Not aliassing across scopes: divr16u::divisor#0 divr16s::divisoru#3 Not aliassing across scopes: divr16u::rem#3 divr16s::remu#3 Not aliassing across scopes: divr16u::return#2 divr16u::return#1 -Not aliassing across scopes: rem16u#11 rem16u#2 Not aliassing across scopes: divr16s::$14 divr16u::return#4 Not aliassing across scopes: SCREEN#1 SCREEN#4 Not aliassing across scopes: BITMAP#9 BITMAP#10 -Not aliassing across scopes: rem16u#65 rem16u#25 -Not aliassing across scopes: rem16s#52 rem16s#19 Not aliassing across scopes: main::vicSelectGfxBank1_gfx#0 SCREEN#1 Not aliassing across scopes: main::toD0181_screen#0 SCREEN#2 Not aliassing across scopes: main::toD0181_gfx#0 BITMAP#1 Not aliassing across scopes: bitmap_init::bitmap#0 BITMAP#2 Not aliassing across scopes: screen_fill::screen#0 SCREEN#3 Not aliassing across scopes: point_init::point_idx#0 main::i#2 -Not aliassing across scopes: rem16u#15 rem16u#8 -Not aliassing across scopes: rem16s#10 rem16s#7 Not aliassing across scopes: point_init::point_idx#1 point_init::point_idx#0 -Not aliassing across scopes: rem16u#49 rem16u#21 -Not aliassing across scopes: rem16s#37 rem16s#15 Not aliassing across scopes: divr16s::divisor#0 point_init::x_diff#2 Not aliassing across scopes: divr16s::rem#0 point_init::y_diff#2 Not aliassing across scopes: divr16s::return#3 divr16s::return#2 -Not aliassing across scopes: rem16u#17 rem16u#4 -Not aliassing across scopes: rem16s#12 rem16s#3 Not aliassing across scopes: point_init::$12 divr16s::return#5 Not aliassing across scopes: screen_fill::ch#3 screen_fill::ch#0 Not aliassing across scopes: screen_fill::screen#4 screen_fill::screen#0 Not aliassing across scopes: bitmap_init::bitmap#5 bitmap_init::bitmap#0 Not aliassing across scopes: bitmap_plot::y#1 bitmap_plot::y#0 Not aliassing across scopes: bitmap_plot::x#1 bitmap_plot::x#0 -Not aliassing across scopes: rem16u#19 rem16u#6 -Not aliassing across scopes: rem16s#14 rem16s#5 Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#6 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#7 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 @@ -3300,14 +3034,10 @@ Alias (word) divr16u::rem#5 = (word) divr16u::rem#7 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#2 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 Alias (word) divr16u::rem#2 = (word~) divr16u::$10 -Alias (word) divr16u::rem#10 = (word) divr16u::rem#8 Alias (word) divr16u::return#0 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#3 (word) divr16u::return#1 -Alias (word) rem16u#1 = (word) rem16u#10 (word) rem16u#2 -Alias (word) rem16u#0 = (word) rem16u#43 (word) rem16u#40 (word) rem16u#34 (word) rem16u#25 Alias (signed word) divr16s::dividend#1 = (signed word) divr16s::dividend#2 (signed word) divr16s::dividend#3 Alias (signed word) divr16s::rem#1 = (signed word) divr16s::rem#2 (signed word) divr16s::rem#3 Alias (signed word) divr16s::divisor#4 = (signed word) divr16s::divisor#6 (signed word) divr16s::divisor#5 -Alias (word) rem16u#41 = (word) rem16u#51 (word) rem16u#42 Alias (word) divr16s::dividendu#1 = (word~) divr16s::$6 Alias (word) divr16s::remu#1 = (word~) divr16s::$8 Alias (byte) divr16s::neg#0 = (byte) divr16s::neg#7 @@ -3317,52 +3047,33 @@ Alias (signed word) divr16s::divisor#1 = (signed word) divr16s::divisor#2 (signe Alias (byte) divr16s::neg#3 = (byte) divr16s::neg#5 (byte) divr16s::neg#8 Alias (word) divr16s::dividendu#4 = (word) divr16s::dividendu#6 (word) divr16s::dividendu#5 Alias (word) divr16s::remu#4 = (word) divr16s::remu#6 (word) divr16s::remu#5 -Alias (word) rem16u#26 = (word) rem16u#35 (word) rem16u#27 Alias (word) divr16s::divisoru#1 = (word~) divr16s::$12 Alias (byte) divr16s::neg#2 = (byte/word/dword~) divr16s::$13 Alias (word) divr16s::divisoru#2 = (word~) divr16s::$10 Alias (word) divr16u::return#2 = (word) divr16u::return#4 Alias (byte) divr16s::neg#4 = (byte) divr16s::neg#6 -Alias (word) rem16u#11 = (word) rem16u#3 (word) rem16u#12 (word) rem16u#13 Alias (word) divr16s::resultu#0 = (word~) divr16s::$14 (word) divr16s::resultu#1 (word) divr16s::resultu#2 -Alias (signed word) rem16s#1 = (signed word~) divr16s::$20 Alias (signed word) divr16s::return#0 = (signed word~) divr16s::$21 -Alias (signed word) rem16s#2 = (signed word~) divr16s::$17 Alias (signed word) divr16s::return#1 = (signed word~) divr16s::$19 Alias (signed word) divr16s::return#2 = (signed word) divr16s::return#4 -Alias (word) rem16u#14 = (word) rem16u#4 -Alias (signed word) rem16s#3 = (signed word) rem16s#9 -Alias (signed word) rem16s#0 = (signed word) rem16s#31 (signed word) rem16s#26 (signed word) rem16s#19 Alias (byte*) main::vicSelectGfxBank1_gfx#0 = (byte*) main::vicSelectGfxBank1_gfx#1 (byte*) main::vicSelectGfxBank1_toDd001_gfx#0 (byte*) main::vicSelectGfxBank1_toDd001_gfx#1 Alias (byte*) SCREEN#1 = (byte*) SCREEN#12 (byte*) SCREEN#10 (byte*) SCREEN#7 (byte*) SCREEN#5 (byte*) SCREEN#2 (byte*) SCREEN#13 (byte*) SCREEN#11 (byte*) SCREEN#8 (byte*) SCREEN#6 (byte*) SCREEN#3 Alias (byte*) BITMAP#1 = (byte*) BITMAP#8 (byte*) BITMAP#9 (byte*) BITMAP#7 (byte*) BITMAP#5 (byte*) BITMAP#3 (byte*) BITMAP#6 (byte*) BITMAP#4 (byte*) BITMAP#2 -Alias (word) rem16u#28 = (word) rem16u#64 (word) rem16u#65 (word) rem16u#63 (word) rem16u#62 (word) rem16u#61 (word) rem16u#60 (word) rem16u#58 (word) rem16u#55 (word) rem16u#52 (word) rem16u#44 (word) rem16u#36 -Alias (signed word) rem16s#20 = (signed word) rem16s#51 (signed word) rem16s#52 (signed word) rem16s#50 (signed word) rem16s#49 (signed word) rem16s#48 (signed word) rem16s#47 (signed word) rem16s#45 (signed word) rem16s#42 (signed word) rem16s#39 (signed word) rem16s#32 (signed word) rem16s#27 Alias (byte) main::vicSelectGfxBank1_toDd001_return#0 = (byte/word/dword) main::vicSelectGfxBank1_toDd001_$3#0 (byte) main::vicSelectGfxBank1_toDd001_return#2 (byte) main::vicSelectGfxBank1_toDd001_return#1 (byte) main::vicSelectGfxBank1_toDd001_return#3 (byte) main::vicSelectGfxBank1_$0#0 Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 Alias (byte) main::toD0181_return#0 = (byte) main::toD0181_$8#0 (byte) main::toD0181_return#2 (byte) main::toD0181_return#1 (byte) main::toD0181_return#3 (byte~) main::$4 Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4 -Alias (word) rem16u#15 = (word) rem16u#5 (word) rem16u#29 -Alias (signed word) rem16s#10 = (signed word) rem16s#4 (signed word) rem16s#21 -Alias (word) rem16u#16 = (word) rem16u#45 (word) rem16u#22 (word) rem16u#6 -Alias (signed word) rem16s#11 = (signed word) rem16s#33 (signed word) rem16s#16 (signed word) rem16s#5 -Alias (word) rem16u#30 = (word) rem16u#46 (word) rem16u#37 -Alias (signed word) rem16s#22 = (signed word) rem16s#34 (signed word) rem16s#28 Alias (byte) point_init::point_idx1#0 = (byte~) point_init::$0 (byte) point_init::point_idx1#16 (byte) point_init::point_idx1#14 (byte) point_init::point_idx1#15 Alias (signed word) point_init::abs16s1_w#0 = (signed word) point_init::x_diff#0 (signed word~) point_init::$3 (signed word) point_init::abs16s1_w#1 (signed word) point_init::x_diff#13 (signed word) point_init::abs16s1_w#2 (signed word) point_init::x_diff#9 (signed word) point_init::abs16s1_w#3 (signed word) point_init::x_diff#10 Alias (signed word) point_init::y_diff#0 = (signed word~) point_init::$6 (signed word) point_init::y_diff#9 (signed word) point_init::y_diff#6 (signed word) point_init::y_diff#7 Alias (byte) point_init::point_idx#1 = (byte) point_init::point_idx#17 (byte) point_init::point_idx#14 (byte) point_init::point_idx#15 -Alias (word) rem16u#49 = (word) rem16u#59 (word) rem16u#56 (word) rem16u#57 -Alias (signed word) rem16s#37 = (signed word) rem16s#46 (signed word) rem16s#43 (signed word) rem16s#44 Alias (word) point_init::abs16s1_return#0 = (word) point_init::abs16s1_$3#0 Alias (word) point_init::abs16s1_return#1 = (word) point_init::abs16s1_$1#0 Alias (word) point_init::abs16s1_return#2 = (word) point_init::abs16s1_return#3 (word) point_init::abs16s1_return#4 (word~) point_init::$7 Alias (signed word) point_init::y_diff#1 = (signed word) point_init::y_diff#3 (signed word) point_init::abs16s2_w#0 (signed word) point_init::abs16s2_w#1 (signed word) point_init::y_diff#14 (signed word) point_init::abs16s2_w#2 (signed word) point_init::y_diff#12 (signed word) point_init::abs16s2_w#3 (signed word) point_init::y_diff#13 Alias (signed word) point_init::x_diff#11 = (signed word) point_init::x_diff#4 (signed word) point_init::x_diff#7 (signed word) point_init::x_diff#14 (signed word) point_init::x_diff#12 Alias (byte) point_init::point_idx#11 = (byte) point_init::point_idx#9 (byte) point_init::point_idx#16 (byte) point_init::point_idx#12 (byte) point_init::point_idx#13 -Alias (word) rem16u#47 = (word) rem16u#50 (word) rem16u#53 (word) rem16u#54 (word) rem16u#48 -Alias (signed word) rem16s#35 = (signed word) rem16s#38 (signed word) rem16s#40 (signed word) rem16s#41 (signed word) rem16s#36 Alias (byte) point_init::point_idx1#11 = (byte) point_init::point_idx1#12 (byte) point_init::point_idx1#13 (byte) point_init::point_idx1#8 (byte) point_init::point_idx1#9 Alias (word) point_init::abs16s2_return#0 = (word) point_init::abs16s2_$3#0 Alias (word) point_init::abs16s2_return#1 = (word) point_init::abs16s2_$1#0 @@ -3370,23 +3081,15 @@ Alias (word) point_init::abs16s2_return#2 = (word) point_init::abs16s2_return#3 Alias (signed word) point_init::x_diff#3 = (signed word) point_init::x_diff#8 Alias (byte) point_init::point_idx#5 = (byte) point_init::point_idx#8 Alias (byte) point_init::point_idx1#3 = (byte) point_init::point_idx1#5 -Alias (word) rem16u#31 = (word) rem16u#38 -Alias (signed word) rem16s#23 = (signed word) rem16s#29 Alias (signed word) point_init::y_diff#10 = (signed word) point_init::y_diff#11 Alias (byte) point_init::point_idx#3 = (byte) point_init::point_idx#7 (byte) point_init::point_idx#4 Alias (signed word) point_init::x_diff#1 = (signed word) point_init::x_diff#5 (signed word) point_init::x_diff#6 Alias (signed word) point_init::y_diff#4 = (signed word) point_init::y_diff#8 (signed word) point_init::y_diff#5 -Alias (word) rem16u#32 = (word) rem16u#39 (word) rem16u#33 -Alias (signed word) rem16s#24 = (signed word) rem16s#30 (signed word) rem16s#25 Alias (byte) point_init::point_idx1#10 = (byte) point_init::point_idx1#6 (byte) point_init::point_idx1#7 Alias (signed word) divr16s::return#3 = (signed word) divr16s::return#5 Alias (byte) point_init::point_idx1#2 = (byte) point_init::point_idx1#4 Alias (byte) point_init::point_idx#10 = (byte) point_init::point_idx#6 -Alias (word) rem16u#17 = (word) rem16u#7 -Alias (signed word) rem16s#12 = (signed word) rem16s#6 Alias (signed word) point_init::x_stepf#0 = (signed word~) point_init::$12 -Alias (word) rem16u#18 = (word) rem16u#24 (word) rem16u#8 -Alias (signed word) rem16s#13 = (signed word) rem16s#18 (signed word) rem16s#7 Alias (byte) screen_fill::y#2 = (byte) screen_fill::y#3 Alias (byte) screen_fill::ch#1 = (byte) screen_fill::ch#4 Alias (byte*) screen_fill::screen#1 = (byte*) screen_fill::screen#5 @@ -3402,243 +3105,167 @@ Alias (byte*) bitmap_clear::bitmap#0 = (byte*~) bitmap_clear::$0 Alias (byte) bitmap_clear::y#2 = (byte) bitmap_clear::y#3 Alias (byte*) bitmap_clear::bitmap#1 = (byte*) bitmap_clear::bitmap#4 Alias (byte*) bitmap_plot::plotter#0 = (byte*~) bitmap_plot::$0 -Alias (word) rem16u#19 = (word) rem16u#9 -Alias (signed word) rem16s#14 = (signed word) rem16s#8 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: divr16s::dividend#1 divr16s::dividend#0 Not aliassing across scopes: divr16s::rem#1 divr16s::rem#0 Not aliassing across scopes: divr16s::divisor#4 divr16s::divisor#0 -Not aliassing across scopes: rem16u#41 rem16u#23 Not aliassing across scopes: divr16u::dividend#1 divr16s::dividendu#3 Not aliassing across scopes: divr16u::divisor#0 divr16s::divisoru#3 Not aliassing across scopes: divr16u::rem#3 divr16s::remu#3 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 -Not aliassing across scopes: rem16u#11 rem16u#1 Not aliassing across scopes: divr16s::resultu#0 divr16u::return#2 Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: BITMAP#1 BITMAP#0 -Not aliassing across scopes: rem16u#28 rem16u#0 -Not aliassing across scopes: rem16s#20 rem16s#0 Not aliassing across scopes: main::vicSelectGfxBank1_gfx#0 SCREEN#1 Not aliassing across scopes: main::toD0181_screen#0 SCREEN#1 Not aliassing across scopes: main::toD0181_gfx#0 BITMAP#1 Not aliassing across scopes: bitmap_init::bitmap#0 BITMAP#1 Not aliassing across scopes: screen_fill::screen#0 SCREEN#1 Not aliassing across scopes: point_init::point_idx#0 main::i#2 -Not aliassing across scopes: rem16u#15 rem16u#18 -Not aliassing across scopes: rem16s#10 rem16s#13 Not aliassing across scopes: point_init::point_idx#1 point_init::point_idx#0 -Not aliassing across scopes: rem16u#49 rem16u#21 -Not aliassing across scopes: rem16s#37 rem16s#15 Not aliassing across scopes: divr16s::divisor#0 point_init::x_diff#2 Not aliassing across scopes: divr16s::rem#0 point_init::y_diff#2 Not aliassing across scopes: divr16s::return#3 divr16s::return#2 -Not aliassing across scopes: rem16u#17 rem16u#14 -Not aliassing across scopes: rem16s#12 rem16s#3 Not aliassing across scopes: point_init::x_stepf#0 divr16s::return#3 Not aliassing across scopes: screen_fill::ch#3 screen_fill::ch#0 Not aliassing across scopes: screen_fill::screen#4 screen_fill::screen#0 Not aliassing across scopes: bitmap_init::bitmap#5 bitmap_init::bitmap#0 Not aliassing across scopes: bitmap_plot::y#1 bitmap_plot::y#0 Not aliassing across scopes: bitmap_plot::x#1 bitmap_plot::x#0 -Not aliassing across scopes: rem16u#19 rem16u#16 -Not aliassing across scopes: rem16s#14 rem16s#11 Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#3 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#3 (word) divr16u::divisor#6 Alias (byte) divr16u::i#2 = (byte) divr16u::i#3 (byte) divr16u::i#5 Alias (word) divr16u::dividend#0 = (word) divr16u::dividend#5 Alias (signed word) divr16s::divisor#1 = (signed word) divr16s::divisor#4 -Alias (word) rem16u#20 = (word) rem16u#26 (word) rem16u#41 Alias (word) divr16s::dividendu#3 = (word) divr16s::dividendu#4 Alias (word) divr16s::remu#3 = (word) divr16s::remu#4 -Alias (word) rem16u#11 = (word) rem16u#14 Alias (signed word) point_init::y_diff#0 = (signed word) point_init::y_diff#1 (signed word) point_init::y_diff#10 Alias (signed word) point_init::x_diff#11 = (signed word) point_init::abs16s1_w#0 (signed word) point_init::x_diff#3 Alias (byte) point_init::point_idx#1 = (byte) point_init::point_idx#11 (byte) point_init::point_idx#5 -Alias (word) rem16u#31 = (word) rem16u#47 (word) rem16u#49 -Alias (signed word) rem16s#23 = (signed word) rem16s#35 (signed word) rem16s#37 Alias (byte) point_init::point_idx1#0 = (byte) point_init::point_idx1#11 (byte) point_init::point_idx1#3 Alias (signed word) point_init::x_diff#1 = (signed word) point_init::x_diff#2 Alias (signed word) point_init::y_diff#2 = (signed word) point_init::y_diff#4 -Alias (word) rem16u#23 = (word) rem16u#32 -Alias (signed word) rem16s#17 = (signed word) rem16s#24 Alias (byte) point_init::point_idx1#10 = (byte) point_init::point_idx1#2 Alias (byte) point_init::point_idx#10 = (byte) point_init::point_idx#3 Alias (byte) bitmap_init::x#2 = (byte) bitmap_init::x#3 Alias (byte*) bitmap_init::bitmap#1 = (byte*) bitmap_init::bitmap#3 Alias (byte) bitmap_init::y#2 = (byte) bitmap_init::y#3 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: divr16s::dividend#1 divr16s::dividend#0 Not aliassing across scopes: divr16s::rem#1 divr16s::rem#0 Not aliassing across scopes: divr16s::divisor#1 divr16s::divisor#0 -Not aliassing across scopes: rem16u#20 rem16u#23 Not aliassing across scopes: divr16u::dividend#1 divr16s::dividendu#3 Not aliassing across scopes: divr16u::divisor#0 divr16s::divisoru#3 Not aliassing across scopes: divr16u::rem#3 divr16s::remu#3 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 -Not aliassing across scopes: rem16u#11 rem16u#1 Not aliassing across scopes: divr16s::resultu#0 divr16u::return#2 Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: BITMAP#1 BITMAP#0 -Not aliassing across scopes: rem16u#28 rem16u#0 -Not aliassing across scopes: rem16s#20 rem16s#0 Not aliassing across scopes: main::vicSelectGfxBank1_gfx#0 SCREEN#1 Not aliassing across scopes: main::toD0181_screen#0 SCREEN#1 Not aliassing across scopes: main::toD0181_gfx#0 BITMAP#1 Not aliassing across scopes: bitmap_init::bitmap#0 BITMAP#1 Not aliassing across scopes: screen_fill::screen#0 SCREEN#1 Not aliassing across scopes: point_init::point_idx#0 main::i#2 -Not aliassing across scopes: rem16u#15 rem16u#18 -Not aliassing across scopes: rem16s#10 rem16s#13 Not aliassing across scopes: point_init::point_idx#1 point_init::point_idx#0 -Not aliassing across scopes: rem16u#31 rem16u#21 -Not aliassing across scopes: rem16s#23 rem16s#15 Not aliassing across scopes: divr16s::divisor#0 point_init::x_diff#1 Not aliassing across scopes: divr16s::rem#0 point_init::y_diff#2 Not aliassing across scopes: divr16s::return#3 divr16s::return#2 -Not aliassing across scopes: rem16u#17 rem16u#11 -Not aliassing across scopes: rem16s#12 rem16s#3 Not aliassing across scopes: point_init::x_stepf#0 divr16s::return#3 Not aliassing across scopes: screen_fill::ch#3 screen_fill::ch#0 Not aliassing across scopes: screen_fill::screen#4 screen_fill::screen#0 Not aliassing across scopes: bitmap_init::bitmap#5 bitmap_init::bitmap#0 Not aliassing across scopes: bitmap_plot::y#1 bitmap_plot::y#0 Not aliassing across scopes: bitmap_plot::x#1 bitmap_plot::x#0 -Not aliassing across scopes: rem16u#19 rem16u#16 -Not aliassing across scopes: rem16s#14 rem16s#11 Alias (signed word) point_init::x_diff#1 = (signed word) point_init::x_diff#11 Alias (byte) point_init::point_idx#1 = (byte) point_init::point_idx#10 Alias (signed word) point_init::y_diff#0 = (signed word) point_init::y_diff#2 -Alias (word) rem16u#23 = (word) rem16u#31 -Alias (signed word) rem16s#17 = (signed word) rem16s#23 Alias (byte) point_init::point_idx1#0 = (byte) point_init::point_idx1#10 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: divr16s::dividend#1 divr16s::dividend#0 Not aliassing across scopes: divr16s::rem#1 divr16s::rem#0 Not aliassing across scopes: divr16s::divisor#1 divr16s::divisor#0 -Not aliassing across scopes: rem16u#20 rem16u#23 Not aliassing across scopes: divr16u::dividend#1 divr16s::dividendu#3 Not aliassing across scopes: divr16u::divisor#0 divr16s::divisoru#3 Not aliassing across scopes: divr16u::rem#3 divr16s::remu#3 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 -Not aliassing across scopes: rem16u#11 rem16u#1 Not aliassing across scopes: divr16s::resultu#0 divr16u::return#2 Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: BITMAP#1 BITMAP#0 -Not aliassing across scopes: rem16u#28 rem16u#0 -Not aliassing across scopes: rem16s#20 rem16s#0 Not aliassing across scopes: main::vicSelectGfxBank1_gfx#0 SCREEN#1 Not aliassing across scopes: main::toD0181_screen#0 SCREEN#1 Not aliassing across scopes: main::toD0181_gfx#0 BITMAP#1 Not aliassing across scopes: bitmap_init::bitmap#0 BITMAP#1 Not aliassing across scopes: screen_fill::screen#0 SCREEN#1 Not aliassing across scopes: point_init::point_idx#0 main::i#2 -Not aliassing across scopes: rem16u#15 rem16u#18 -Not aliassing across scopes: rem16s#10 rem16s#13 Not aliassing across scopes: point_init::point_idx#1 point_init::point_idx#0 -Not aliassing across scopes: rem16u#23 rem16u#21 -Not aliassing across scopes: rem16s#17 rem16s#15 Not aliassing across scopes: divr16s::divisor#0 point_init::x_diff#1 Not aliassing across scopes: divr16s::rem#0 point_init::y_diff#0 Not aliassing across scopes: divr16s::return#3 divr16s::return#2 -Not aliassing across scopes: rem16u#17 rem16u#11 -Not aliassing across scopes: rem16s#12 rem16s#3 Not aliassing across scopes: point_init::x_stepf#0 divr16s::return#3 Not aliassing across scopes: screen_fill::ch#3 screen_fill::ch#0 Not aliassing across scopes: screen_fill::screen#4 screen_fill::screen#0 Not aliassing across scopes: bitmap_init::bitmap#5 bitmap_init::bitmap#0 Not aliassing across scopes: bitmap_plot::y#1 bitmap_plot::y#0 Not aliassing across scopes: bitmap_plot::x#1 bitmap_plot::x#0 -Not aliassing across scopes: rem16u#19 rem16u#16 -Not aliassing across scopes: rem16s#14 rem16s#11 Alias (byte) point_init::point_idx#1 = (byte) point_init::point_idx#2 Alias (byte) point_init::point_idx1#0 = (byte) point_init::point_idx1#1 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: divr16s::dividend#1 divr16s::dividend#0 Not aliassing across scopes: divr16s::rem#1 divr16s::rem#0 Not aliassing across scopes: divr16s::divisor#1 divr16s::divisor#0 -Not aliassing across scopes: rem16u#20 rem16u#23 Not aliassing across scopes: divr16u::dividend#1 divr16s::dividendu#3 Not aliassing across scopes: divr16u::divisor#0 divr16s::divisoru#3 Not aliassing across scopes: divr16u::rem#3 divr16s::remu#3 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 -Not aliassing across scopes: rem16u#11 rem16u#1 Not aliassing across scopes: divr16s::resultu#0 divr16u::return#2 Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: BITMAP#1 BITMAP#0 -Not aliassing across scopes: rem16u#28 rem16u#0 -Not aliassing across scopes: rem16s#20 rem16s#0 Not aliassing across scopes: main::vicSelectGfxBank1_gfx#0 SCREEN#1 Not aliassing across scopes: main::toD0181_screen#0 SCREEN#1 Not aliassing across scopes: main::toD0181_gfx#0 BITMAP#1 Not aliassing across scopes: bitmap_init::bitmap#0 BITMAP#1 Not aliassing across scopes: screen_fill::screen#0 SCREEN#1 Not aliassing across scopes: point_init::point_idx#0 main::i#2 -Not aliassing across scopes: rem16u#15 rem16u#18 -Not aliassing across scopes: rem16s#10 rem16s#13 Not aliassing across scopes: point_init::point_idx#1 point_init::point_idx#0 -Not aliassing across scopes: rem16u#23 rem16u#21 -Not aliassing across scopes: rem16s#17 rem16s#15 Not aliassing across scopes: divr16s::divisor#0 point_init::x_diff#1 Not aliassing across scopes: divr16s::rem#0 point_init::y_diff#0 Not aliassing across scopes: divr16s::return#3 divr16s::return#2 -Not aliassing across scopes: rem16u#17 rem16u#11 -Not aliassing across scopes: rem16s#12 rem16s#3 Not aliassing across scopes: point_init::x_stepf#0 divr16s::return#3 Not aliassing across scopes: screen_fill::ch#3 screen_fill::ch#0 Not aliassing across scopes: screen_fill::screen#4 screen_fill::screen#0 Not aliassing across scopes: bitmap_init::bitmap#5 bitmap_init::bitmap#0 Not aliassing across scopes: bitmap_plot::y#1 bitmap_plot::y#0 Not aliassing across scopes: bitmap_plot::x#1 bitmap_plot::x#0 -Not aliassing across scopes: rem16u#19 rem16u#16 -Not aliassing across scopes: rem16s#14 rem16s#11 Self Phi Eliminated (word) divr16u::divisor#1 -Self Phi Eliminated (word) rem16u#30 -Self Phi Eliminated (signed word) rem16s#22 Self Phi Eliminated (byte) screen_fill::ch#1 Self Phi Eliminated (byte) screen_fill::y#2 Self Phi Eliminated (byte*) bitmap_init::bitmap#1 Self Phi Eliminated (byte) bitmap_clear::y#2 Succesful SSA optimization Pass2SelfPhiElimination -Redundant Phi (word) divr16u::rem#9 (word) divr16u::rem#3 +Redundant Phi (word) divr16u::rem#8 (word) divr16u::rem#3 Redundant Phi (word) divr16u::dividend#4 (word) divr16u::dividend#1 Redundant Phi (word) divr16u::divisor#5 (word) divr16u::divisor#0 Redundant Phi (word) divr16u::divisor#1 (word) divr16u::divisor#5 Redundant Phi (signed word) divr16s::dividend#1 (signed word) divr16s::dividend#0 Redundant Phi (signed word) divr16s::rem#1 (signed word) divr16s::rem#0 Redundant Phi (signed word) divr16s::divisor#1 (signed word) divr16s::divisor#0 -Redundant Phi (word) rem16u#20 (word) rem16u#23 -Redundant Phi (word) rem16u#11 (word) rem16u#1 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte*) BITMAP#1 (byte*) BITMAP#0 -Redundant Phi (word) rem16u#28 (word) rem16u#0 -Redundant Phi (signed word) rem16s#20 (signed word) rem16s#0 -Redundant Phi (word) rem16u#15 (word) rem16u#18 -Redundant Phi (signed word) rem16s#10 (signed word) rem16s#13 -Redundant Phi (word) rem16u#30 (word) rem16u#16 -Redundant Phi (signed word) rem16s#22 (signed word) rem16s#11 Redundant Phi (byte) point_init::point_idx#1 (byte) point_init::point_idx#0 -Redundant Phi (word) rem16u#23 (word) rem16u#21 -Redundant Phi (signed word) rem16s#17 (signed word) rem16s#15 -Redundant Phi (word) rem16u#17 (word) rem16u#11 -Redundant Phi (signed word) rem16s#12 (signed word) rem16s#3 Redundant Phi (byte) screen_fill::ch#3 (byte) screen_fill::ch#0 Redundant Phi (byte*) screen_fill::screen#4 (byte*) screen_fill::screen#0 Redundant Phi (byte) screen_fill::ch#1 (byte) screen_fill::ch#2 @@ -3648,8 +3275,6 @@ Redundant Phi (byte*) bitmap_init::bitmap#1 (byte*) bitmap_init::bitmap#5 Redundant Phi (byte) bitmap_clear::y#2 (byte) bitmap_clear::y#4 Redundant Phi (byte) bitmap_plot::y#1 (byte) bitmap_plot::y#0 Redundant Phi (word) bitmap_plot::x#1 (word) bitmap_plot::x#0 -Redundant Phi (word) rem16u#19 (word) rem16u#16 -Redundant Phi (signed word) rem16s#14 (signed word) rem16s#11 Succesful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 @@ -3657,7 +3282,7 @@ Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) g Simple Condition (bool~) divr16s::$9 if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 Simple Condition (bool~) divr16s::$15 if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@5 Simple Condition (bool~) main::$11 if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 -Simple Condition (bool~) main::$12 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@6 +Simple Condition (bool~) main::$12 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 Simple Condition (bool) point_init::abs16s1_$0#0 if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 Simple Condition (bool) point_init::abs16s2_$0#0 if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 Simple Condition (bool~) point_init::$9 if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 @@ -3686,10 +3311,8 @@ Constant (const byte) VIC_RSEL#0 = 8 Constant (const byte*) D018#0 = ((byte*))53272 Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576 Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578 -Constant (const word) rem16u#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 -Constant (const signed word) rem16s#0 = 0 Constant (const byte) divr16s::neg#0 = 0 Constant (const word) divr16s::dividendu#0 = 0 Constant (const word) divr16s::remu#0 = 0 @@ -3756,13 +3379,11 @@ Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 Succesful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating if((const bool) divr16s::$0) goto divr16s::@1 -if() condition always true - replacing block destination if(true) goto main::@3 +if() condition always true - replacing block destination if(true) goto main::@5 Succesful SSA optimization Pass2ConstantIfs Fixing inline constructor with bitmap_clear::$3 ← *(bitmap_plot_yhi#0 + 0) w= *(bitmap_plot_ylo#0 + 0) Fixing inline constructor with bitmap_plot::$3 ← *(bitmap_plot_yhi#0 + bitmap_plot::y#0) w= *(bitmap_plot_ylo#0 + bitmap_plot::y#0) Succesful SSA optimization Pass2FixInlineConstructors -Eliminating unused variable - keeping the phi block (word) rem16u#16 -Eliminating unused variable - keeping the phi block (signed word) rem16s#11 Eliminating unused constant (const word) divr16s::dividendu#0 Eliminating unused constant (const word) divr16s::remu#0 Eliminating unused constant (const word) divr16s::divisoru#0 @@ -3772,9 +3393,7 @@ Eliminating Noop Cast (word) divr16s::remu#1 ← ((word)) (signed word~) divr16s Eliminating Noop Cast (word) divr16s::remu#2 ← ((word)) (signed word) divr16s::rem#0 Eliminating Noop Cast (word) divr16s::divisoru#1 ← ((word)) (signed word~) divr16s::$11 Eliminating Noop Cast (word) divr16s::divisoru#2 ← ((word)) (signed word) divr16s::divisor#0 -Eliminating Noop Cast (signed word) rem16s#1 ← ((signed word)) (word) rem16u#1 Eliminating Noop Cast (signed word) divr16s::return#0 ← ((signed word)) (word) divr16s::resultu#0 -Eliminating Noop Cast (signed word~) divr16s::$16 ← ((signed word)) (word) rem16u#1 Eliminating Noop Cast (signed word~) divr16s::$18 ← ((signed word)) (word) divr16s::resultu#0 Eliminating Noop Cast (signed word~) point_init::$1 ← ((signed word)) *((const word[4]) x_end#0 + (byte) point_init::point_idx#0) Eliminating Noop Cast (signed word~) point_init::$2 ← ((signed word)) *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) @@ -3802,8 +3421,7 @@ Resolved ranged next value bitmap_clear::x#1 ← ++ bitmap_clear::x#2 to ++ Resolved ranged comparison value if(bitmap_clear::x#1!=rangelast(0,199)) goto bitmap_clear::@2 to (byte/word/signed word/dword/signed dword) 200 Resolved ranged next value bitmap_clear::y#1 ← ++ bitmap_clear::y#4 to ++ Resolved ranged comparison value if(bitmap_clear::y#1!=rangelast(0,39)) goto bitmap_clear::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40 -Culled Empty Block (label) @5 -Culled Empty Block (label) @9 +Culled Empty Block (label) divr16u::@6 Culled Empty Block (label) divr16s::@7 Culled Empty Block (label) divr16s::@9 Culled Empty Block (label) divr16s::@5 @@ -3812,28 +3430,23 @@ Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@return Culled Empty Block (label) main::@15 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@19 -Culled Empty Block (label) main::@3 -Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@2 Culled Empty Block (label) point_init::abs16s1_@3 Culled Empty Block (label) point_init::@9 Culled Empty Block (label) point_init::abs16s2_@3 Culled Empty Block (label) @15 Not culling empty block because it shares successor with its predecessor. (label) bitmap_init::@5 Culled Empty Block (label) bitmap_init::@6 -Culled Empty Block (label) @19 Succesful SSA optimization Pass2CullEmptyBlocks Not culling empty block because it shares successor with its predecessor. (label) bitmap_init::@5 Not aliassing across scopes: divr16u::rem#4 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#2 divr16u::dividend#1 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: divr16u::dividend#1 divr16s::dividendu#3 Not aliassing across scopes: divr16u::divisor#0 divr16s::divisoru#3 Not aliassing across scopes: divr16u::rem#3 divr16s::remu#3 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 Not aliassing across scopes: divr16s::resultu#0 divr16u::return#2 Not aliassing across scopes: point_init::point_idx#0 main::i#2 -Not aliassing across scopes: rem16u#18 rem16u#21 -Not aliassing across scopes: rem16s#13 rem16s#15 Not aliassing across scopes: divr16s::divisor#0 point_init::x_diff#1 Not aliassing across scopes: divr16s::rem#0 point_init::y_diff#0 Not aliassing across scopes: divr16s::return#3 divr16s::return#2 @@ -3847,37 +3460,15 @@ Succesful SSA optimization Pass2ConditionalJumpSimplification Consolidated array index constant in *(bitmap_plot_yhi#0+0) Consolidated array index constant in *(bitmap_plot_ylo#0+0) Succesful SSA optimization Pass2ConstantAdditionElimination -Culled Empty Block (label) main::@2 -Not culling empty block because it shares successor with its predecessor. (label) bitmap_init::@5 -Succesful SSA optimization Pass2CullEmptyBlocks Not culling empty block because it shares successor with its predecessor. (label) bitmap_init::@5 Not aliassing across scopes: divr16u::rem#4 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#2 divr16u::dividend#1 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: divr16u::dividend#1 divr16s::dividendu#3 Not aliassing across scopes: divr16u::divisor#0 divr16s::divisoru#3 Not aliassing across scopes: divr16u::rem#3 divr16s::remu#3 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 Not aliassing across scopes: divr16s::resultu#0 divr16u::return#2 Not aliassing across scopes: point_init::point_idx#0 main::i#2 -Not aliassing across scopes: rem16u#18 rem16u#21 -Not aliassing across scopes: rem16s#13 rem16s#15 -Not aliassing across scopes: divr16s::divisor#0 point_init::x_diff#1 -Not aliassing across scopes: divr16s::rem#0 point_init::y_diff#0 -Not aliassing across scopes: divr16s::return#3 divr16s::return#2 -Not aliassing across scopes: point_init::x_stepf#0 divr16s::return#3 -Not culling empty block because it shares successor with its predecessor. (label) bitmap_init::@5 -Not aliassing across scopes: divr16u::rem#4 divr16u::rem#3 -Not aliassing across scopes: divr16u::dividend#2 divr16u::dividend#1 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 -Not aliassing across scopes: divr16u::dividend#1 divr16s::dividendu#3 -Not aliassing across scopes: divr16u::divisor#0 divr16s::divisoru#3 -Not aliassing across scopes: divr16u::rem#3 divr16s::remu#3 -Not aliassing across scopes: divr16u::return#2 divr16u::return#0 -Not aliassing across scopes: divr16s::resultu#0 divr16u::return#2 -Not aliassing across scopes: point_init::point_idx#0 main::i#2 -Not aliassing across scopes: rem16u#18 rem16u#21 -Not aliassing across scopes: rem16s#13 rem16s#15 Not aliassing across scopes: divr16s::divisor#0 point_init::x_diff#1 Not aliassing across scopes: divr16s::rem#0 point_init::y_diff#0 Not aliassing across scopes: divr16s::return#3 divr16s::return#2 @@ -3923,13 +3514,6 @@ Inlining constant with var siblings (const byte) bitmap_clear::y#0 Inlining constant with var siblings (const byte) bitmap_clear::y#0 Inlining constant with var siblings (const byte) bitmap_clear::x#0 Inlining constant with var siblings (const byte) bitmap_clear::x#0 -Inlining constant with var siblings (const word) rem16u#0 -Inlining constant with var siblings (const word) rem16u#0 -Inlining constant with var siblings (const word) rem16u#0 -Inlining constant with var siblings (const signed word) rem16s#0 -Inlining constant with var siblings (const signed word) rem16s#0 -Inlining constant with var siblings (const signed word) rem16s#0 -Inlining constant with var siblings (const signed word) rem16s#0 Constant inlined main::toD0181_screen#0 = (const byte*) SCREEN#0 Constant inlined main::toD0181_gfx#0 = (const byte*) BITMAP#0 Constant inlined divr16u::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -3949,10 +3533,8 @@ Constant inlined main::vicSelectGfxBank1_toDd001_$1#0 = >((word))(const byte*) S Constant inlined main::vicSelectGfxBank1_toDd001_$0#0 = ((word))(const byte*) SCREEN#0 Constant inlined bitmap_clear::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined bitmap_clear::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined rem16s#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::toD0181_$0#0 = ((word))(const byte*) SCREEN#0 Constant inlined main::toD0181_$1#0 = ((word))(const byte*) SCREEN#0&(word/signed word/dword/signed dword) 16383 -Constant inlined rem16u#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::toD0181_$6#0 = >((word))(const byte*) BITMAP#0>>(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined main::toD0181_$7#0 = >((word))(const byte*) BITMAP#0>>(byte/signed byte/word/signed word/dword/signed dword) 2&(byte/signed byte/word/signed word/dword/signed dword) 15 Constant inlined screen_fill::screen#0 = (const byte*) SCREEN#0 @@ -3970,11 +3552,10 @@ Constant inlined screen_fill::y#0 = (byte/signed byte/word/signed word/dword/sig Constant inlined bitmap_init::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined bitmap_init::bitmap#0 = (const byte*) BITMAP#0 Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @18 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::toD0181 main::@16 main::@17 main::@18 main::@1 main::@20 main::@21 main::@5 main::@7 bitmap_plot bitmap_plot::@return point_init point_init::abs16s1 point_init::abs16s1_@return point_init::abs16s2 point_init::abs16s2_@return point_init::@10 point_init::@2 point_init::@return point_init::@1 point_init::@7 point_init::@4 point_init::@11 point_init::@3 point_init::abs16s2_@1 point_init::abs16s1_@1 divr16s divr16s::@16 divr16s::@2 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return screen_fill screen_fill::@1 screen_fill::@2 screen_fill::@3 screen_fill::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return +Block Sequence Planned @begin @18 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::toD0181 main::@16 main::@17 main::@18 main::@1 main::@20 main::@21 main::@5 main::@7 bitmap_plot bitmap_plot::@return point_init point_init::abs16s1 point_init::abs16s1_@return point_init::abs16s2 point_init::abs16s2_@return point_init::@10 point_init::@2 point_init::@return point_init::@1 point_init::@7 point_init::@4 point_init::@11 point_init::@3 point_init::abs16s2_@1 point_init::abs16s1_@1 divr16s divr16s::@16 divr16s::@2 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return screen_fill screen_fill::@1 screen_fill::@2 screen_fill::@3 screen_fill::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return Added new block during phi lifting main::@22(between main::@21 and main::@1) Added new block during phi lifting point_init::@12(between point_init::abs16s1 and point_init::abs16s1_@return) Added new block during phi lifting point_init::@13(between point_init::abs16s2 and point_init::abs16s2_@return) -Added new block during phi lifting point_init::@14(between point_init::@10 and point_init::@2) Added new block during phi lifting divr16s::@17(between divr16s::@16 and divr16s::@2) Fixing phi predecessor for divr16s::neg#3 to new block ( divr16s::@16 -> divr16s::@17 ) during phi lifting. Fixing phi predecessor for divr16s::dividendu#3 to new block ( divr16s::@16 -> divr16s::@17 ) during phi lifting. @@ -3991,7 +3572,7 @@ Added new block during phi lifting bitmap_init::@9(between bitmap_init::@2 and b Added new block during phi lifting bitmap_init::@10(between bitmap_init::@1 and bitmap_init::@2) Added new block during phi lifting bitmap_init::@11(between bitmap_init::@4 and bitmap_init::@3) Added new block during phi lifting bitmap_init::@12(between bitmap_init::@3 and bitmap_init::@4) -Block Sequence Planned @begin @18 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::toD0181 main::@16 main::@17 main::@18 main::@1 main::@20 main::@21 main::@5 main::@7 main::@22 bitmap_plot bitmap_plot::@return point_init point_init::abs16s1 point_init::@12 point_init::abs16s1_@return point_init::abs16s2 point_init::@13 point_init::abs16s2_@return point_init::@10 point_init::@14 point_init::@2 point_init::@return point_init::@1 point_init::@7 point_init::@4 point_init::@11 point_init::@3 point_init::abs16s2_@1 point_init::abs16s1_@1 divr16s divr16s::@16 divr16s::@17 divr16s::@2 divr16s::@18 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@19 divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 screen_fill screen_fill::@1 screen_fill::@2 screen_fill::@3 screen_fill::@return screen_fill::@5 screen_fill::@6 bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_clear::@5 bitmap_clear::@6 bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@11 bitmap_init::@12 bitmap_init::@9 bitmap_init::@10 +Block Sequence Planned @begin @18 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::toD0181 main::@16 main::@17 main::@18 main::@1 main::@20 main::@21 main::@5 main::@7 main::@22 bitmap_plot bitmap_plot::@return point_init point_init::abs16s1 point_init::@12 point_init::abs16s1_@return point_init::abs16s2 point_init::@13 point_init::abs16s2_@return point_init::@10 point_init::@2 point_init::@return point_init::@1 point_init::@7 point_init::@4 point_init::@11 point_init::@3 point_init::abs16s2_@1 point_init::abs16s1_@1 divr16s divr16s::@16 divr16s::@17 divr16s::@2 divr16s::@18 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@19 divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 screen_fill screen_fill::@1 screen_fill::@2 screen_fill::@3 screen_fill::@return screen_fill::@5 screen_fill::@6 bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_clear::@5 bitmap_clear::@6 bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@11 bitmap_init::@12 bitmap_init::@9 bitmap_init::@10 Adding NOP phi() at start of @begin Adding NOP phi() at start of @18 Adding NOP phi() at start of @end @@ -4006,8 +3587,8 @@ Adding NOP phi() at start of bitmap_init::@5 CALL GRAPH Calls in [] to main:2 Calls in [main] to bitmap_init:13 bitmap_clear:15 screen_fill:17 point_init:20 bitmap_plot:24 -Calls in [point_init] to divr16s:64 -Calls in [divr16s] to divr16u:88 +Calls in [point_init] to divr16s:59 +Calls in [divr16s] to divr16u:81 Propagating live ranges... Propagating live ranges... @@ -4027,52 +3608,42 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... -Created 35 initial phi equivalence classes +Created 30 initial phi equivalence classes Coalesced [29] main::i#5 ← main::i#1 -Coalesced [30] rem16u#66 ← rem16u#18 -Coalesced [31] rem16s#53 ← rem16s#13 -Coalesced (already) [50] rem16u#67 ← rem16u#21 -Coalesced (already) [51] rem16s#54 ← rem16s#15 -Coalesced [70] rem16u#68 ← rem16u#1 -Coalesced [71] rem16s#55 ← rem16s#3 -Coalesced [83] divr16s::neg#10 ← divr16s::neg#3 -Coalesced [94] divr16s::return#6 ← divr16s::return#1 -Coalesced [95] rem16s#56 ← rem16s#2 -Coalesced [103] divr16s::neg#9 ← divr16s::neg#2 -Coalesced [106] divr16u::rem#11 ← divr16u::rem#3 -Coalesced [107] divr16u::dividend#8 ← divr16u::dividend#1 -Coalesced [114] divr16u::rem#14 ← divr16u::rem#1 -Coalesced [121] divr16u::rem#16 ← divr16u::rem#2 -Coalesced [122] divr16u::return#6 ← divr16u::quotient#2 -Coalesced [126] rem16u#1 ← divr16u::rem#10 -Coalesced [128] divr16u::rem#12 ← divr16u::rem#10 -Coalesced [129] divr16u::dividend#9 ← divr16u::dividend#0 -Coalesced [130] divr16u::quotient#9 ← divr16u::return#0 -Coalesced [131] divr16u::i#7 ← divr16u::i#1 -Coalesced [132] divr16u::rem#15 ← divr16u::rem#5 -Coalesced [133] divr16u::return#5 ← divr16u::quotient#1 -Coalesced [134] divr16u::rem#13 ← divr16u::rem#0 -Coalesced [137] screen_fill::screen#7 ← screen_fill::screen#3 -Coalesced [146] screen_fill::screen#6 ← screen_fill::screen#1 -Coalesced [147] screen_fill::y#5 ← screen_fill::y#1 -Coalesced (already) [148] screen_fill::screen#8 ← screen_fill::screen#1 -Coalesced [149] screen_fill::x#3 ← screen_fill::x#1 -Coalesced [153] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 -Coalesced [162] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 -Coalesced [163] bitmap_clear::y#5 ← bitmap_clear::y#1 -Coalesced (already) [164] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 -Coalesced [165] bitmap_clear::x#3 ← bitmap_clear::x#1 -Coalesced [185] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 -Coalesced [190] bitmap_init::y#5 ← bitmap_init::y#1 -Coalesced [191] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 -Coalesced (already) [192] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 -Coalesced [193] bitmap_init::bits#5 ← bitmap_init::bits#4 -Coalesced [194] bitmap_init::x#5 ← bitmap_init::x#1 -Coalesced [195] bitmap_init::bits#6 ← bitmap_init::bits#1 -Coalesced down to 23 phi equivalence classes +Coalesced [76] divr16s::neg#10 ← divr16s::neg#3 +Coalesced [86] divr16s::return#6 ← divr16s::return#1 +Coalesced [93] divr16s::neg#9 ← divr16s::neg#2 +Coalesced [96] divr16u::rem#10 ← divr16u::rem#3 +Coalesced [97] divr16u::dividend#8 ← divr16u::dividend#1 +Coalesced [104] divr16u::rem#13 ← divr16u::rem#1 +Coalesced [111] divr16u::rem#15 ← divr16u::rem#2 +Coalesced [112] divr16u::return#6 ← divr16u::quotient#2 +Coalesced [117] divr16u::rem#11 ← divr16u::rem#9 +Coalesced [118] divr16u::dividend#9 ← divr16u::dividend#0 +Coalesced [119] divr16u::quotient#9 ← divr16u::return#0 +Coalesced [120] divr16u::i#7 ← divr16u::i#1 +Coalesced [121] divr16u::rem#14 ← divr16u::rem#5 +Coalesced [122] divr16u::return#5 ← divr16u::quotient#1 +Coalesced [123] divr16u::rem#12 ← divr16u::rem#0 +Coalesced [126] screen_fill::screen#7 ← screen_fill::screen#3 +Coalesced [135] screen_fill::screen#6 ← screen_fill::screen#1 +Coalesced [136] screen_fill::y#5 ← screen_fill::y#1 +Coalesced (already) [137] screen_fill::screen#8 ← screen_fill::screen#1 +Coalesced [138] screen_fill::x#3 ← screen_fill::x#1 +Coalesced [142] bitmap_clear::bitmap#7 ← bitmap_clear::bitmap#3 +Coalesced [151] bitmap_clear::bitmap#6 ← bitmap_clear::bitmap#1 +Coalesced [152] bitmap_clear::y#5 ← bitmap_clear::y#1 +Coalesced (already) [153] bitmap_clear::bitmap#8 ← bitmap_clear::bitmap#1 +Coalesced [154] bitmap_clear::x#3 ← bitmap_clear::x#1 +Coalesced [174] bitmap_init::yoffs#7 ← bitmap_init::yoffs#1 +Coalesced [179] bitmap_init::y#5 ← bitmap_init::y#1 +Coalesced [180] bitmap_init::yoffs#5 ← bitmap_init::yoffs#4 +Coalesced (already) [181] bitmap_init::yoffs#6 ← bitmap_init::yoffs#2 +Coalesced [182] bitmap_init::bits#5 ← bitmap_init::bits#4 +Coalesced [183] bitmap_init::x#5 ← bitmap_init::x#1 +Coalesced [184] bitmap_init::bits#6 ← bitmap_init::bits#1 +Coalesced down to 22 phi equivalence classes Culled Empty Block (label) main::@22 -Culled Empty Block (label) point_init::@14 -Culled Empty Block (label) divr16u::@6 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 @@ -4110,9 +3681,6 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -4155,21 +3723,19 @@ main::@18: scope:[main] from main::@17 [17] call screen_fill [ ] ( main:2 [ ] ) to:main::@1 main::@1: scope:[main] from main::@18 main::@21 - [18] (signed word) rem16s#15 ← phi( main::@18/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@21/(signed word) rem16s#13 ) [ main::i#2 rem16u#21 rem16s#15 ] ( main:2 [ main::i#2 rem16u#21 rem16s#15 ] ) - [18] (word) rem16u#21 ← phi( main::@18/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@21/(word) rem16u#18 ) [ main::i#2 rem16u#21 rem16s#15 ] ( main:2 [ main::i#2 rem16u#21 rem16s#15 ] ) - [18] (byte) main::i#2 ← phi( main::@18/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@21/(byte) main::i#1 ) [ main::i#2 rem16u#21 rem16s#15 ] ( main:2 [ main::i#2 rem16u#21 rem16s#15 ] ) - [19] (byte) point_init::point_idx#0 ← (byte) main::i#2 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 ] ( main:2 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 ] ) - [20] call point_init [ main::i#2 rem16u#18 rem16s#13 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 ] ) + [18] (byte) main::i#2 ← phi( main::@18/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@21/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) + [19] (byte) point_init::point_idx#0 ← (byte) main::i#2 [ main::i#2 point_init::point_idx#0 ] ( main:2 [ main::i#2 point_init::point_idx#0 ] ) + [20] call point_init [ main::i#2 ] ( main:2 [ main::i#2 ] ) to:main::@20 main::@20: scope:[main] from main::@1 - [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ) - [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ) - [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ) - [24] call bitmap_plot [ main::i#2 rem16u#18 rem16s#13 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 ] ) + [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 main::$9 ] ( main:2 [ main::i#2 main::$9 ] ) + [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 main::$9 bitmap_plot::x#0 ] ) + [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ) + [24] call bitmap_plot [ main::i#2 ] ( main:2 [ main::i#2 ] ) to:main::@21 main::@21: scope:[main] from main::@20 - [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) - [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) + [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) + [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@5 main::@5: scope:[main] from main::@21 main::@5 main::@7 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) @@ -4178,258 +3744,253 @@ main::@7: scope:[main] from main::@5 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ ] ( main:2 [ ] ) to:main::@5 bitmap_plot: scope:[bitmap_plot] from main::@20 - [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 ] ) - [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) - [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) - [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) - [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) + [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 ] ) + [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) + [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) + [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) + [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) to:bitmap_plot::@return bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot - [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) + [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) to:@return point_init: scope:[point_init] from main::@1 - [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ) - [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) - [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) - [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) - [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) + [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) + [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) + [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) + [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::abs16s1 point_init::abs16s1: scope:[point_init] from point_init - [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@12 point_init::@12: scope:[point_init] from point_init::abs16s1 - [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) + [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) to:point_init::abs16s1_@return point_init::abs16s1_@return: scope:[point_init] from point_init::@12 point_init::abs16s1_@1 - [42] (word) point_init::abs16s1_return#2 ← phi( point_init::abs16s1_@1/(word~) point_init::abs16s1_return#5 point_init::@12/(word~) point_init::abs16s1_return#6 ) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) + [42] (word) point_init::abs16s1_return#2 ← phi( point_init::abs16s1_@1/(word~) point_init::abs16s1_return#5 point_init::@12/(word~) point_init::abs16s1_return#6 ) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) to:point_init::abs16s2 point_init::abs16s2: scope:[point_init] from point_init::abs16s1_@return - [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) + [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) to:point_init::@13 point_init::@13: scope:[point_init] from point_init::abs16s2 - [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) + [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) to:point_init::abs16s2_@return point_init::abs16s2_@return: scope:[point_init] from point_init::@13 point_init::abs16s2_@1 - [45] (word) point_init::abs16s2_return#2 ← phi( point_init::abs16s2_@1/(word~) point_init::abs16s2_return#5 point_init::@13/(word~) point_init::abs16s2_return#6 ) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#2 ] ) + [45] (word) point_init::abs16s2_return#2 ← phi( point_init::abs16s2_@1/(word~) point_init::abs16s2_return#5 point_init::@13/(word~) point_init::abs16s2_return#6 ) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#2 ] ) to:point_init::@10 point_init::@10: scope:[point_init] from point_init::abs16s2_@return - [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@2 point_init::@2: scope:[point_init] from point_init::@10 point_init::@11 - [47] (signed word) rem16s#13 ← phi( point_init::@10/(signed word) rem16s#15 point_init::@11/(signed word) rem16s#3 ) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) - [47] (word) rem16u#18 ← phi( point_init::@10/(word) rem16u#21 point_init::@11/(word) divr16u::rem#10 ) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) - [48] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) - [49] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) - [50] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) - [51] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) - [52] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ rem16u#18 rem16s#13 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx1#0 ] ) - [53] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) + [47] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) + [48] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) + [49] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) + [50] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) + [51] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx1#0 ] ) + [52] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ ] ( main:2::point_init:20 [ main::i#2 ] ) to:point_init::@return point_init::@return: scope:[point_init] from point_init::@2 - [54] return [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) + [53] return [ ] ( main:2::point_init:20 [ main::i#2 ] ) to:@return point_init::@1: scope:[point_init] from point_init point_init::@10 - [55] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [54] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@7 point_init::@7: scope:[point_init] from point_init::@1 - [56] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [55] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@4 point_init::@4: scope:[point_init] from point_init::@3 point_init::@7 - [57] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) - [58] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) - [59] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) - [60] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ) + [56] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) + [57] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) + [58] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) + [59] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ) to:point_init::@11 point_init::@11: scope:[point_init] from point_init::@4 - [61] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ) - [62] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ) - [63] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ) - [64] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ) + [60] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ) + [61] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ) + [62] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ) + [63] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) to:point_init::@2 point_init::@3: scope:[point_init] from point_init::@1 - [65] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) + [64] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) to:point_init::@4 point_init::abs16s2_@1: scope:[point_init] from point_init::abs16s2 - [66] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) - [67] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) + [65] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) + [66] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) to:point_init::abs16s2_@return point_init::abs16s1_@1: scope:[point_init] from point_init::abs16s1 - [68] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) - [69] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) + [67] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) + [68] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) to:point_init::abs16s1_@return divr16s: scope:[divr16s] from point_init::@4 - [70] phi() [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) + [69] phi() [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) to:divr16s::@16 divr16s::@16: scope:[divr16s] from divr16s - [71] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) + [70] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) to:divr16s::@17 divr16s::@17: scope:[divr16s] from divr16s::@16 - [72] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) + [71] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) to:divr16s::@2 divr16s::@2: scope:[divr16s] from divr16s::@1 divr16s::@17 - [73] (word) divr16s::remu#3 ← phi( divr16s::@1/(word~) divr16s::remu#7 divr16s::@17/(word~) divr16s::remu#8 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) - [73] (word) divr16s::dividendu#3 ← phi( divr16s::@1/((word))-(const signed word) divr16s::dividend#0 divr16s::@17/((word))(const signed word) divr16s::dividend#0 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) - [73] (byte) divr16s::neg#3 ← phi( divr16s::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 divr16s::@17/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) - [74] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) + [72] (word) divr16s::remu#3 ← phi( divr16s::@1/(word~) divr16s::remu#7 divr16s::@17/(word~) divr16s::remu#8 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) + [72] (word) divr16s::dividendu#3 ← phi( divr16s::@1/((word))-(const signed word) divr16s::dividend#0 divr16s::@17/((word))(const signed word) divr16s::dividend#0 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) + [72] (byte) divr16s::neg#3 ← phi( divr16s::@1/(byte/signed byte/word/signed word/dword/signed dword) 1 divr16s::@17/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) + [73] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) to:divr16s::@18 divr16s::@18: scope:[divr16s] from divr16s::@2 - [75] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) + [74] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) to:divr16s::@4 divr16s::@4: scope:[divr16s] from divr16s::@18 divr16s::@3 - [76] (byte) divr16s::neg#4 ← phi( divr16s::@3/(byte) divr16s::neg#2 divr16s::@18/(byte) divr16s::neg#3 ) [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ) - [76] (word) divr16s::divisoru#3 ← phi( divr16s::@3/(word~) divr16s::divisoru#4 divr16s::@18/(word~) divr16s::divisoru#5 ) [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ) - [77] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) - [78] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) - [79] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) - [80] call divr16u [ divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ) - [81] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ) + [75] (byte) divr16s::neg#4 ← phi( divr16s::@3/(byte) divr16s::neg#2 divr16s::@18/(byte) divr16s::neg#3 ) [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ) + [75] (word) divr16s::divisoru#3 ← phi( divr16s::@3/(word~) divr16s::divisoru#4 divr16s::@18/(word~) divr16s::divisoru#5 ) [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 ] ) + [76] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) + [77] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) + [78] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) + [79] call divr16u [ divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) + [80] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#2 ] ) to:divr16s::@15 divr16s::@15: scope:[divr16s] from divr16s::@4 - [82] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ) - [83] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16u::rem#10 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 ] ) + [81] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16s::resultu#0 ] ) + [82] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::resultu#0 ] ) to:divr16s::@11 divr16s::@11: scope:[divr16s] from divr16s::@15 - [84] (signed word) rem16s#2 ← - (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ) - [85] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 rem16s#2 divr16s::return#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#2 divr16s::return#1 ] ) + [83] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16s::return#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#1 ] ) to:divr16s::@return divr16s::@return: scope:[divr16s] from divr16s::@11 divr16s::@19 - [86] (signed word) rem16s#3 ← phi( divr16s::@11/(signed word) rem16s#2 divr16s::@19/(signed word~) rem16s#57 ) [ divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) - [86] (signed word) divr16s::return#2 ← phi( divr16s::@11/(signed word) divr16s::return#1 divr16s::@19/(signed word~) divr16s::return#7 ) [ divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) - [87] return [ divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) + [84] (signed word) divr16s::return#2 ← phi( divr16s::@11/(signed word) divr16s::return#1 divr16s::@19/(signed word~) divr16s::return#7 ) [ divr16s::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) + [85] return [ divr16s::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) to:@return divr16s::@19: scope:[divr16s] from divr16s::@15 - [88] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 divr16s::return#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 ] ) - [89] (signed word~) rem16s#57 ← (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::return#7 rem16s#57 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 rem16s#57 ] ) + [86] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16s::return#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#7 ] ) to:divr16s::@return divr16s::@3: scope:[divr16s] from divr16s::@2 - [90] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) - [91] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) - [92] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) + [87] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) + [88] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) + [89] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) to:divr16s::@4 divr16s::@1: scope:[divr16s] from divr16s::@16 - [93] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) - [94] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) + [90] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) + [91] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) to:divr16s::@2 divr16u: scope:[divr16u] from divr16s::@4 - [95] phi() [ divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) + [92] phi() [ divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 - [96] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [96] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [96] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [96] (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#3 divr16u::@3/(word) divr16u::rem#10 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [97] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) - [98] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) - [99] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) - [100] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) + [93] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [93] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [93] (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#1 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [93] (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#3 divr16u::@3/(word) divr16u::rem#9 ) [ divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [94] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) + [95] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) + [96] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) + [97] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) to:divr16u::@4 divr16u::@4: scope:[divr16u] from divr16u::@1 - [101] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) + [98] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) to:divr16u::@2 divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4 - [102] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ) - [103] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) - [104] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) - [105] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) + [99] (word) divr16u::rem#5 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 ) [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#5 ] ) + [100] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) + [101] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) + [102] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) to:divr16u::@5 divr16u::@5: scope:[divr16u] from divr16u::@2 - [106] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) - [107] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) + [103] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) + [104] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [108] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ) - [108] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::dividend#0 ] ) - [109] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) - [110] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) + [105] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [105] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [106] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) + [107] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 - [111] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::return#0 ] ) + [108] return [ divr16u::return#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) to:@return screen_fill: scope:[screen_fill] from main::@18 - [112] phi() [ ] ( main:2::screen_fill:17 [ ] ) + [109] phi() [ ] ( main:2::screen_fill:17 [ ] ) to:screen_fill::@1 screen_fill::@1: scope:[screen_fill] from screen_fill screen_fill::@3 - [113] (byte) screen_fill::y#4 ← phi( screen_fill/(byte/signed byte/word/signed word/dword/signed dword) 0 screen_fill::@3/(byte) screen_fill::y#1 ) [ screen_fill::screen#3 screen_fill::y#4 ] ( main:2::screen_fill:17 [ screen_fill::screen#3 screen_fill::y#4 ] ) - [113] (byte*) screen_fill::screen#3 ← phi( screen_fill/(const byte*) SCREEN#0 screen_fill::@3/(byte*) screen_fill::screen#1 ) [ screen_fill::screen#3 screen_fill::y#4 ] ( main:2::screen_fill:17 [ screen_fill::screen#3 screen_fill::y#4 ] ) + [110] (byte) screen_fill::y#4 ← phi( screen_fill/(byte/signed byte/word/signed word/dword/signed dword) 0 screen_fill::@3/(byte) screen_fill::y#1 ) [ screen_fill::screen#3 screen_fill::y#4 ] ( main:2::screen_fill:17 [ screen_fill::screen#3 screen_fill::y#4 ] ) + [110] (byte*) screen_fill::screen#3 ← phi( screen_fill/(const byte*) SCREEN#0 screen_fill::@3/(byte*) screen_fill::screen#1 ) [ screen_fill::screen#3 screen_fill::y#4 ] ( main:2::screen_fill:17 [ screen_fill::screen#3 screen_fill::y#4 ] ) to:screen_fill::@2 screen_fill::@2: scope:[screen_fill] from screen_fill::@1 screen_fill::@2 - [114] (byte) screen_fill::x#2 ← phi( screen_fill::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 screen_fill::@2/(byte) screen_fill::x#1 ) [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) - [114] (byte*) screen_fill::screen#2 ← phi( screen_fill::@1/(byte*) screen_fill::screen#3 screen_fill::@2/(byte*) screen_fill::screen#1 ) [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) - [115] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) - [116] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) - [117] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) - [118] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) + [111] (byte) screen_fill::x#2 ← phi( screen_fill::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 screen_fill::@2/(byte) screen_fill::x#1 ) [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) + [111] (byte*) screen_fill::screen#2 ← phi( screen_fill::@1/(byte*) screen_fill::screen#3 screen_fill::@2/(byte*) screen_fill::screen#1 ) [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) + [112] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) + [113] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) + [114] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) + [115] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) to:screen_fill::@3 screen_fill::@3: scope:[screen_fill] from screen_fill::@2 - [119] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) - [120] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) + [116] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) + [117] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) to:screen_fill::@return screen_fill::@return: scope:[screen_fill] from screen_fill::@3 - [121] return [ ] ( main:2::screen_fill:17 [ ] ) + [118] return [ ] ( main:2::screen_fill:17 [ ] ) to:@return bitmap_clear: scope:[bitmap_clear] from main::@17 - [122] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) - [123] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) + [119] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) + [120] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3 - [124] (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ) - [124] (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*~) bitmap_clear::bitmap#5 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ) + [121] (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ) + [121] (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*~) bitmap_clear::bitmap#5 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#3 bitmap_clear::y#4 ] ) to:bitmap_clear::@2 bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2 - [125] (byte) bitmap_clear::x#2 ← phi( bitmap_clear::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@2/(byte) bitmap_clear::x#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) - [125] (byte*) bitmap_clear::bitmap#2 ← phi( bitmap_clear::@1/(byte*) bitmap_clear::bitmap#3 bitmap_clear::@2/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) - [126] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) - [127] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) - [128] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) - [129] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) + [122] (byte) bitmap_clear::x#2 ← phi( bitmap_clear::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@2/(byte) bitmap_clear::x#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) + [122] (byte*) bitmap_clear::bitmap#2 ← phi( bitmap_clear::@1/(byte*) bitmap_clear::bitmap#3 bitmap_clear::@2/(byte*) bitmap_clear::bitmap#1 ) [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) + [123] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) + [124] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) + [125] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) + [126] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) to:bitmap_clear::@3 bitmap_clear::@3: scope:[bitmap_clear] from bitmap_clear::@2 - [130] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) - [131] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) + [127] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) + [128] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) to:bitmap_clear::@return bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@3 - [132] return [ ] ( main:2::bitmap_clear:15 [ ] ) + [129] return [ ] ( main:2::bitmap_clear:15 [ ] ) to:@return bitmap_init: scope:[bitmap_init] from main::@16 - [133] phi() [ ] ( main:2::bitmap_init:13 [ ] ) + [130] phi() [ ] ( main:2::bitmap_init:13 [ ] ) to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 - [134] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) - [134] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte/word/signed word/dword/signed dword) 128 bitmap_init::@2/(byte) bitmap_init::bits#4 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) - [135] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) - [136] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) - [137] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) + [131] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_init::@2/(byte) bitmap_init::x#1 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) + [131] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte/word/signed word/dword/signed dword) 128 bitmap_init::@2/(byte) bitmap_init::bits#4 ) [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) + [132] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) + [133] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) + [134] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) to:bitmap_init::@2 bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@10 - [138] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@10/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte/word/signed word/dword/signed dword) 128 ) [ bitmap_init::x#2 bitmap_init::bits#4 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#4 ] ) - [139] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) - [140] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) + [135] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@10/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte/word/signed word/dword/signed dword) 128 ) [ bitmap_init::x#2 bitmap_init::bits#4 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#4 ] ) + [136] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) + [137] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) to:bitmap_init::@3 bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4 - [141] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#4 bitmap_init::@2/(const byte*) BITMAP#0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) - [141] (byte) bitmap_init::y#2 ← phi( bitmap_init::@4/(byte) bitmap_init::y#1 bitmap_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) - [142] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) - [143] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) - [144] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) - [145] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) - [146] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) - [147] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) - [148] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) - [149] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [138] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#4 bitmap_init::@2/(const byte*) BITMAP#0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [138] (byte) bitmap_init::y#2 ← phi( bitmap_init::@4/(byte) bitmap_init::y#1 bitmap_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [139] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) + [140] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) + [141] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) + [142] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [143] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) + [144] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) + [145] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) + [146] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) to:bitmap_init::@7 bitmap_init::@7: scope:[bitmap_init] from bitmap_init::@3 - [150] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) + [147] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) to:bitmap_init::@4 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@7 - [151] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@7/(byte*) bitmap_init::yoffs#1 ) [ bitmap_init::y#2 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#4 ] ) - [152] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) - [153] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) + [148] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@7/(byte*) bitmap_init::yoffs#1 ) [ bitmap_init::y#2 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#4 ] ) + [149] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) + [150] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) to:bitmap_init::@return bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4 - [154] return [ ] ( main:2::bitmap_init:13 [ ] ) + [151] return [ ] ( main:2::bitmap_init:13 [ ] ) to:@return bitmap_init::@10: scope:[bitmap_init] from bitmap_init::@1 - [155] phi() [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) + [152] phi() [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) to:bitmap_init::@2 DOMINATORS @@ -4658,12 +4219,12 @@ VARIABLE REGISTER WEIGHTS (word~) divr16s::remu#7 4.0 (word~) divr16s::remu#8 4.0 (word) divr16s::resultu -(word) divr16s::resultu#0 0.6666666666666666 +(word) divr16s::resultu#0 1.0 (signed word) divr16s::return (signed word) divr16s::return#1 4.0 (signed word) divr16s::return#2 2.0 (signed word) divr16s::return#3 4.0 -(signed word~) divr16s::return#7 2.0 +(signed word~) divr16s::return#7 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 202.0 (byte~) divr16u::$2 202.0 @@ -4683,11 +4244,11 @@ VARIABLE REGISTER WEIGHTS (word) divr16u::rem (word) divr16u::rem#0 75.75 (word) divr16u::rem#1 202.0 -(word) divr16u::rem#10 15.25 (word) divr16u::rem#2 202.0 (word) divr16u::rem#3 2.0 (word) divr16u::rem#4 204.0 (word) divr16u::rem#5 101.0 +(word) divr16u::rem#9 101.0 (word) divr16u::return (word) divr16u::return#0 61.0 (word) divr16u::return#2 4.0 @@ -4745,24 +4306,15 @@ VARIABLE REGISTER WEIGHTS (word~) point_init::abs16s2_return#6 4.0 (signed word) point_init::abs16s2_w (byte) point_init::point_idx -(byte) point_init::point_idx#0 0.6969696969696968 +(byte) point_init::point_idx#0 0.71875 (byte) point_init::point_idx1 -(byte) point_init::point_idx1#0 0.36363636363636365 +(byte) point_init::point_idx1#0 0.375 (signed word) point_init::x_diff (signed word) point_init::x_diff#1 0.5555555555555556 (signed word) point_init::x_stepf (signed word) point_init::x_stepf#0 4.0 (signed word) point_init::y_diff (signed word) point_init::y_diff#0 0.5 -(signed word) rem16s -(signed word) rem16s#13 0.9999999999999999 -(signed word) rem16s#15 0.7222222222222223 -(signed word) rem16s#2 2.0 -(signed word) rem16s#3 0.75 -(signed word~) rem16s#57 4.0 -(word) rem16u -(word) rem16u#18 0.9999999999999999 -(word) rem16u#21 0.7222222222222223 (void()) screen_fill((byte*) screen_fill::screen , (byte) screen_fill::ch) (byte) screen_fill::ch (byte*) screen_fill::screen @@ -4786,7 +4338,6 @@ VARIABLE REGISTER WEIGHTS Initial phi equivalence classes [ main::i#2 main::i#1 ] -[ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 ] [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] [ divr16s::dividendu#3 ] @@ -4794,7 +4345,7 @@ Initial phi equivalence classes [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] -[ divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] @@ -4847,7 +4398,6 @@ Added variable bitmap_init::$6 to zero page equivalence class [ bitmap_init::$6 Added variable bitmap_init::$7 to zero page equivalence class [ bitmap_init::$7 ] Complete equivalence classes [ main::i#2 main::i#1 ] -[ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 ] [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] [ divr16s::dividendu#3 ] @@ -4855,7 +4405,7 @@ Complete equivalence classes [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] -[ divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] @@ -4907,65 +4457,64 @@ Complete equivalence classes [ bitmap_init::$6 ] [ bitmap_init::$7 ] Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 ] -Allocated zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] -Allocated zp ZP_WORD:7 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] -Allocated zp ZP_WORD:9 [ divr16s::dividendu#3 ] -Allocated zp ZP_WORD:11 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] -Allocated zp ZP_WORD:13 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] -Allocated zp ZP_BYTE:15 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] -Allocated zp ZP_WORD:16 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] -Allocated zp ZP_WORD:18 [ divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] -Allocated zp ZP_WORD:20 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] -Allocated zp ZP_WORD:22 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] -Allocated zp ZP_BYTE:24 [ divr16u::i#2 divr16u::i#1 ] -Allocated zp ZP_BYTE:25 [ screen_fill::y#4 screen_fill::y#1 ] -Allocated zp ZP_WORD:26 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] -Allocated zp ZP_BYTE:28 [ screen_fill::x#2 screen_fill::x#1 ] -Allocated zp ZP_BYTE:29 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Allocated zp ZP_WORD:30 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] -Allocated zp ZP_BYTE:32 [ bitmap_clear::x#2 bitmap_clear::x#1 ] -Allocated zp ZP_BYTE:33 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] -Allocated zp ZP_BYTE:34 [ bitmap_init::x#2 bitmap_init::x#1 ] -Allocated zp ZP_BYTE:35 [ bitmap_init::y#2 bitmap_init::y#1 ] -Allocated zp ZP_WORD:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] -Allocated zp ZP_BYTE:38 [ point_init::point_idx#0 ] -Allocated zp ZP_BYTE:39 [ main::$9 ] -Allocated zp ZP_WORD:40 [ bitmap_plot::x#0 ] -Allocated zp ZP_BYTE:42 [ bitmap_plot::y#0 ] -Allocated zp ZP_WORD:43 [ bitmap_plot::$3 ] -Allocated zp ZP_WORD:45 [ bitmap_plot::$1 ] -Allocated zp ZP_WORD:47 [ bitmap_plot::plotter#1 ] -Allocated zp ZP_BYTE:49 [ bitmap_plot::$2 ] -Allocated zp ZP_BYTE:50 [ point_init::point_idx1#0 ] -Allocated zp ZP_WORD:51 [ point_init::x_diff#1 ] -Allocated zp ZP_WORD:53 [ point_init::$4 ] -Allocated zp ZP_WORD:55 [ point_init::$5 ] -Allocated zp ZP_WORD:57 [ point_init::y_diff#0 ] -Allocated zp ZP_WORD:59 [ point_init::$16 ] -Allocated zp ZP_WORD:61 [ point_init::$17 ] -Allocated zp ZP_WORD:63 [ point_init::$18 ] -Allocated zp ZP_WORD:65 [ divr16s::divisor#0 ] -Allocated zp ZP_WORD:67 [ divr16s::rem#0 ] -Allocated zp ZP_WORD:69 [ divr16s::return#3 ] -Allocated zp ZP_WORD:71 [ point_init::x_stepf#0 ] -Allocated zp ZP_BYTE:73 [ point_init::$13 ] -Allocated zp ZP_BYTE:74 [ point_init::$14 ] -Allocated zp ZP_WORD:75 [ point_init::abs16s2_$2#0 ] -Allocated zp ZP_WORD:77 [ point_init::abs16s1_$2#0 ] -Allocated zp ZP_WORD:79 [ divr16u::divisor#0 ] -Allocated zp ZP_WORD:81 [ divr16u::return#2 ] -Allocated zp ZP_WORD:83 [ divr16s::resultu#0 ] -Allocated zp ZP_WORD:85 [ divr16s::$11 ] -Allocated zp ZP_WORD:87 [ divr16s::$7 ] -Allocated zp ZP_BYTE:89 [ divr16u::$1 ] -Allocated zp ZP_BYTE:90 [ divr16u::$2 ] -Allocated zp ZP_WORD:91 [ bitmap_clear::$3 ] -Allocated zp ZP_BYTE:93 [ bitmap_init::$3 ] -Allocated zp ZP_BYTE:94 [ bitmap_init::$4 ] -Allocated zp ZP_BYTE:95 [ bitmap_init::$5 ] -Allocated zp ZP_BYTE:96 [ bitmap_init::$6 ] -Allocated zp ZP_BYTE:97 [ bitmap_init::$7 ] +Allocated zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] +Allocated zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] +Allocated zp ZP_WORD:7 [ divr16s::dividendu#3 ] +Allocated zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] +Allocated zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] +Allocated zp ZP_BYTE:13 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] +Allocated zp ZP_WORD:14 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] +Allocated zp ZP_WORD:16 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp ZP_WORD:18 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] +Allocated zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] +Allocated zp ZP_BYTE:22 [ divr16u::i#2 divr16u::i#1 ] +Allocated zp ZP_BYTE:23 [ screen_fill::y#4 screen_fill::y#1 ] +Allocated zp ZP_WORD:24 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] +Allocated zp ZP_BYTE:26 [ screen_fill::x#2 screen_fill::x#1 ] +Allocated zp ZP_BYTE:27 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Allocated zp ZP_WORD:28 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] +Allocated zp ZP_BYTE:30 [ bitmap_clear::x#2 bitmap_clear::x#1 ] +Allocated zp ZP_BYTE:31 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] +Allocated zp ZP_BYTE:32 [ bitmap_init::x#2 bitmap_init::x#1 ] +Allocated zp ZP_BYTE:33 [ bitmap_init::y#2 bitmap_init::y#1 ] +Allocated zp ZP_WORD:34 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] +Allocated zp ZP_BYTE:36 [ point_init::point_idx#0 ] +Allocated zp ZP_BYTE:37 [ main::$9 ] +Allocated zp ZP_WORD:38 [ bitmap_plot::x#0 ] +Allocated zp ZP_BYTE:40 [ bitmap_plot::y#0 ] +Allocated zp ZP_WORD:41 [ bitmap_plot::$3 ] +Allocated zp ZP_WORD:43 [ bitmap_plot::$1 ] +Allocated zp ZP_WORD:45 [ bitmap_plot::plotter#1 ] +Allocated zp ZP_BYTE:47 [ bitmap_plot::$2 ] +Allocated zp ZP_BYTE:48 [ point_init::point_idx1#0 ] +Allocated zp ZP_WORD:49 [ point_init::x_diff#1 ] +Allocated zp ZP_WORD:51 [ point_init::$4 ] +Allocated zp ZP_WORD:53 [ point_init::$5 ] +Allocated zp ZP_WORD:55 [ point_init::y_diff#0 ] +Allocated zp ZP_WORD:57 [ point_init::$16 ] +Allocated zp ZP_WORD:59 [ point_init::$17 ] +Allocated zp ZP_WORD:61 [ point_init::$18 ] +Allocated zp ZP_WORD:63 [ divr16s::divisor#0 ] +Allocated zp ZP_WORD:65 [ divr16s::rem#0 ] +Allocated zp ZP_WORD:67 [ divr16s::return#3 ] +Allocated zp ZP_WORD:69 [ point_init::x_stepf#0 ] +Allocated zp ZP_BYTE:71 [ point_init::$13 ] +Allocated zp ZP_BYTE:72 [ point_init::$14 ] +Allocated zp ZP_WORD:73 [ point_init::abs16s2_$2#0 ] +Allocated zp ZP_WORD:75 [ point_init::abs16s1_$2#0 ] +Allocated zp ZP_WORD:77 [ divr16u::divisor#0 ] +Allocated zp ZP_WORD:79 [ divr16u::return#2 ] +Allocated zp ZP_WORD:81 [ divr16s::resultu#0 ] +Allocated zp ZP_WORD:83 [ divr16s::$11 ] +Allocated zp ZP_WORD:85 [ divr16s::$7 ] +Allocated zp ZP_BYTE:87 [ divr16u::$1 ] +Allocated zp ZP_BYTE:88 [ divr16u::$2 ] +Allocated zp ZP_WORD:89 [ bitmap_clear::$3 ] +Allocated zp ZP_BYTE:91 [ bitmap_init::$3 ] +Allocated zp ZP_BYTE:92 [ bitmap_init::$4 ] +Allocated zp ZP_BYTE:93 [ bitmap_init::$5 ] +Allocated zp ZP_BYTE:94 [ bitmap_init::$6 ] +Allocated zp ZP_BYTE:95 [ bitmap_init::$7 ] INITIAL ASM //SEG0 Basic Upstart @@ -4989,8 +4538,6 @@ INITIAL ASM .label BITMAP = $a000 .label SCREEN = $8800 .const DELAY = 8 - .label rem16s = 3 - .label rem16u = $12 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @18 [phi:@begin->@18] @@ -5009,7 +4556,7 @@ bend: main: { .const vicSelectGfxBank1_toDd001_return = 3^(>SCREEN)>>6 .const toD0181_return = (>(SCREEN&$3fff)<<2)|(>BITMAP)>>2&$f - .label _9 = $27 + .label _9 = $25 .label i = 2 //SEG9 asm { sei } sei @@ -5051,7 +4598,7 @@ main: { lda #toD0181_return sta D018 //SEG23 [13] call bitmap_init [ ] ( main:2 [ ] ) - //SEG24 [133] phi from main::@16 to bitmap_init [phi:main::@16->bitmap_init] + //SEG24 [130] phi from main::@16 to bitmap_init [phi:main::@16->bitmap_init] bitmap_init_from_b16: jsr bitmap_init //SEG25 [14] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -5067,105 +4614,93 @@ main: { //SEG29 main::@18 b18: //SEG30 [17] call screen_fill [ ] ( main:2 [ ] ) - //SEG31 [112] phi from main::@18 to screen_fill [phi:main::@18->screen_fill] + //SEG31 [109] phi from main::@18 to screen_fill [phi:main::@18->screen_fill] screen_fill_from_b18: jsr screen_fill //SEG32 [18] phi from main::@18 to main::@1 [phi:main::@18->main::@1] b1_from_b18: - //SEG33 [18] phi (signed word) rem16s#15 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#0] -- vwsz1=vbuc1 - lda #<0 - sta rem16s - lda #>0 - sta rem16s+1 - //SEG34 [18] phi (word) rem16u#21 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#1] -- vwuz1=vbuc1 - lda #<0 - sta rem16u - lda #>0 - sta rem16u+1 - //SEG35 [18] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#2] -- vbuz1=vbuc1 + //SEG33 [18] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#0] -- vbuz1=vbuc1 lda #0 sta i jmp b1 - //SEG36 [18] phi from main::@21 to main::@1 [phi:main::@21->main::@1] + //SEG34 [18] phi from main::@21 to main::@1 [phi:main::@21->main::@1] b1_from_b21: - //SEG37 [18] phi (signed word) rem16s#15 = (signed word) rem16s#13 [phi:main::@21->main::@1#0] -- register_copy - //SEG38 [18] phi (word) rem16u#21 = (word) rem16u#18 [phi:main::@21->main::@1#1] -- register_copy - //SEG39 [18] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@21->main::@1#2] -- register_copy + //SEG35 [18] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@21->main::@1#0] -- register_copy jmp b1 - //SEG40 main::@1 + //SEG36 main::@1 b1: - //SEG41 [19] (byte) point_init::point_idx#0 ← (byte) main::i#2 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 ] ( main:2 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 ] ) -- vbuz1=vbuz2 + //SEG37 [19] (byte) point_init::point_idx#0 ← (byte) main::i#2 [ main::i#2 point_init::point_idx#0 ] ( main:2 [ main::i#2 point_init::point_idx#0 ] ) -- vbuz1=vbuz2 lda i sta point_init.point_idx - //SEG42 [20] call point_init [ main::i#2 rem16u#18 rem16s#13 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG38 [20] call point_init [ main::i#2 ] ( main:2 [ main::i#2 ] ) jsr point_init jmp b20 - //SEG43 main::@20 + //SEG39 main::@20 b20: - //SEG44 [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ) -- vbuz1=vbuz2_ror_1 + //SEG40 [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 main::$9 ] ( main:2 [ main::i#2 main::$9 ] ) -- vbuz1=vbuz2_ror_1 lda i lsr sta _9 - //SEG45 [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ) -- vwuz1=pwuc1_derefidx_vbuz2 + //SEG41 [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 main::$9 bitmap_plot::x#0 ] ) -- vwuz1=pwuc1_derefidx_vbuz2 ldy i lda x_start,y sta bitmap_plot.x lda x_start+1,y sta bitmap_plot.x+1 - //SEG46 [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 + //SEG42 [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 ldy _9 lda y_start,y sta bitmap_plot.y - //SEG47 [24] call bitmap_plot [ main::i#2 rem16u#18 rem16s#13 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG43 [24] call bitmap_plot [ main::i#2 ] ( main:2 [ main::i#2 ] ) jsr bitmap_plot jmp b21 - //SEG48 main::@21 + //SEG44 main::@21 b21: - //SEG49 [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) -- vbuz1=vbuz1_plus_2 + //SEG45 [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=vbuz1_plus_2 lda i clc adc #2 sta i - //SEG50 [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG46 [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda i cmp #8 bne b1_from_b21 jmp b5 - //SEG51 main::@5 + //SEG47 main::@5 b5: - //SEG52 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 + //SEG48 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 lda RASTER cmp #$ff bne b5 jmp b7 - //SEG53 main::@7 + //SEG49 main::@7 b7: - //SEG54 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + //SEG50 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL jmp b5 } -//SEG55 bitmap_plot +//SEG51 bitmap_plot bitmap_plot: { - .label _1 = $2d - .label _2 = $31 - .label x = $28 - .label y = $2a - .label plotter = $2f - .label _3 = $2b - //SEG56 [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 ] ) -- vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2 + .label _1 = $2b + .label _2 = $2f + .label x = $26 + .label y = $28 + .label plotter = $2d + .label _3 = $29 + //SEG52 [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 ] ) -- vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2 ldy y lda bitmap_plot_yhi,y sta _3+1 lda bitmap_plot_ylo,y sta _3 - //SEG57 [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) -- vwuz1=vwuz2_band_vwuc1 + //SEG53 [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) -- vwuz1=vwuz2_band_vwuc1 lda x and #<$fff8 sta _1 lda x+1 and #>$fff8 sta _1+1 - //SEG58 [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) -- pbuz1=pbuz2_plus_vwuz3 + //SEG54 [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) -- pbuz1=pbuz2_plus_vwuz3 lda plotter clc adc _3 @@ -5173,10 +4708,10 @@ bitmap_plot: { lda plotter+1 adc _3+1 sta _1+1 - //SEG59 [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) -- vbuz1=_lo_vwuz2 + //SEG55 [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) -- vbuz1=_lo_vwuz2 lda x sta _2 - //SEG60 [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) -- _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 + //SEG56 [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) -- _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuz2 ldy #0 lda (plotter),y ldy _2 @@ -5184,34 +4719,34 @@ bitmap_plot: { ldy #0 sta (plotter),y jmp breturn - //SEG61 bitmap_plot::@return + //SEG57 bitmap_plot::@return breturn: - //SEG62 [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG58 [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) rts } -//SEG63 point_init +//SEG59 point_init point_init: { - .label _4 = $35 - .label _5 = $37 - .label _13 = $49 - .label _14 = $4a - .label _16 = $3b - .label _17 = $3d - .label _18 = $3f - .label point_idx = $26 - .label point_idx1 = $32 - .label y_diff = $39 - .label abs16s1__2 = $4d - .label abs16s1_return = 5 - .label abs16s2__2 = $4b - .label abs16s2_return = 7 - .label x_stepf = $47 - .label x_diff = $33 - //SEG64 [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- vbuz1=vbuz2_ror_1 + .label _4 = $33 + .label _5 = $35 + .label _13 = $47 + .label _14 = $48 + .label _16 = $39 + .label _17 = $3b + .label _18 = $3d + .label point_idx = $24 + .label point_idx1 = $30 + .label y_diff = $37 + .label abs16s1__2 = $4b + .label abs16s1_return = 3 + .label abs16s2__2 = $49 + .label abs16s2_return = 5 + .label x_stepf = $45 + .label x_diff = $31 + //SEG60 [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- vbuz1=vbuz2_ror_1 lda point_idx lsr sta point_idx1 - //SEG65 [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) -- vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 + //SEG61 [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) -- vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 ldy point_idx sec lda x_end,y @@ -5220,19 +4755,19 @@ point_init: { lda x_end+1,y sbc x_start+1,y sta x_diff+1 - //SEG66 [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 + //SEG62 [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 ldy point_idx1 lda y_end,y sta _4 lda #0 sta _4+1 - //SEG67 [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 + //SEG63 [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 ldy point_idx1 lda y_start,y sta _5 lda #0 sta _5+1 - //SEG68 [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1=vwsz2_minus_vwsz3 + //SEG64 [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1=vwsz2_minus_vwsz3 lda _4 sec sbc _5 @@ -5241,51 +4776,51 @@ point_init: { sbc _5+1 sta y_diff+1 jmp abs16s1 - //SEG69 point_init::abs16s1 + //SEG65 point_init::abs16s1 abs16s1: - //SEG70 [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 + //SEG66 [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 lda x_diff+1 bmi abs16s1_b1 jmp b12 - //SEG71 point_init::@12 + //SEG67 point_init::@12 b12: - //SEG72 [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) -- vwuz1=vwuz2 + //SEG68 [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) -- vwuz1=vwuz2 lda x_diff sta abs16s1_return lda x_diff+1 sta abs16s1_return+1 - //SEG73 [42] phi from point_init::@12 point_init::abs16s1_@1 to point_init::abs16s1_@return [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return] + //SEG69 [42] phi from point_init::@12 point_init::abs16s1_@1 to point_init::abs16s1_@return [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return] abs16s1_breturn_from_b12: abs16s1_breturn_from_abs16s1_b1: - //SEG74 [42] phi (word) point_init::abs16s1_return#2 = (word~) point_init::abs16s1_return#6 [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return#0] -- register_copy + //SEG70 [42] phi (word) point_init::abs16s1_return#2 = (word~) point_init::abs16s1_return#6 [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return#0] -- register_copy jmp abs16s1_breturn - //SEG75 point_init::abs16s1_@return + //SEG71 point_init::abs16s1_@return abs16s1_breturn: jmp abs16s2 - //SEG76 point_init::abs16s2 + //SEG72 point_init::abs16s2 abs16s2: - //SEG77 [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) -- vwsz1_lt_0_then_la1 + //SEG73 [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) -- vwsz1_lt_0_then_la1 lda y_diff+1 bmi abs16s2_b1 jmp b13 - //SEG78 point_init::@13 + //SEG74 point_init::@13 b13: - //SEG79 [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) -- vwuz1=vwuz2 + //SEG75 [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) -- vwuz1=vwuz2 lda y_diff sta abs16s2_return lda y_diff+1 sta abs16s2_return+1 - //SEG80 [45] phi from point_init::@13 point_init::abs16s2_@1 to point_init::abs16s2_@return [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return] + //SEG76 [45] phi from point_init::@13 point_init::abs16s2_@1 to point_init::abs16s2_@return [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return] abs16s2_breturn_from_b13: abs16s2_breturn_from_abs16s2_b1: - //SEG81 [45] phi (word) point_init::abs16s2_return#2 = (word~) point_init::abs16s2_return#6 [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return#0] -- register_copy + //SEG77 [45] phi (word) point_init::abs16s2_return#2 = (word~) point_init::abs16s2_return#6 [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return#0] -- register_copy jmp abs16s2_breturn - //SEG82 point_init::abs16s2_@return + //SEG78 point_init::abs16s2_@return abs16s2_breturn: jmp b10 - //SEG83 point_init::@10 + //SEG79 point_init::@10 b10: - //SEG84 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwuz1_gt_vwuz2_then_la1 + //SEG80 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwuz1_gt_vwuz2_then_la1 lda abs16s1_return cmp abs16s2_return lda abs16s1_return+1 @@ -5294,15 +4829,10 @@ point_init: { eor #$80 !: bpl b1 - //SEG85 [47] phi from point_init::@10 point_init::@11 to point_init::@2 [phi:point_init::@10/point_init::@11->point_init::@2] - b2_from_b10: - b2_from_b11: - //SEG86 [47] phi (signed word) rem16s#13 = (signed word) rem16s#15 [phi:point_init::@10/point_init::@11->point_init::@2#0] -- register_copy - //SEG87 [47] phi (word) rem16u#18 = (word) rem16u#21 [phi:point_init::@10/point_init::@11->point_init::@2#1] -- register_copy jmp b2 - //SEG88 point_init::@2 + //SEG81 point_init::@2 b2: - //SEG89 [48] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) -- vwuz1=pwuc1_derefidx_vbuz2_rol_4 + //SEG82 [47] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) -- vwuz1=pwuc1_derefidx_vbuz2_rol_4 ldy point_idx lda x_start,y sta _16 @@ -5316,19 +4846,19 @@ point_init: { rol _16+1 asl _16 rol _16+1 - //SEG90 [49] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 + //SEG83 [48] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 ldy point_idx lda _16 sta x_cur,y lda _16+1 sta x_cur+1,y - //SEG91 [50] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + //SEG84 [49] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy point_idx1 lda y_start,y sta _17 lda #0 sta _17+1 - //SEG92 [51] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) -- vwuz1=vwuz2_rol_4 + //SEG85 [50] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) -- vwuz1=vwuz2_rol_4 lda _17 asl sta _18 @@ -5341,88 +4871,88 @@ point_init: { rol _18+1 asl _18 rol _18+1 - //SEG93 [52] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ rem16u#18 rem16s#13 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 + //SEG86 [51] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 ldy point_idx lda _18 sta y_cur,y lda _18+1 sta y_cur+1,y - //SEG94 [53] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 + //SEG87 [52] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ ] ( main:2::point_init:20 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 ldy point_idx1 lda #DELAY sta delay,y jmp breturn - //SEG95 point_init::@return + //SEG88 point_init::@return breturn: - //SEG96 [54] return [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG89 [53] return [ ] ( main:2::point_init:20 [ main::i#2 ] ) rts - //SEG97 point_init::@1 + //SEG90 point_init::@1 b1: - //SEG98 [55] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 + //SEG91 [54] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 lda x_diff+1 bmi b3 jmp b7 - //SEG99 point_init::@7 + //SEG92 point_init::@7 b7: - //SEG100 [56] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbuc2 + //SEG93 [55] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbuc2 ldy point_idx lda #$10 sta x_add,y jmp b4 - //SEG101 point_init::@4 + //SEG94 point_init::@4 b4: - //SEG102 [57] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) -- vwsz1=vwsz2 + //SEG95 [56] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) -- vwsz1=vwsz2 lda x_diff sta divr16s.divisor lda x_diff+1 sta divr16s.divisor+1 - //SEG103 [58] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1=vwsz2 + //SEG96 [57] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1=vwsz2 lda y_diff sta divr16s.rem lda y_diff+1 sta divr16s.rem+1 - //SEG104 [59] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) - //SEG105 [70] phi from point_init::@4 to divr16s [phi:point_init::@4->divr16s] + //SEG97 [58] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) + //SEG98 [69] phi from point_init::@4 to divr16s [phi:point_init::@4->divr16s] divr16s_from_b4: jsr divr16s - //SEG106 [60] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ) -- vwsz1=vwsz2 + //SEG99 [59] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ) -- vwsz1=vwsz2 lda divr16s.return sta divr16s.return_3 lda divr16s.return+1 sta divr16s.return_3+1 jmp b11 - //SEG107 point_init::@11 + //SEG100 point_init::@11 b11: - //SEG108 [61] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ) -- vwsz1=vwsz2 + //SEG101 [60] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ) -- vwsz1=vwsz2 lda divr16s.return_3 sta x_stepf lda divr16s.return_3+1 sta x_stepf+1 - //SEG109 [62] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ) -- vbuz1=_hi_vwsz2 + //SEG102 [61] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ) -- vbuz1=_hi_vwsz2 lda x_stepf+1 sta _13 - //SEG110 [63] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ) -- vbuz1=vbuz2_ror_4 + //SEG103 [62] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ) -- vbuz1=vbuz2_ror_4 lda _13 lsr lsr lsr lsr sta _14 - //SEG111 [64] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ) -- pbsc1_derefidx_vbuz1=vbsz2 + //SEG104 [63] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- pbsc1_derefidx_vbuz1=vbsz2 lda _14 ldy point_idx1 sta y_add,y - jmp b2_from_b11 - //SEG112 point_init::@3 + jmp b2 + //SEG105 point_init::@3 b3: - //SEG113 [65] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbsc2 + //SEG106 [64] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbsc2 ldy point_idx lda #-$10 sta x_add,y jmp b4 - //SEG114 point_init::abs16s2_@1 + //SEG107 point_init::abs16s2_@1 abs16s2_b1: - //SEG115 [66] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) -- vwsz1=_neg_vwsz2 + //SEG108 [65] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) -- vwsz1=_neg_vwsz2 sec lda y_diff eor #$ff @@ -5432,15 +4962,15 @@ point_init: { eor #$ff adc #0 sta abs16s2__2+1 - //SEG116 [67] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) -- vwuz1=vwuz2 + //SEG109 [66] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) -- vwuz1=vwuz2 lda abs16s2__2 sta abs16s2_return lda abs16s2__2+1 sta abs16s2_return+1 jmp abs16s2_breturn_from_abs16s2_b1 - //SEG117 point_init::abs16s1_@1 + //SEG110 point_init::abs16s1_@1 abs16s1_b1: - //SEG118 [68] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) -- vwsz1=_neg_vwsz2 + //SEG111 [67] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) -- vwsz1=_neg_vwsz2 sec lda x_diff eor #$ff @@ -5450,123 +4980,113 @@ point_init: { eor #$ff adc #0 sta abs16s1__2+1 - //SEG119 [69] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) -- vwuz1=vwuz2 + //SEG112 [68] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) -- vwuz1=vwuz2 lda abs16s1__2 sta abs16s1_return lda abs16s1__2+1 sta abs16s1_return+1 jmp abs16s1_breturn_from_abs16s1_b1 } -//SEG120 divr16s +//SEG113 divr16s divr16s: { .const dividend = 0 - .label _7 = $57 - .label _11 = $55 - .label neg = $f - .label resultu = $53 - .label return = $10 - .label divisor = $41 - .label rem = $43 - .label return_3 = $45 - .label dividendu = 9 - .label divisoru = $d - .label remu = $b + .label _7 = $55 + .label _11 = $53 + .label neg = $d + .label resultu = $51 + .label return = $e + .label divisor = $3f + .label rem = $41 + .label return_3 = $43 + .label dividendu = 7 + .label divisoru = $b + .label remu = 9 jmp b16 - //SEG121 divr16s::@16 + //SEG114 divr16s::@16 b16: - //SEG122 [71] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1_lt_0_then_la1 + //SEG115 [70] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1_lt_0_then_la1 lda rem+1 bmi b1 jmp b17 - //SEG123 divr16s::@17 + //SEG116 divr16s::@17 b17: - //SEG124 [72] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) -- vwuz1=vwuz2 + //SEG117 [71] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) -- vwuz1=vwuz2 lda rem sta remu lda rem+1 sta remu+1 - //SEG125 [73] phi from divr16s::@17 to divr16s::@2 [phi:divr16s::@17->divr16s::@2] + //SEG118 [72] phi from divr16s::@17 to divr16s::@2 [phi:divr16s::@17->divr16s::@2] b2_from_b17: - //SEG126 [73] phi (word) divr16s::remu#3 = (word~) divr16s::remu#8 [phi:divr16s::@17->divr16s::@2#0] -- register_copy - //SEG127 [73] phi (word) divr16s::dividendu#3 = ((word))(const signed word) divr16s::dividend#0 [phi:divr16s::@17->divr16s::@2#1] -- vwuz1=vbuc1 + //SEG119 [72] phi (word) divr16s::remu#3 = (word~) divr16s::remu#8 [phi:divr16s::@17->divr16s::@2#0] -- register_copy + //SEG120 [72] phi (word) divr16s::dividendu#3 = ((word))(const signed word) divr16s::dividend#0 [phi:divr16s::@17->divr16s::@2#1] -- vwuz1=vbuc1 lda #dividend sta dividendu+1 - //SEG128 [73] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16s::@17->divr16s::@2#2] -- vbuz1=vbuc1 + //SEG121 [72] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16s::@17->divr16s::@2#2] -- vbuz1=vbuc1 lda #0 sta neg jmp b2 - //SEG129 divr16s::@2 + //SEG122 divr16s::@2 b2: - //SEG130 [74] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) -- vwsz1_lt_0_then_la1 + //SEG123 [73] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) -- vwsz1_lt_0_then_la1 lda divisor+1 bmi b3 jmp b18 - //SEG131 divr16s::@18 + //SEG124 divr16s::@18 b18: - //SEG132 [75] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) -- vwuz1=vwuz2 + //SEG125 [74] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) -- vwuz1=vwuz2 lda divisor sta divisoru lda divisor+1 sta divisoru+1 - //SEG133 [76] phi from divr16s::@18 divr16s::@3 to divr16s::@4 [phi:divr16s::@18/divr16s::@3->divr16s::@4] + //SEG126 [75] phi from divr16s::@18 divr16s::@3 to divr16s::@4 [phi:divr16s::@18/divr16s::@3->divr16s::@4] b4_from_b18: b4_from_b3: - //SEG134 [76] phi (byte) divr16s::neg#4 = (byte) divr16s::neg#3 [phi:divr16s::@18/divr16s::@3->divr16s::@4#0] -- register_copy - //SEG135 [76] phi (word) divr16s::divisoru#3 = (word~) divr16s::divisoru#5 [phi:divr16s::@18/divr16s::@3->divr16s::@4#1] -- register_copy + //SEG127 [75] phi (byte) divr16s::neg#4 = (byte) divr16s::neg#3 [phi:divr16s::@18/divr16s::@3->divr16s::@4#0] -- register_copy + //SEG128 [75] phi (word) divr16s::divisoru#3 = (word~) divr16s::divisoru#5 [phi:divr16s::@18/divr16s::@3->divr16s::@4#1] -- register_copy jmp b4 - //SEG136 divr16s::@4 + //SEG129 divr16s::@4 b4: - //SEG137 [77] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) -- vwuz1=vwuz2 + //SEG130 [76] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) -- vwuz1=vwuz2 lda dividendu sta divr16u.dividend lda dividendu+1 sta divr16u.dividend+1 - //SEG138 [78] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) -- vwuz1=vwuz2 + //SEG131 [77] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) -- vwuz1=vwuz2 lda divisoru sta divr16u.divisor lda divisoru+1 sta divr16u.divisor+1 - //SEG139 [79] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) -- vwuz1=vwuz2 + //SEG132 [78] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) -- vwuz1=vwuz2 lda remu sta divr16u.rem lda remu+1 sta divr16u.rem+1 - //SEG140 [80] call divr16u [ divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ) - //SEG141 [95] phi from divr16s::@4 to divr16u [phi:divr16s::@4->divr16u] + //SEG133 [79] call divr16u [ divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) + //SEG134 [92] phi from divr16s::@4 to divr16u [phi:divr16s::@4->divr16u] divr16u_from_b4: jsr divr16u - //SEG142 [81] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ) -- vwuz1=vwuz2 + //SEG135 [80] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#2 ] ) -- vwuz1=vwuz2 lda divr16u.return sta divr16u.return_2 lda divr16u.return+1 sta divr16u.return_2+1 jmp b15 - //SEG143 divr16s::@15 + //SEG136 divr16s::@15 b15: - //SEG144 [82] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ) -- vwuz1=vwuz2 + //SEG137 [81] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16s::resultu#0 ] ) -- vwuz1=vwuz2 lda divr16u.return_2 sta resultu lda divr16u.return_2+1 sta resultu+1 - //SEG145 [83] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16u::rem#10 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 ] ) -- vbuz1_eq_0_then_la1 + //SEG138 [82] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::resultu#0 ] ) -- vbuz1_eq_0_then_la1 lda neg beq b19 jmp b11 - //SEG146 divr16s::@11 + //SEG139 divr16s::@11 b11: - //SEG147 [84] (signed word) rem16s#2 ← - (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ) -- vwsz1=_neg_vwsz2 - sec - lda divr16u.rem - eor #$ff - adc #0 - sta rem16s - lda divr16u.rem+1 - eor #$ff - adc #0 - sta rem16s+1 - //SEG148 [85] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 rem16s#2 divr16s::return#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#2 divr16s::return#1 ] ) -- vwsz1=_neg_vwsz2 + //SEG140 [83] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16s::return#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#1 ] ) -- vwsz1=_neg_vwsz2 sec lda resultu eor #$ff @@ -5576,32 +5096,26 @@ divr16s: { eor #$ff adc #0 sta return+1 - //SEG149 [86] phi from divr16s::@11 divr16s::@19 to divr16s::@return [phi:divr16s::@11/divr16s::@19->divr16s::@return] + //SEG141 [84] phi from divr16s::@11 divr16s::@19 to divr16s::@return [phi:divr16s::@11/divr16s::@19->divr16s::@return] breturn_from_b11: breturn_from_b19: - //SEG150 [86] phi (signed word) rem16s#3 = (signed word) rem16s#2 [phi:divr16s::@11/divr16s::@19->divr16s::@return#0] -- register_copy - //SEG151 [86] phi (signed word) divr16s::return#2 = (signed word) divr16s::return#1 [phi:divr16s::@11/divr16s::@19->divr16s::@return#1] -- register_copy + //SEG142 [84] phi (signed word) divr16s::return#2 = (signed word) divr16s::return#1 [phi:divr16s::@11/divr16s::@19->divr16s::@return#0] -- register_copy jmp breturn - //SEG152 divr16s::@return + //SEG143 divr16s::@return breturn: - //SEG153 [87] return [ divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) + //SEG144 [85] return [ divr16s::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) rts - //SEG154 divr16s::@19 + //SEG145 divr16s::@19 b19: - //SEG155 [88] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 divr16s::return#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 ] ) -- vwsz1=vwsz2 + //SEG146 [86] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16s::return#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#7 ] ) -- vwsz1=vwsz2 lda resultu sta return lda resultu+1 sta return+1 - //SEG156 [89] (signed word~) rem16s#57 ← (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::return#7 rem16s#57 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 rem16s#57 ] ) -- vwsz1=vwsz2 - lda divr16u.rem - sta rem16s - lda divr16u.rem+1 - sta rem16s+1 jmp breturn_from_b19 - //SEG157 divr16s::@3 + //SEG147 divr16s::@3 b3: - //SEG158 [90] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) -- vwsz1=_neg_vwsz2 + //SEG148 [87] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) -- vwsz1=_neg_vwsz2 sec lda divisor eor #$ff @@ -5611,19 +5125,19 @@ divr16s: { eor #$ff adc #0 sta _11+1 - //SEG159 [91] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) -- vbuz1=vbuz1_bxor_vbuc1 + //SEG149 [88] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) -- vbuz1=vbuz1_bxor_vbuc1 lda neg eor #1 sta neg - //SEG160 [92] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) -- vwuz1=vwuz2 + //SEG150 [89] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) -- vwuz1=vwuz2 lda _11 sta divisoru lda _11+1 sta divisoru+1 jmp b4_from_b3 - //SEG161 divr16s::@1 + //SEG151 divr16s::@1 b1: - //SEG162 [93] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) -- vwsz1=_neg_vwsz2 + //SEG152 [90] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) -- vwsz1=_neg_vwsz2 sec lda rem eor #$ff @@ -5633,91 +5147,91 @@ divr16s: { eor #$ff adc #0 sta _7+1 - //SEG163 [94] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) -- vwuz1=vwuz2 + //SEG153 [91] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) -- vwuz1=vwuz2 lda _7 sta remu lda _7+1 sta remu+1 - //SEG164 [73] phi from divr16s::@1 to divr16s::@2 [phi:divr16s::@1->divr16s::@2] + //SEG154 [72] phi from divr16s::@1 to divr16s::@2 [phi:divr16s::@1->divr16s::@2] b2_from_b1: - //SEG165 [73] phi (word) divr16s::remu#3 = (word~) divr16s::remu#7 [phi:divr16s::@1->divr16s::@2#0] -- register_copy - //SEG166 [73] phi (word) divr16s::dividendu#3 = ((word))-(const signed word) divr16s::dividend#0 [phi:divr16s::@1->divr16s::@2#1] -- vwuz1=vbuc1 + //SEG155 [72] phi (word) divr16s::remu#3 = (word~) divr16s::remu#7 [phi:divr16s::@1->divr16s::@2#0] -- register_copy + //SEG156 [72] phi (word) divr16s::dividendu#3 = ((word))-(const signed word) divr16s::dividend#0 [phi:divr16s::@1->divr16s::@2#1] -- vwuz1=vbuc1 lda #<-dividend sta dividendu lda #>-dividend sta dividendu+1 - //SEG167 [73] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:divr16s::@1->divr16s::@2#2] -- vbuz1=vbuc1 + //SEG157 [72] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:divr16s::@1->divr16s::@2#2] -- vbuz1=vbuc1 lda #1 sta neg jmp b2 } -//SEG168 divr16u +//SEG158 divr16u divr16u: { - .label _1 = $59 - .label _2 = $5a - .label rem = $12 - .label dividend = $14 - .label quotient = $16 - .label i = $18 - .label return = $16 - .label divisor = $4f - .label return_2 = $51 - //SEG169 [96] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + .label _1 = $57 + .label _2 = $58 + .label rem = $10 + .label dividend = $12 + .label quotient = $14 + .label i = $16 + .label return = $14 + .label divisor = $4d + .label return_2 = $4f + //SEG159 [93] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] b1_from_divr16u: - //SEG170 [96] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 + //SEG160 [93] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuz1=vbuc1 lda #0 sta i - //SEG171 [96] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + //SEG161 [93] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 lda #<0 sta quotient lda #>0 sta quotient+1 - //SEG172 [96] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy - //SEG173 [96] phi (word) divr16u::rem#4 = (word) divr16u::rem#3 [phi:divr16u->divr16u::@1#3] -- register_copy + //SEG162 [93] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy + //SEG163 [93] phi (word) divr16u::rem#4 = (word) divr16u::rem#3 [phi:divr16u->divr16u::@1#3] -- register_copy jmp b1 - //SEG174 [96] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + //SEG164 [93] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] b1_from_b3: - //SEG175 [96] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - //SEG176 [96] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - //SEG177 [96] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG178 [96] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG165 [93] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + //SEG166 [93] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + //SEG167 [93] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + //SEG168 [93] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 - //SEG179 divr16u::@1 + //SEG169 divr16u::@1 b1: - //SEG180 [97] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 + //SEG170 [94] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - //SEG181 [98] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuz1=_hi_vwuz2 + //SEG171 [95] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuz1=_hi_vwuz2 lda dividend+1 sta _1 - //SEG182 [99] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 + //SEG172 [96] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuz1=vbuz2_band_vbuc1 lda #$80 and _1 sta _2 - //SEG183 [100] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuz1_eq_0_then_la1 + //SEG173 [97] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuz1_eq_0_then_la1 lda _2 beq b2_from_b1 jmp b4 - //SEG184 divr16u::@4 + //SEG174 divr16u::@4 b4: - //SEG185 [101] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 + //SEG175 [98] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem - //SEG186 [102] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + //SEG176 [99] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] b2_from_b1: b2_from_b4: - //SEG187 [102] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + //SEG177 [99] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp b2 - //SEG188 divr16u::@2 + //SEG178 divr16u::@2 b2: - //SEG189 [103] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 + //SEG179 [100] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG190 [104] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG180 [101] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG191 [105] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG181 [102] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3_from_b2 @@ -5727,14 +5241,14 @@ divr16u: { bcc b3_from_b2 !: jmp b5 - //SEG192 divr16u::@5 + //SEG182 divr16u::@5 b5: - //SEG193 [106] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG183 [103] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG194 [107] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG184 [104] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -5742,269 +5256,269 @@ divr16u: { lda rem+1 sbc divisor+1 sta rem+1 - //SEG195 [108] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + //SEG185 [105] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] b3_from_b2: b3_from_b5: - //SEG196 [108] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG197 [108] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG186 [105] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + //SEG187 [105] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 - //SEG198 divr16u::@3 + //SEG188 divr16u::@3 b3: - //SEG199 [109] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG189 [106] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG200 [110] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG190 [107] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda i cmp #$10 bne b1_from_b3 jmp breturn - //SEG201 divr16u::@return + //SEG191 divr16u::@return breturn: - //SEG202 [111] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::return#0 ] ) + //SEG192 [108] return [ divr16u::return#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) rts } -//SEG203 screen_fill +//SEG193 screen_fill screen_fill: { .const ch = $10 - .label screen = $1a - .label x = $1c - .label y = $19 - //SEG204 [113] phi from screen_fill to screen_fill::@1 [phi:screen_fill->screen_fill::@1] + .label screen = $18 + .label x = $1a + .label y = $17 + //SEG194 [110] phi from screen_fill to screen_fill::@1 [phi:screen_fill->screen_fill::@1] b1_from_screen_fill: - //SEG205 [113] phi (byte) screen_fill::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill->screen_fill::@1#0] -- vbuz1=vbuc1 + //SEG195 [110] phi (byte) screen_fill::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill->screen_fill::@1#0] -- vbuz1=vbuc1 lda #0 sta y - //SEG206 [113] phi (byte*) screen_fill::screen#3 = (const byte*) SCREEN#0 [phi:screen_fill->screen_fill::@1#1] -- pbuz1=pbuc1 + //SEG196 [110] phi (byte*) screen_fill::screen#3 = (const byte*) SCREEN#0 [phi:screen_fill->screen_fill::@1#1] -- pbuz1=pbuc1 lda #SCREEN sta screen+1 jmp b1 - //SEG207 [113] phi from screen_fill::@3 to screen_fill::@1 [phi:screen_fill::@3->screen_fill::@1] + //SEG197 [110] phi from screen_fill::@3 to screen_fill::@1 [phi:screen_fill::@3->screen_fill::@1] b1_from_b3: - //SEG208 [113] phi (byte) screen_fill::y#4 = (byte) screen_fill::y#1 [phi:screen_fill::@3->screen_fill::@1#0] -- register_copy - //SEG209 [113] phi (byte*) screen_fill::screen#3 = (byte*) screen_fill::screen#1 [phi:screen_fill::@3->screen_fill::@1#1] -- register_copy + //SEG198 [110] phi (byte) screen_fill::y#4 = (byte) screen_fill::y#1 [phi:screen_fill::@3->screen_fill::@1#0] -- register_copy + //SEG199 [110] phi (byte*) screen_fill::screen#3 = (byte*) screen_fill::screen#1 [phi:screen_fill::@3->screen_fill::@1#1] -- register_copy jmp b1 - //SEG210 screen_fill::@1 + //SEG200 screen_fill::@1 b1: - //SEG211 [114] phi from screen_fill::@1 to screen_fill::@2 [phi:screen_fill::@1->screen_fill::@2] + //SEG201 [111] phi from screen_fill::@1 to screen_fill::@2 [phi:screen_fill::@1->screen_fill::@2] b2_from_b1: - //SEG212 [114] phi (byte) screen_fill::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill::@1->screen_fill::@2#0] -- vbuz1=vbuc1 + //SEG202 [111] phi (byte) screen_fill::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill::@1->screen_fill::@2#0] -- vbuz1=vbuc1 lda #0 sta x - //SEG213 [114] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#3 [phi:screen_fill::@1->screen_fill::@2#1] -- register_copy + //SEG203 [111] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#3 [phi:screen_fill::@1->screen_fill::@2#1] -- register_copy jmp b2 - //SEG214 [114] phi from screen_fill::@2 to screen_fill::@2 [phi:screen_fill::@2->screen_fill::@2] + //SEG204 [111] phi from screen_fill::@2 to screen_fill::@2 [phi:screen_fill::@2->screen_fill::@2] b2_from_b2: - //SEG215 [114] phi (byte) screen_fill::x#2 = (byte) screen_fill::x#1 [phi:screen_fill::@2->screen_fill::@2#0] -- register_copy - //SEG216 [114] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#1 [phi:screen_fill::@2->screen_fill::@2#1] -- register_copy + //SEG205 [111] phi (byte) screen_fill::x#2 = (byte) screen_fill::x#1 [phi:screen_fill::@2->screen_fill::@2#0] -- register_copy + //SEG206 [111] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#1 [phi:screen_fill::@2->screen_fill::@2#1] -- register_copy jmp b2 - //SEG217 screen_fill::@2 + //SEG207 screen_fill::@2 b2: - //SEG218 [115] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) -- _deref_pbuz1=vbuc1 + //SEG208 [112] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (screen),y - //SEG219 [116] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) -- pbuz1=_inc_pbuz1 + //SEG209 [113] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - //SEG220 [117] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG210 [114] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuz1=_inc_vbuz1 inc x - //SEG221 [118] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG211 [115] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda x cmp #$28 bne b2_from_b2 jmp b3 - //SEG222 screen_fill::@3 + //SEG212 screen_fill::@3 b3: - //SEG223 [119] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG213 [116] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1=_inc_vbuz1 inc y - //SEG224 [120] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG214 [117] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda y cmp #$19 bne b1_from_b3 jmp breturn - //SEG225 screen_fill::@return + //SEG215 screen_fill::@return breturn: - //SEG226 [121] return [ ] ( main:2::screen_fill:17 [ ] ) + //SEG216 [118] return [ ] ( main:2::screen_fill:17 [ ] ) rts } -//SEG227 bitmap_clear +//SEG217 bitmap_clear bitmap_clear: { - .label bitmap = $1e - .label x = $20 - .label y = $1d - .label _3 = $5b - //SEG228 [122] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + .label bitmap = $1c + .label x = $1e + .label y = $1b + .label _3 = $59 + //SEG218 [119] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda bitmap_plot_ylo+0 sta _3 lda bitmap_plot_yhi+0 sta _3+1 - //SEG229 [123] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) -- pbuz1=pbuz2 + //SEG219 [120] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) -- pbuz1=pbuz2 lda _3 sta bitmap lda _3+1 sta bitmap+1 - //SEG230 [124] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + //SEG220 [121] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] b1_from_bitmap_clear: - //SEG231 [124] phi (byte) bitmap_clear::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear->bitmap_clear::@1#0] -- vbuz1=vbuc1 + //SEG221 [121] phi (byte) bitmap_clear::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear->bitmap_clear::@1#0] -- vbuz1=vbuc1 lda #0 sta y - //SEG232 [124] phi (byte*) bitmap_clear::bitmap#3 = (byte*~) bitmap_clear::bitmap#5 [phi:bitmap_clear->bitmap_clear::@1#1] -- register_copy + //SEG222 [121] phi (byte*) bitmap_clear::bitmap#3 = (byte*~) bitmap_clear::bitmap#5 [phi:bitmap_clear->bitmap_clear::@1#1] -- register_copy jmp b1 - //SEG233 [124] phi from bitmap_clear::@3 to bitmap_clear::@1 [phi:bitmap_clear::@3->bitmap_clear::@1] + //SEG223 [121] phi from bitmap_clear::@3 to bitmap_clear::@1 [phi:bitmap_clear::@3->bitmap_clear::@1] b1_from_b3: - //SEG234 [124] phi (byte) bitmap_clear::y#4 = (byte) bitmap_clear::y#1 [phi:bitmap_clear::@3->bitmap_clear::@1#0] -- register_copy - //SEG235 [124] phi (byte*) bitmap_clear::bitmap#3 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@3->bitmap_clear::@1#1] -- register_copy + //SEG224 [121] phi (byte) bitmap_clear::y#4 = (byte) bitmap_clear::y#1 [phi:bitmap_clear::@3->bitmap_clear::@1#0] -- register_copy + //SEG225 [121] phi (byte*) bitmap_clear::bitmap#3 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@3->bitmap_clear::@1#1] -- register_copy jmp b1 - //SEG236 bitmap_clear::@1 + //SEG226 bitmap_clear::@1 b1: - //SEG237 [125] phi from bitmap_clear::@1 to bitmap_clear::@2 [phi:bitmap_clear::@1->bitmap_clear::@2] + //SEG227 [122] phi from bitmap_clear::@1 to bitmap_clear::@2 [phi:bitmap_clear::@1->bitmap_clear::@2] b2_from_b1: - //SEG238 [125] phi (byte) bitmap_clear::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear::@1->bitmap_clear::@2#0] -- vbuz1=vbuc1 + //SEG228 [122] phi (byte) bitmap_clear::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear::@1->bitmap_clear::@2#0] -- vbuz1=vbuc1 lda #0 sta x - //SEG239 [125] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#3 [phi:bitmap_clear::@1->bitmap_clear::@2#1] -- register_copy + //SEG229 [122] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#3 [phi:bitmap_clear::@1->bitmap_clear::@2#1] -- register_copy jmp b2 - //SEG240 [125] phi from bitmap_clear::@2 to bitmap_clear::@2 [phi:bitmap_clear::@2->bitmap_clear::@2] + //SEG230 [122] phi from bitmap_clear::@2 to bitmap_clear::@2 [phi:bitmap_clear::@2->bitmap_clear::@2] b2_from_b2: - //SEG241 [125] phi (byte) bitmap_clear::x#2 = (byte) bitmap_clear::x#1 [phi:bitmap_clear::@2->bitmap_clear::@2#0] -- register_copy - //SEG242 [125] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@2->bitmap_clear::@2#1] -- register_copy + //SEG231 [122] phi (byte) bitmap_clear::x#2 = (byte) bitmap_clear::x#1 [phi:bitmap_clear::@2->bitmap_clear::@2#0] -- register_copy + //SEG232 [122] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@2->bitmap_clear::@2#1] -- register_copy jmp b2 - //SEG243 bitmap_clear::@2 + //SEG233 bitmap_clear::@2 b2: - //SEG244 [126] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) -- _deref_pbuz1=vbuc1 + //SEG234 [123] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (bitmap),y - //SEG245 [127] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) -- pbuz1=_inc_pbuz1 + //SEG235 [124] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) -- pbuz1=_inc_pbuz1 inc bitmap bne !+ inc bitmap+1 !: - //SEG246 [128] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG236 [125] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuz1=_inc_vbuz1 inc x - //SEG247 [129] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG237 [126] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda x cmp #$c8 bne b2_from_b2 jmp b3 - //SEG248 bitmap_clear::@3 + //SEG238 bitmap_clear::@3 b3: - //SEG249 [130] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG239 [127] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1=_inc_vbuz1 inc y - //SEG250 [131] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG240 [128] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda y cmp #$28 bne b1_from_b3 jmp breturn - //SEG251 bitmap_clear::@return + //SEG241 bitmap_clear::@return breturn: - //SEG252 [132] return [ ] ( main:2::bitmap_clear:15 [ ] ) + //SEG242 [129] return [ ] ( main:2::bitmap_clear:15 [ ] ) rts } -//SEG253 bitmap_init +//SEG243 bitmap_init bitmap_init: { - .label _3 = $5d - .label _4 = $5e - .label _5 = $5f - .label _6 = $60 - .label _7 = $61 - .label bits = $21 - .label x = $22 - .label y = $23 - .label yoffs = $24 - //SEG254 [134] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + .label _3 = $5b + .label _4 = $5c + .label _5 = $5d + .label _6 = $5e + .label _7 = $5f + .label bits = $1f + .label x = $20 + .label y = $21 + .label yoffs = $22 + //SEG244 [131] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] b1_from_bitmap_init: - //SEG255 [134] phi (byte) bitmap_init::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuz1=vbuc1 + //SEG245 [131] phi (byte) bitmap_init::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuz1=vbuc1 lda #0 sta x - //SEG256 [134] phi (byte) bitmap_init::bits#3 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init->bitmap_init::@1#1] -- vbuz1=vbuc1 + //SEG246 [131] phi (byte) bitmap_init::bits#3 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init->bitmap_init::@1#1] -- vbuz1=vbuc1 lda #$80 sta bits jmp b1 - //SEG257 [134] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + //SEG247 [131] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] b1_from_b2: - //SEG258 [134] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - //SEG259 [134] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + //SEG248 [131] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + //SEG249 [131] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy jmp b1 - //SEG260 bitmap_init::@1 + //SEG250 bitmap_init::@1 b1: - //SEG261 [135] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 + //SEG251 [132] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 lda bits ldy x sta bitmap_plot_bit,y - //SEG262 [136] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuz1=vbuz1_ror_1 + //SEG252 [133] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuz1=vbuz1_ror_1 lsr bits - //SEG263 [137] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuz1_neq_0_then_la1 + //SEG253 [134] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuz1_neq_0_then_la1 lda bits bne b10_from_b1 - //SEG264 [138] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + //SEG254 [135] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] b2_from_b1: - //SEG265 [138] phi (byte) bitmap_init::bits#4 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuz1=vbuc1 + //SEG255 [135] phi (byte) bitmap_init::bits#4 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuz1=vbuc1 lda #$80 sta bits jmp b2 - //SEG266 bitmap_init::@2 + //SEG256 bitmap_init::@2 b2: - //SEG267 [139] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG257 [136] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuz1=_inc_vbuz1 inc x - //SEG268 [140] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuz1_neq_0_then_la1 + //SEG258 [137] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuz1_neq_0_then_la1 lda x bne b1_from_b2 - //SEG269 [141] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + //SEG259 [138] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] b3_from_b2: - //SEG270 [141] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP#0 [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + //SEG260 [138] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP#0 [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta yoffs+1 - //SEG271 [141] phi (byte) bitmap_init::y#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuz1=vbuc1 + //SEG261 [138] phi (byte) bitmap_init::y#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuz1=vbuc1 lda #0 sta y jmp b3 - //SEG272 [141] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + //SEG262 [138] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] b3_from_b4: - //SEG273 [141] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - //SEG274 [141] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + //SEG263 [138] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + //SEG264 [138] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy jmp b3 - //SEG275 bitmap_init::@3 + //SEG265 bitmap_init::@3 b3: - //SEG276 [142] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) -- vbuz1=vbuz2_band_vbuc1 + //SEG266 [139] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) -- vbuz1=vbuz2_band_vbuc1 lda #7 and y sta _3 - //SEG277 [143] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) -- vbuz1=_lo_pbuz2 + //SEG267 [140] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) -- vbuz1=_lo_pbuz2 lda yoffs sta _4 - //SEG278 [144] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) -- vbuz1=vbuz2_bor_vbuz3 + //SEG268 [141] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) -- vbuz1=vbuz2_bor_vbuz3 lda _3 ora _4 sta _5 - //SEG279 [145] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 + //SEG269 [142] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 lda _5 ldy y sta bitmap_plot_ylo,y - //SEG280 [146] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) -- vbuz1=_hi_pbuz2 + //SEG270 [143] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) -- vbuz1=_hi_pbuz2 lda yoffs+1 sta _6 - //SEG281 [147] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 + //SEG271 [144] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 lda _6 ldy y sta bitmap_plot_yhi,y - //SEG282 [148] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) -- vbuz1=vbuz2_band_vbuc1 + //SEG272 [145] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) -- vbuz1=vbuz2_band_vbuc1 lda #7 and y sta _7 - //SEG283 [149] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG273 [146] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- vbuz1_neq_vbuc1_then_la1 lda _7 cmp #7 bne b4_from_b3 jmp b7 - //SEG284 bitmap_init::@7 + //SEG274 bitmap_init::@7 b7: - //SEG285 [150] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1 + //SEG275 [147] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1 clc lda yoffs adc #<$28*8 @@ -6012,31 +5526,31 @@ bitmap_init: { lda yoffs+1 adc #>$28*8 sta yoffs+1 - //SEG286 [151] phi from bitmap_init::@3 bitmap_init::@7 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4] + //SEG276 [148] phi from bitmap_init::@3 bitmap_init::@7 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4] b4_from_b3: b4_from_b7: - //SEG287 [151] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4#0] -- register_copy + //SEG277 [148] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4#0] -- register_copy jmp b4 - //SEG288 bitmap_init::@4 + //SEG278 bitmap_init::@4 b4: - //SEG289 [152] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuz1=_inc_vbuz1 + //SEG279 [149] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuz1=_inc_vbuz1 inc y - //SEG290 [153] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuz1_neq_0_then_la1 + //SEG280 [150] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuz1_neq_0_then_la1 lda y bne b3_from_b4 jmp breturn - //SEG291 bitmap_init::@return + //SEG281 bitmap_init::@return breturn: - //SEG292 [154] return [ ] ( main:2::bitmap_init:13 [ ] ) + //SEG282 [151] return [ ] ( main:2::bitmap_init:13 [ ] ) rts - //SEG293 [155] phi from bitmap_init::@1 to bitmap_init::@10 [phi:bitmap_init::@1->bitmap_init::@10] + //SEG283 [152] phi from bitmap_init::@1 to bitmap_init::@10 [phi:bitmap_init::@1->bitmap_init::@10] b10_from_b1: jmp b10 - //SEG294 bitmap_init::@10 + //SEG284 bitmap_init::@10 b10: - //SEG295 [138] phi from bitmap_init::@10 to bitmap_init::@2 [phi:bitmap_init::@10->bitmap_init::@2] + //SEG285 [135] phi from bitmap_init::@10 to bitmap_init::@2 [phi:bitmap_init::@10->bitmap_init::@2] b2_from_b10: - //SEG296 [138] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@10->bitmap_init::@2#0] -- register_copy + //SEG286 [135] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@10->bitmap_init::@2#0] -- register_copy jmp b2 } x_start: .word $a, $14, $1e, $1e @@ -6053,308 +5567,303 @@ bitmap_init: { bitmap_plot_bit: .fill $100, 0 REGISTER UPLIFT POTENTIAL REGISTERS -Equivalence Class zp ZP_BYTE:94 [ bitmap_init::$4 ] has ALU potential. +Equivalence Class zp ZP_BYTE:92 [ bitmap_init::$4 ] has ALU potential. Statement [5] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [7] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [10] *((const byte*) CIA2_PORT_A#0) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [12] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ) always clobbers reg byte a +Statement [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 main::$9 ] ( main:2 [ main::i#2 main::$9 ] ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ main::$9 ] +Statement [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 main::$9 bitmap_plot::x#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:37 [ main::$9 ] Statement [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 ] ) always clobbers reg byte a -Statement [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) always clobbers reg byte a -Statement [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a -Statement [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a -Statement [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) always clobbers reg byte a reg byte y +Statement [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 ] ) always clobbers reg byte a +Statement [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) always clobbers reg byte a +Statement [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a +Statement [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a +Statement [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Statement [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:38 [ point_init::point_idx#0 ] -Statement [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:50 [ point_init::point_idx1#0 ] -Statement [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) always clobbers reg byte a -Statement [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) always clobbers reg byte a -Statement [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) always clobbers reg byte a -Statement [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) always clobbers reg byte a -Statement [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) always clobbers reg byte a -Statement [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [48] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) always clobbers reg byte a -Statement [49] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) always clobbers reg byte a -Statement [50] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) always clobbers reg byte a -Statement [51] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) always clobbers reg byte a -Statement [52] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ rem16u#18 rem16s#13 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx1#0 ] ) always clobbers reg byte a -Statement [53] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) always clobbers reg byte a -Statement [55] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [56] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [57] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) always clobbers reg byte a -Statement [58] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) always clobbers reg byte a -Statement [60] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ) always clobbers reg byte a -Statement [61] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ) always clobbers reg byte a -Statement [62] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ) always clobbers reg byte a -Statement [63] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ) always clobbers reg byte a -Statement [65] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [66] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) always clobbers reg byte a -Statement [67] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) always clobbers reg byte a -Statement [68] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) always clobbers reg byte a -Statement [69] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) always clobbers reg byte a -Statement [71] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) always clobbers reg byte a -Statement [72] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) always clobbers reg byte a -Statement [74] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] -Statement [75] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) always clobbers reg byte a -Statement [77] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) always clobbers reg byte a -Statement [78] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) always clobbers reg byte a -Statement [79] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) always clobbers reg byte a -Statement [81] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ) always clobbers reg byte a -Statement [82] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ) always clobbers reg byte a -Statement [84] (signed word) rem16s#2 ← - (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ) always clobbers reg byte a -Statement [85] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 rem16s#2 divr16s::return#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#2 divr16s::return#1 ] ) always clobbers reg byte a -Statement [88] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 divr16s::return#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 ] ) always clobbers reg byte a -Statement [89] (signed word~) rem16s#57 ← (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::return#7 rem16s#57 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 rem16s#57 ] ) always clobbers reg byte a -Statement [90] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) always clobbers reg byte a -Statement [91] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) always clobbers reg byte a -Statement [92] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) always clobbers reg byte a -Statement [93] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) always clobbers reg byte a -Statement [94] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) always clobbers reg byte a -Statement [98] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:24 [ divr16u::i#2 divr16u::i#1 ] -Statement [99] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a -Statement [101] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [105] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [107] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [115] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ screen_fill::y#4 screen_fill::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:25 [ screen_fill::y#4 screen_fill::y#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:28 [ screen_fill::x#2 screen_fill::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:28 [ screen_fill::x#2 screen_fill::x#1 ] -Statement [122] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) always clobbers reg byte a -Statement [123] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a -Statement [126] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:29 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:32 [ bitmap_clear::x#2 bitmap_clear::x#1 ] -Removing always clobbered register reg byte y as potential for zp ZP_BYTE:32 [ bitmap_clear::x#2 bitmap_clear::x#1 ] -Statement [142] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:35 [ bitmap_init::y#2 bitmap_init::y#1 ] -Statement [148] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a -Statement [150] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Statement [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:36 [ point_init::point_idx#0 ] +Statement [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ point_init::point_idx1#0 ] +Statement [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) always clobbers reg byte a +Statement [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) always clobbers reg byte a +Statement [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) always clobbers reg byte a +Statement [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) always clobbers reg byte a +Statement [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) always clobbers reg byte a +Statement [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [47] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) always clobbers reg byte a +Statement [48] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) always clobbers reg byte a +Statement [49] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) always clobbers reg byte a +Statement [50] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) always clobbers reg byte a +Statement [51] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx1#0 ] ) always clobbers reg byte a +Statement [52] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ ] ( main:2::point_init:20 [ main::i#2 ] ) always clobbers reg byte a +Statement [54] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [55] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [56] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) always clobbers reg byte a +Statement [57] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) always clobbers reg byte a +Statement [59] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ) always clobbers reg byte a +Statement [60] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ) always clobbers reg byte a +Statement [61] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ) always clobbers reg byte a +Statement [62] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ) always clobbers reg byte a +Statement [64] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [65] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) always clobbers reg byte a +Statement [66] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) always clobbers reg byte a +Statement [67] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) always clobbers reg byte a +Statement [68] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) always clobbers reg byte a +Statement [70] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) always clobbers reg byte a +Statement [71] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) always clobbers reg byte a +Statement [73] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] +Statement [74] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) always clobbers reg byte a +Statement [76] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) always clobbers reg byte a +Statement [77] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) always clobbers reg byte a +Statement [78] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) always clobbers reg byte a +Statement [80] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#2 ] ) always clobbers reg byte a +Statement [81] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16s::resultu#0 ] ) always clobbers reg byte a +Statement [83] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16s::return#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#1 ] ) always clobbers reg byte a +Statement [86] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16s::return#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#7 ] ) always clobbers reg byte a +Statement [87] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) always clobbers reg byte a +Statement [88] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) always clobbers reg byte a +Statement [89] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) always clobbers reg byte a +Statement [90] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) always clobbers reg byte a +Statement [91] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) always clobbers reg byte a +Statement [95] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ divr16u::i#2 divr16u::i#1 ] +Statement [96] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a +Statement [98] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [102] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [104] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [112] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:23 [ screen_fill::y#4 screen_fill::y#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:23 [ screen_fill::y#4 screen_fill::y#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ screen_fill::x#2 screen_fill::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:26 [ screen_fill::x#2 screen_fill::x#1 ] +Statement [119] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) always clobbers reg byte a +Statement [120] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a +Statement [123] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:27 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:27 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:30 [ bitmap_clear::x#2 bitmap_clear::x#1 ] +Removing always clobbered register reg byte y as potential for zp ZP_BYTE:30 [ bitmap_clear::x#2 bitmap_clear::x#1 ] +Statement [139] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ bitmap_init::y#2 bitmap_init::y#1 ] +Statement [145] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a +Statement [147] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Statement [5] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [7] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [8] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [10] *((const byte*) CIA2_PORT_A#0) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [12] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ) always clobbers reg byte a -Statement [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ) always clobbers reg byte a +Statement [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 main::$9 ] ( main:2 [ main::i#2 main::$9 ] ) always clobbers reg byte a +Statement [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 main::$9 bitmap_plot::x#0 ] ) always clobbers reg byte a Statement [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) always clobbers reg byte a -Statement [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 ] ) always clobbers reg byte a -Statement [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) always clobbers reg byte a -Statement [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a -Statement [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a -Statement [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) always clobbers reg byte a reg byte y -Statement [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ) always clobbers reg byte a -Statement [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) always clobbers reg byte a -Statement [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) always clobbers reg byte a -Statement [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) always clobbers reg byte a -Statement [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) always clobbers reg byte a -Statement [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) always clobbers reg byte a -Statement [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) always clobbers reg byte a -Statement [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [48] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) always clobbers reg byte a -Statement [49] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) always clobbers reg byte a -Statement [50] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) always clobbers reg byte a -Statement [51] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) always clobbers reg byte a -Statement [52] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ rem16u#18 rem16s#13 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx1#0 ] ) always clobbers reg byte a -Statement [53] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) always clobbers reg byte a -Statement [55] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [56] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [57] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) always clobbers reg byte a -Statement [58] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) always clobbers reg byte a -Statement [60] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ) always clobbers reg byte a -Statement [61] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ) always clobbers reg byte a -Statement [62] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ) always clobbers reg byte a -Statement [63] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ) always clobbers reg byte a -Statement [65] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a -Statement [66] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) always clobbers reg byte a -Statement [67] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) always clobbers reg byte a -Statement [68] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) always clobbers reg byte a -Statement [69] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) always clobbers reg byte a -Statement [71] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) always clobbers reg byte a -Statement [72] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) always clobbers reg byte a -Statement [74] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) always clobbers reg byte a -Statement [75] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) always clobbers reg byte a -Statement [77] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) always clobbers reg byte a -Statement [78] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) always clobbers reg byte a -Statement [79] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) always clobbers reg byte a -Statement [81] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ) always clobbers reg byte a -Statement [82] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ) always clobbers reg byte a -Statement [84] (signed word) rem16s#2 ← - (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ) always clobbers reg byte a -Statement [85] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 rem16s#2 divr16s::return#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#2 divr16s::return#1 ] ) always clobbers reg byte a -Statement [88] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 divr16s::return#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 ] ) always clobbers reg byte a -Statement [89] (signed word~) rem16s#57 ← (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::return#7 rem16s#57 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 rem16s#57 ] ) always clobbers reg byte a -Statement [90] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) always clobbers reg byte a -Statement [91] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) always clobbers reg byte a -Statement [92] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) always clobbers reg byte a -Statement [93] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) always clobbers reg byte a -Statement [94] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) always clobbers reg byte a -Statement [98] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a -Statement [99] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a -Statement [101] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a -Statement [105] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a -Statement [107] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a -Statement [115] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) always clobbers reg byte a reg byte y -Statement [122] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) always clobbers reg byte a -Statement [123] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a -Statement [126] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y -Statement [142] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) always clobbers reg byte a -Statement [148] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a -Statement [150] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a +Statement [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 ] ) always clobbers reg byte a +Statement [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) always clobbers reg byte a +Statement [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) always clobbers reg byte a +Statement [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) always clobbers reg byte a +Statement [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) always clobbers reg byte a reg byte y +Statement [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) always clobbers reg byte a +Statement [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) always clobbers reg byte a +Statement [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) always clobbers reg byte a +Statement [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) always clobbers reg byte a +Statement [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) always clobbers reg byte a +Statement [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) always clobbers reg byte a +Statement [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) always clobbers reg byte a +Statement [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [47] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) always clobbers reg byte a +Statement [48] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) always clobbers reg byte a +Statement [49] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) always clobbers reg byte a +Statement [50] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) always clobbers reg byte a +Statement [51] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx1#0 ] ) always clobbers reg byte a +Statement [52] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ ] ( main:2::point_init:20 [ main::i#2 ] ) always clobbers reg byte a +Statement [54] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [55] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [56] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) always clobbers reg byte a +Statement [57] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) always clobbers reg byte a +Statement [59] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ) always clobbers reg byte a +Statement [60] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ) always clobbers reg byte a +Statement [61] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ) always clobbers reg byte a +Statement [62] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ) always clobbers reg byte a +Statement [64] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) always clobbers reg byte a +Statement [65] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) always clobbers reg byte a +Statement [66] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) always clobbers reg byte a +Statement [67] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) always clobbers reg byte a +Statement [68] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) always clobbers reg byte a +Statement [70] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) always clobbers reg byte a +Statement [71] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) always clobbers reg byte a +Statement [73] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) always clobbers reg byte a +Statement [74] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) always clobbers reg byte a +Statement [76] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) always clobbers reg byte a +Statement [77] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) always clobbers reg byte a +Statement [78] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) always clobbers reg byte a +Statement [80] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#2 ] ) always clobbers reg byte a +Statement [81] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16s::resultu#0 ] ) always clobbers reg byte a +Statement [83] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16s::return#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#1 ] ) always clobbers reg byte a +Statement [86] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16s::return#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#7 ] ) always clobbers reg byte a +Statement [87] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) always clobbers reg byte a +Statement [88] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) always clobbers reg byte a +Statement [89] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) always clobbers reg byte a +Statement [90] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) always clobbers reg byte a +Statement [91] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) always clobbers reg byte a +Statement [95] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) always clobbers reg byte a +Statement [96] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) always clobbers reg byte a +Statement [98] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) always clobbers reg byte a +Statement [102] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) always clobbers reg byte a +Statement [104] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) always clobbers reg byte a +Statement [112] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) always clobbers reg byte a reg byte y +Statement [119] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) always clobbers reg byte a +Statement [120] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) always clobbers reg byte a +Statement [123] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) always clobbers reg byte a reg byte y +Statement [139] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) always clobbers reg byte a +Statement [145] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) always clobbers reg byte a +Statement [147] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , -Potential registers zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 ] : zp ZP_WORD:3 , -Potential registers zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] : zp ZP_WORD:5 , -Potential registers zp ZP_WORD:7 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] : zp ZP_WORD:7 , -Potential registers zp ZP_WORD:9 [ divr16s::dividendu#3 ] : zp ZP_WORD:9 , -Potential registers zp ZP_WORD:11 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] : zp ZP_WORD:11 , -Potential registers zp ZP_WORD:13 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] : zp ZP_WORD:13 , -Potential registers zp ZP_BYTE:15 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] : zp ZP_BYTE:15 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:16 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] : zp ZP_WORD:16 , -Potential registers zp ZP_WORD:18 [ divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:18 , -Potential registers zp ZP_WORD:20 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] : zp ZP_WORD:20 , -Potential registers zp ZP_WORD:22 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:22 , -Potential registers zp ZP_BYTE:24 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:24 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:25 [ screen_fill::y#4 screen_fill::y#1 ] : zp ZP_BYTE:25 , reg byte x , -Potential registers zp ZP_WORD:26 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] : zp ZP_WORD:26 , -Potential registers zp ZP_BYTE:28 [ screen_fill::x#2 screen_fill::x#1 ] : zp ZP_BYTE:28 , reg byte x , -Potential registers zp ZP_BYTE:29 [ bitmap_clear::y#4 bitmap_clear::y#1 ] : zp ZP_BYTE:29 , reg byte x , -Potential registers zp ZP_WORD:30 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] : zp ZP_WORD:30 , -Potential registers zp ZP_BYTE:32 [ bitmap_clear::x#2 bitmap_clear::x#1 ] : zp ZP_BYTE:32 , reg byte x , -Potential registers zp ZP_BYTE:33 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp ZP_BYTE:33 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:34 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:35 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp ZP_BYTE:35 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp ZP_WORD:36 , -Potential registers zp ZP_BYTE:38 [ point_init::point_idx#0 ] : zp ZP_BYTE:38 , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:39 [ main::$9 ] : zp ZP_BYTE:39 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:40 [ bitmap_plot::x#0 ] : zp ZP_WORD:40 , -Potential registers zp ZP_BYTE:42 [ bitmap_plot::y#0 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:43 [ bitmap_plot::$3 ] : zp ZP_WORD:43 , -Potential registers zp ZP_WORD:45 [ bitmap_plot::$1 ] : zp ZP_WORD:45 , -Potential registers zp ZP_WORD:47 [ bitmap_plot::plotter#1 ] : zp ZP_WORD:47 , -Potential registers zp ZP_BYTE:49 [ bitmap_plot::$2 ] : zp ZP_BYTE:49 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:50 [ point_init::point_idx1#0 ] : zp ZP_BYTE:50 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:51 [ point_init::x_diff#1 ] : zp ZP_WORD:51 , -Potential registers zp ZP_WORD:53 [ point_init::$4 ] : zp ZP_WORD:53 , -Potential registers zp ZP_WORD:55 [ point_init::$5 ] : zp ZP_WORD:55 , -Potential registers zp ZP_WORD:57 [ point_init::y_diff#0 ] : zp ZP_WORD:57 , -Potential registers zp ZP_WORD:59 [ point_init::$16 ] : zp ZP_WORD:59 , -Potential registers zp ZP_WORD:61 [ point_init::$17 ] : zp ZP_WORD:61 , -Potential registers zp ZP_WORD:63 [ point_init::$18 ] : zp ZP_WORD:63 , -Potential registers zp ZP_WORD:65 [ divr16s::divisor#0 ] : zp ZP_WORD:65 , -Potential registers zp ZP_WORD:67 [ divr16s::rem#0 ] : zp ZP_WORD:67 , -Potential registers zp ZP_WORD:69 [ divr16s::return#3 ] : zp ZP_WORD:69 , -Potential registers zp ZP_WORD:71 [ point_init::x_stepf#0 ] : zp ZP_WORD:71 , -Potential registers zp ZP_BYTE:73 [ point_init::$13 ] : zp ZP_BYTE:73 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:74 [ point_init::$14 ] : zp ZP_BYTE:74 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:75 [ point_init::abs16s2_$2#0 ] : zp ZP_WORD:75 , -Potential registers zp ZP_WORD:77 [ point_init::abs16s1_$2#0 ] : zp ZP_WORD:77 , -Potential registers zp ZP_WORD:79 [ divr16u::divisor#0 ] : zp ZP_WORD:79 , -Potential registers zp ZP_WORD:81 [ divr16u::return#2 ] : zp ZP_WORD:81 , -Potential registers zp ZP_WORD:83 [ divr16s::resultu#0 ] : zp ZP_WORD:83 , -Potential registers zp ZP_WORD:85 [ divr16s::$11 ] : zp ZP_WORD:85 , -Potential registers zp ZP_WORD:87 [ divr16s::$7 ] : zp ZP_WORD:87 , -Potential registers zp ZP_BYTE:89 [ divr16u::$1 ] : zp ZP_BYTE:89 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:90 [ divr16u::$2 ] : zp ZP_BYTE:90 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:91 [ bitmap_clear::$3 ] : zp ZP_WORD:91 , -Potential registers zp ZP_BYTE:93 [ bitmap_init::$3 ] : zp ZP_BYTE:93 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:94 [ bitmap_init::$4 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y , reg byte alu , -Potential registers zp ZP_BYTE:95 [ bitmap_init::$5 ] : zp ZP_BYTE:95 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:96 [ bitmap_init::$6 ] : zp ZP_BYTE:96 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:97 [ bitmap_init::$7 ] : zp ZP_BYTE:97 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] : zp ZP_WORD:3 , +Potential registers zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] : zp ZP_WORD:5 , +Potential registers zp ZP_WORD:7 [ divr16s::dividendu#3 ] : zp ZP_WORD:7 , +Potential registers zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] : zp ZP_WORD:9 , +Potential registers zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] : zp ZP_WORD:11 , +Potential registers zp ZP_BYTE:13 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] : zp ZP_BYTE:13 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:14 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] : zp ZP_WORD:14 , +Potential registers zp ZP_WORD:16 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:16 , +Potential registers zp ZP_WORD:18 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] : zp ZP_WORD:18 , +Potential registers zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:20 , +Potential registers zp ZP_BYTE:22 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:22 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:23 [ screen_fill::y#4 screen_fill::y#1 ] : zp ZP_BYTE:23 , reg byte x , +Potential registers zp ZP_WORD:24 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] : zp ZP_WORD:24 , +Potential registers zp ZP_BYTE:26 [ screen_fill::x#2 screen_fill::x#1 ] : zp ZP_BYTE:26 , reg byte x , +Potential registers zp ZP_BYTE:27 [ bitmap_clear::y#4 bitmap_clear::y#1 ] : zp ZP_BYTE:27 , reg byte x , +Potential registers zp ZP_WORD:28 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] : zp ZP_WORD:28 , +Potential registers zp ZP_BYTE:30 [ bitmap_clear::x#2 bitmap_clear::x#1 ] : zp ZP_BYTE:30 , reg byte x , +Potential registers zp ZP_BYTE:31 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:32 [ bitmap_init::x#2 bitmap_init::x#1 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:33 [ bitmap_init::y#2 bitmap_init::y#1 ] : zp ZP_BYTE:33 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:34 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] : zp ZP_WORD:34 , +Potential registers zp ZP_BYTE:36 [ point_init::point_idx#0 ] : zp ZP_BYTE:36 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:37 [ main::$9 ] : zp ZP_BYTE:37 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:38 [ bitmap_plot::x#0 ] : zp ZP_WORD:38 , +Potential registers zp ZP_BYTE:40 [ bitmap_plot::y#0 ] : zp ZP_BYTE:40 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:41 [ bitmap_plot::$3 ] : zp ZP_WORD:41 , +Potential registers zp ZP_WORD:43 [ bitmap_plot::$1 ] : zp ZP_WORD:43 , +Potential registers zp ZP_WORD:45 [ bitmap_plot::plotter#1 ] : zp ZP_WORD:45 , +Potential registers zp ZP_BYTE:47 [ bitmap_plot::$2 ] : zp ZP_BYTE:47 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:48 [ point_init::point_idx1#0 ] : zp ZP_BYTE:48 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:49 [ point_init::x_diff#1 ] : zp ZP_WORD:49 , +Potential registers zp ZP_WORD:51 [ point_init::$4 ] : zp ZP_WORD:51 , +Potential registers zp ZP_WORD:53 [ point_init::$5 ] : zp ZP_WORD:53 , +Potential registers zp ZP_WORD:55 [ point_init::y_diff#0 ] : zp ZP_WORD:55 , +Potential registers zp ZP_WORD:57 [ point_init::$16 ] : zp ZP_WORD:57 , +Potential registers zp ZP_WORD:59 [ point_init::$17 ] : zp ZP_WORD:59 , +Potential registers zp ZP_WORD:61 [ point_init::$18 ] : zp ZP_WORD:61 , +Potential registers zp ZP_WORD:63 [ divr16s::divisor#0 ] : zp ZP_WORD:63 , +Potential registers zp ZP_WORD:65 [ divr16s::rem#0 ] : zp ZP_WORD:65 , +Potential registers zp ZP_WORD:67 [ divr16s::return#3 ] : zp ZP_WORD:67 , +Potential registers zp ZP_WORD:69 [ point_init::x_stepf#0 ] : zp ZP_WORD:69 , +Potential registers zp ZP_BYTE:71 [ point_init::$13 ] : zp ZP_BYTE:71 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:72 [ point_init::$14 ] : zp ZP_BYTE:72 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:73 [ point_init::abs16s2_$2#0 ] : zp ZP_WORD:73 , +Potential registers zp ZP_WORD:75 [ point_init::abs16s1_$2#0 ] : zp ZP_WORD:75 , +Potential registers zp ZP_WORD:77 [ divr16u::divisor#0 ] : zp ZP_WORD:77 , +Potential registers zp ZP_WORD:79 [ divr16u::return#2 ] : zp ZP_WORD:79 , +Potential registers zp ZP_WORD:81 [ divr16s::resultu#0 ] : zp ZP_WORD:81 , +Potential registers zp ZP_WORD:83 [ divr16s::$11 ] : zp ZP_WORD:83 , +Potential registers zp ZP_WORD:85 [ divr16s::$7 ] : zp ZP_WORD:85 , +Potential registers zp ZP_BYTE:87 [ divr16u::$1 ] : zp ZP_BYTE:87 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:88 [ divr16u::$2 ] : zp ZP_BYTE:88 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_WORD:89 [ bitmap_clear::$3 ] : zp ZP_WORD:89 , +Potential registers zp ZP_BYTE:91 [ bitmap_init::$3 ] : zp ZP_BYTE:91 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:92 [ bitmap_init::$4 ] : zp ZP_BYTE:92 , reg byte a , reg byte x , reg byte y , reg byte alu , +Potential registers zp ZP_BYTE:93 [ bitmap_init::$5 ] : zp ZP_BYTE:93 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:94 [ bitmap_init::$6 ] : zp ZP_BYTE:94 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:95 [ bitmap_init::$7 ] : zp ZP_BYTE:95 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [divr16u] 803.72: zp ZP_WORD:18 [ divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 338.75: zp ZP_WORD:22 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 202: zp ZP_BYTE:89 [ divr16u::$1 ] 202: zp ZP_BYTE:90 [ divr16u::$2 ] 167.04: zp ZP_BYTE:24 [ divr16u::i#2 divr16u::i#1 ] 69.82: zp ZP_WORD:20 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] 11.33: zp ZP_WORD:79 [ divr16u::divisor#0 ] 4: zp ZP_WORD:81 [ divr16u::return#2 ] -Uplift Scope [bitmap_clear] 227.6: zp ZP_WORD:30 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] 218.83: zp ZP_BYTE:32 [ bitmap_clear::x#2 bitmap_clear::x#1 ] 20.17: zp ZP_BYTE:29 [ bitmap_clear::y#4 bitmap_clear::y#1 ] 2: zp ZP_WORD:91 [ bitmap_clear::$3 ] -Uplift Scope [screen_fill] 221.6: zp ZP_WORD:26 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] 218.83: zp ZP_BYTE:28 [ screen_fill::x#2 screen_fill::x#1 ] 20.17: zp ZP_BYTE:25 [ screen_fill::y#4 screen_fill::y#1 ] -Uplift Scope [bitmap_init] 39.11: zp ZP_WORD:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:33 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22.5: zp ZP_BYTE:35 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:34 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:94 [ bitmap_init::$4 ] 22: zp ZP_BYTE:95 [ bitmap_init::$5 ] 22: zp ZP_BYTE:96 [ bitmap_init::$6 ] 22: zp ZP_BYTE:97 [ bitmap_init::$7 ] 11: zp ZP_BYTE:93 [ bitmap_init::$3 ] -Uplift Scope [point_init] 14: zp ZP_WORD:7 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] 9: zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] 4: zp ZP_WORD:55 [ point_init::$5 ] 4: zp ZP_WORD:59 [ point_init::$16 ] 4: zp ZP_WORD:61 [ point_init::$17 ] 4: zp ZP_WORD:63 [ point_init::$18 ] 4: zp ZP_WORD:71 [ point_init::x_stepf#0 ] 4: zp ZP_BYTE:73 [ point_init::$13 ] 2: zp ZP_WORD:53 [ point_init::$4 ] 2: zp ZP_BYTE:74 [ point_init::$14 ] 2: zp ZP_WORD:75 [ point_init::abs16s2_$2#0 ] 2: zp ZP_WORD:77 [ point_init::abs16s1_$2#0 ] 0.7: zp ZP_BYTE:38 [ point_init::point_idx#0 ] 0.56: zp ZP_WORD:51 [ point_init::x_diff#1 ] 0.5: zp ZP_WORD:57 [ point_init::y_diff#0 ] 0.36: zp ZP_BYTE:50 [ point_init::point_idx1#0 ] -Uplift Scope [divr16s] 11: zp ZP_WORD:13 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] 8.67: zp ZP_WORD:11 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] 8: zp ZP_WORD:16 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] 4: zp ZP_WORD:69 [ divr16s::return#3 ] 3.86: zp ZP_BYTE:15 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] 2: zp ZP_WORD:67 [ divr16s::rem#0 ] 2: zp ZP_WORD:87 [ divr16s::$7 ] 1: zp ZP_WORD:85 [ divr16s::$11 ] 0.67: zp ZP_WORD:65 [ divr16s::divisor#0 ] 0.67: zp ZP_WORD:83 [ divr16s::resultu#0 ] 0.29: zp ZP_WORD:9 [ divr16s::dividendu#3 ] -Uplift Scope [main] 24.36: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 11: zp ZP_BYTE:39 [ main::$9 ] -Uplift Scope [bitmap_plot] 15: zp ZP_BYTE:42 [ bitmap_plot::y#0 ] 4: zp ZP_WORD:45 [ bitmap_plot::$1 ] 4: zp ZP_BYTE:49 [ bitmap_plot::$2 ] 3: zp ZP_WORD:40 [ bitmap_plot::x#0 ] 3: zp ZP_WORD:47 [ bitmap_plot::plotter#1 ] 1: zp ZP_WORD:43 [ bitmap_plot::$3 ] -Uplift Scope [] 8.47: zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 ] +Uplift Scope [divr16u] 887.75: zp ZP_WORD:16 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 338.75: zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 202: zp ZP_BYTE:87 [ divr16u::$1 ] 202: zp ZP_BYTE:88 [ divr16u::$2 ] 167.04: zp ZP_BYTE:22 [ divr16u::i#2 divr16u::i#1 ] 69.82: zp ZP_WORD:18 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] 11.33: zp ZP_WORD:77 [ divr16u::divisor#0 ] 4: zp ZP_WORD:79 [ divr16u::return#2 ] +Uplift Scope [bitmap_clear] 227.6: zp ZP_WORD:28 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] 218.83: zp ZP_BYTE:30 [ bitmap_clear::x#2 bitmap_clear::x#1 ] 20.17: zp ZP_BYTE:27 [ bitmap_clear::y#4 bitmap_clear::y#1 ] 2: zp ZP_WORD:89 [ bitmap_clear::$3 ] +Uplift Scope [screen_fill] 221.6: zp ZP_WORD:24 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] 218.83: zp ZP_BYTE:26 [ screen_fill::x#2 screen_fill::x#1 ] 20.17: zp ZP_BYTE:23 [ screen_fill::y#4 screen_fill::y#1 ] +Uplift Scope [bitmap_init] 39.11: zp ZP_WORD:34 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 34.83: zp ZP_BYTE:31 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 22.5: zp ZP_BYTE:33 [ bitmap_init::y#2 bitmap_init::y#1 ] 22: zp ZP_BYTE:32 [ bitmap_init::x#2 bitmap_init::x#1 ] 22: zp ZP_BYTE:92 [ bitmap_init::$4 ] 22: zp ZP_BYTE:93 [ bitmap_init::$5 ] 22: zp ZP_BYTE:94 [ bitmap_init::$6 ] 22: zp ZP_BYTE:95 [ bitmap_init::$7 ] 11: zp ZP_BYTE:91 [ bitmap_init::$3 ] +Uplift Scope [point_init] 14: zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] 9: zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] 4: zp ZP_WORD:53 [ point_init::$5 ] 4: zp ZP_WORD:57 [ point_init::$16 ] 4: zp ZP_WORD:59 [ point_init::$17 ] 4: zp ZP_WORD:61 [ point_init::$18 ] 4: zp ZP_WORD:69 [ point_init::x_stepf#0 ] 4: zp ZP_BYTE:71 [ point_init::$13 ] 2: zp ZP_WORD:51 [ point_init::$4 ] 2: zp ZP_BYTE:72 [ point_init::$14 ] 2: zp ZP_WORD:73 [ point_init::abs16s2_$2#0 ] 2: zp ZP_WORD:75 [ point_init::abs16s1_$2#0 ] 0.72: zp ZP_BYTE:36 [ point_init::point_idx#0 ] 0.56: zp ZP_WORD:49 [ point_init::x_diff#1 ] 0.5: zp ZP_WORD:55 [ point_init::y_diff#0 ] 0.38: zp ZP_BYTE:48 [ point_init::point_idx1#0 ] +Uplift Scope [divr16s] 11: zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] 10: zp ZP_WORD:14 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] 8.67: zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] 4: zp ZP_WORD:67 [ divr16s::return#3 ] 3.86: zp ZP_BYTE:13 [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] 2: zp ZP_WORD:65 [ divr16s::rem#0 ] 2: zp ZP_WORD:85 [ divr16s::$7 ] 1: zp ZP_WORD:81 [ divr16s::resultu#0 ] 1: zp ZP_WORD:83 [ divr16s::$11 ] 0.67: zp ZP_WORD:63 [ divr16s::divisor#0 ] 0.29: zp ZP_WORD:7 [ divr16s::dividendu#3 ] +Uplift Scope [main] 24.36: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 11: zp ZP_BYTE:37 [ main::$9 ] +Uplift Scope [bitmap_plot] 15: zp ZP_BYTE:40 [ bitmap_plot::y#0 ] 4: zp ZP_WORD:43 [ bitmap_plot::$1 ] 4: zp ZP_BYTE:47 [ bitmap_plot::$2 ] 3: zp ZP_WORD:38 [ bitmap_plot::x#0 ] 3: zp ZP_WORD:45 [ bitmap_plot::plotter#1 ] 1: zp ZP_WORD:41 [ bitmap_plot::$3 ] +Uplift Scope [] -Uplifting [divr16u] best 29783 combination zp ZP_WORD:18 [ divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:22 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:20 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] zp ZP_WORD:79 [ divr16u::divisor#0 ] zp ZP_WORD:81 [ divr16u::return#2 ] -Uplifting [bitmap_clear] best 28883 combination zp ZP_WORD:30 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:29 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:91 [ bitmap_clear::$3 ] -Uplifting [screen_fill] best 27983 combination zp ZP_WORD:26 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] reg byte x [ screen_fill::x#2 screen_fill::x#1 ] zp ZP_BYTE:25 [ screen_fill::y#4 screen_fill::y#1 ] -Uplifting [bitmap_init] best 27543 combination zp ZP_WORD:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:95 [ bitmap_init::$5 ] zp ZP_BYTE:96 [ bitmap_init::$6 ] zp ZP_BYTE:97 [ bitmap_init::$7 ] zp ZP_BYTE:93 [ bitmap_init::$3 ] +Uplifting [divr16u] best 29549 combination zp ZP_WORD:16 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:18 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] zp ZP_WORD:77 [ divr16u::divisor#0 ] zp ZP_WORD:79 [ divr16u::return#2 ] +Uplifting [bitmap_clear] best 28649 combination zp ZP_WORD:28 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp ZP_BYTE:27 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp ZP_WORD:89 [ bitmap_clear::$3 ] +Uplifting [screen_fill] best 27749 combination zp ZP_WORD:24 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] reg byte x [ screen_fill::x#2 screen_fill::x#1 ] zp ZP_BYTE:23 [ screen_fill::y#4 screen_fill::y#1 ] +Uplifting [bitmap_init] best 27309 combination zp ZP_WORD:34 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] reg byte a [ bitmap_init::$4 ] zp ZP_BYTE:93 [ bitmap_init::$5 ] zp ZP_BYTE:94 [ bitmap_init::$6 ] zp ZP_BYTE:95 [ bitmap_init::$7 ] zp ZP_BYTE:91 [ bitmap_init::$3 ] Limited combination testing to 100 combinations of 61440 possible. -Uplifting [point_init] best 27531 combination zp ZP_WORD:7 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] zp ZP_WORD:55 [ point_init::$5 ] zp ZP_WORD:59 [ point_init::$16 ] zp ZP_WORD:61 [ point_init::$17 ] zp ZP_WORD:63 [ point_init::$18 ] zp ZP_WORD:71 [ point_init::x_stepf#0 ] reg byte a [ point_init::$13 ] zp ZP_WORD:53 [ point_init::$4 ] reg byte a [ point_init::$14 ] zp ZP_WORD:75 [ point_init::abs16s2_$2#0 ] zp ZP_WORD:77 [ point_init::abs16s1_$2#0 ] zp ZP_BYTE:38 [ point_init::point_idx#0 ] zp ZP_WORD:51 [ point_init::x_diff#1 ] zp ZP_WORD:57 [ point_init::y_diff#0 ] zp ZP_BYTE:50 [ point_init::point_idx1#0 ] +Uplifting [point_init] best 27297 combination zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] zp ZP_WORD:53 [ point_init::$5 ] zp ZP_WORD:57 [ point_init::$16 ] zp ZP_WORD:59 [ point_init::$17 ] zp ZP_WORD:61 [ point_init::$18 ] zp ZP_WORD:69 [ point_init::x_stepf#0 ] reg byte a [ point_init::$13 ] zp ZP_WORD:51 [ point_init::$4 ] reg byte a [ point_init::$14 ] zp ZP_WORD:73 [ point_init::abs16s2_$2#0 ] zp ZP_WORD:75 [ point_init::abs16s1_$2#0 ] zp ZP_BYTE:36 [ point_init::point_idx#0 ] zp ZP_WORD:49 [ point_init::x_diff#1 ] zp ZP_WORD:55 [ point_init::y_diff#0 ] zp ZP_BYTE:48 [ point_init::point_idx1#0 ] Limited combination testing to 100 combinations of 144 possible. -Uplifting [divr16s] best 27522 combination zp ZP_WORD:13 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] zp ZP_WORD:11 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] zp ZP_WORD:16 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] zp ZP_WORD:69 [ divr16s::return#3 ] reg byte y [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] zp ZP_WORD:67 [ divr16s::rem#0 ] zp ZP_WORD:87 [ divr16s::$7 ] zp ZP_WORD:85 [ divr16s::$11 ] zp ZP_WORD:65 [ divr16s::divisor#0 ] zp ZP_WORD:83 [ divr16s::resultu#0 ] zp ZP_WORD:9 [ divr16s::dividendu#3 ] -Uplifting [main] best 27482 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] reg byte x [ main::$9 ] -Uplifting [bitmap_plot] best 27445 combination reg byte y [ bitmap_plot::y#0 ] zp ZP_WORD:45 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:40 [ bitmap_plot::x#0 ] zp ZP_WORD:47 [ bitmap_plot::plotter#1 ] zp ZP_WORD:43 [ bitmap_plot::$3 ] -Uplifting [] best 27445 combination zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 ] +Uplifting [divr16s] best 27288 combination zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] zp ZP_WORD:14 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] zp ZP_WORD:67 [ divr16s::return#3 ] reg byte y [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] zp ZP_WORD:65 [ divr16s::rem#0 ] zp ZP_WORD:85 [ divr16s::$7 ] zp ZP_WORD:81 [ divr16s::resultu#0 ] zp ZP_WORD:83 [ divr16s::$11 ] zp ZP_WORD:63 [ divr16s::divisor#0 ] zp ZP_WORD:7 [ divr16s::dividendu#3 ] +Uplifting [main] best 27248 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] reg byte x [ main::$9 ] +Uplifting [bitmap_plot] best 27211 combination reg byte y [ bitmap_plot::y#0 ] zp ZP_WORD:43 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp ZP_WORD:38 [ bitmap_plot::x#0 ] zp ZP_WORD:45 [ bitmap_plot::plotter#1 ] zp ZP_WORD:41 [ bitmap_plot::$3 ] +Uplifting [] best 27211 combination Attempting to uplift remaining variables inzp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Uplifting [main] best 27445 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:95 [ bitmap_init::$5 ] -Uplifting [bitmap_init] best 27385 combination reg byte a [ bitmap_init::$5 ] -Attempting to uplift remaining variables inzp ZP_BYTE:96 [ bitmap_init::$6 ] -Uplifting [bitmap_init] best 27325 combination reg byte a [ bitmap_init::$6 ] -Attempting to uplift remaining variables inzp ZP_BYTE:97 [ bitmap_init::$7 ] -Uplifting [bitmap_init] best 27265 combination reg byte a [ bitmap_init::$7 ] -Attempting to uplift remaining variables inzp ZP_BYTE:25 [ screen_fill::y#4 screen_fill::y#1 ] -Uplifting [screen_fill] best 27265 combination zp ZP_BYTE:25 [ screen_fill::y#4 screen_fill::y#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:29 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Uplifting [bitmap_clear] best 27265 combination zp ZP_BYTE:29 [ bitmap_clear::y#4 bitmap_clear::y#1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:93 [ bitmap_init::$3 ] -Uplifting [bitmap_init] best 27265 combination zp ZP_BYTE:93 [ bitmap_init::$3 ] -Attempting to uplift remaining variables inzp ZP_BYTE:38 [ point_init::point_idx#0 ] -Uplifting [point_init] best 27265 combination zp ZP_BYTE:38 [ point_init::point_idx#0 ] -Attempting to uplift remaining variables inzp ZP_BYTE:50 [ point_init::point_idx1#0 ] -Uplifting [point_init] best 27265 combination zp ZP_BYTE:50 [ point_init::point_idx1#0 ] -Coalescing zero page register with common assignment [ zp ZP_WORD:16 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] ] with [ zp ZP_WORD:83 [ divr16s::resultu#0 ] ] - score: 2 -Coalescing zero page register with common assignment [ zp ZP_BYTE:2 [ main::i#2 main::i#1 ] ] with [ zp ZP_BYTE:38 [ point_init::point_idx#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] ] with [ zp ZP_WORD:77 [ point_init::abs16s1_$2#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:7 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] ] with [ zp ZP_WORD:75 [ point_init::abs16s2_$2#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:9 [ divr16s::dividendu#3 ] ] with [ zp ZP_WORD:20 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] ] with [ zp ZP_WORD:18 [ divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:67 [ divr16s::rem#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 ] ] with [ zp ZP_WORD:87 [ divr16s::$7 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] ] with [ zp ZP_WORD:65 [ divr16s::divisor#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 ] ] with [ zp ZP_WORD:79 [ divr16u::divisor#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 ] ] with [ zp ZP_WORD:85 [ divr16s::$11 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:16 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 ] ] with [ zp ZP_WORD:69 [ divr16s::return#3 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:81 [ divr16u::return#2 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:30 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] ] with [ zp ZP_WORD:91 [ bitmap_clear::$3 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:43 [ bitmap_plot::$3 ] ] with [ zp ZP_WORD:47 [ bitmap_plot::plotter#1 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:53 [ point_init::$4 ] ] with [ zp ZP_WORD:57 [ point_init::y_diff#0 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:61 [ point_init::$17 ] ] with [ zp ZP_WORD:63 [ point_init::$18 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:13 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::$11 ] ] with [ zp ZP_WORD:51 [ point_init::x_diff#1 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:16 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 ] ] with [ zp ZP_WORD:22 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] - score: 1 -Coalescing zero page register with common assignment [ zp ZP_WORD:16 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:71 [ point_init::x_stepf#0 ] ] - score: 1 -Coalescing zero page register [ zp ZP_BYTE:2 [ main::i#2 main::i#1 point_init::point_idx#0 ] ] with [ zp ZP_BYTE:25 [ screen_fill::y#4 screen_fill::y#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:2 [ main::i#2 main::i#1 point_init::point_idx#0 screen_fill::y#4 screen_fill::y#1 ] ] with [ zp ZP_BYTE:29 [ bitmap_clear::y#4 bitmap_clear::y#1 ] ] -Coalescing zero page register [ zp ZP_BYTE:2 [ main::i#2 main::i#1 point_init::point_idx#0 screen_fill::y#4 screen_fill::y#1 bitmap_clear::y#4 bitmap_clear::y#1 ] ] with [ zp ZP_BYTE:93 [ bitmap_init::$3 ] ] -Coalescing zero page register [ zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 ] ] with [ zp ZP_WORD:9 [ divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] ] -Coalescing zero page register [ zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] ] with [ zp ZP_WORD:26 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] ] -Coalescing zero page register [ zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] ] with [ zp ZP_WORD:30 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 ] ] -Coalescing zero page register [ zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 ] ] with [ zp ZP_WORD:36 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] -Coalescing zero page register [ zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 ] ] with [ zp ZP_WORD:16 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 ] ] -Coalescing zero page register [ zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 ] ] with [ zp ZP_WORD:40 [ bitmap_plot::x#0 ] ] -Coalescing zero page register [ zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 bitmap_plot::x#0 ] ] with [ zp ZP_WORD:55 [ point_init::$5 ] ] -Coalescing zero page register [ zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 bitmap_plot::x#0 point_init::$5 ] ] with [ zp ZP_WORD:59 [ point_init::$16 ] ] -Coalescing zero page register [ zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 bitmap_plot::x#0 point_init::$5 point_init::$16 ] ] with [ zp ZP_WORD:61 [ point_init::$17 point_init::$18 ] ] -Coalescing zero page register [ zp ZP_WORD:7 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_$2#0 ] ] with [ zp ZP_WORD:43 [ bitmap_plot::$3 bitmap_plot::plotter#1 ] ] -Coalescing zero page register [ zp ZP_WORD:13 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::$11 point_init::x_diff#1 ] ] with [ zp ZP_WORD:45 [ bitmap_plot::$1 ] ] -Allocated (was zp ZP_WORD:11) zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::$7 ] -Allocated (was zp ZP_WORD:13) zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::$11 point_init::x_diff#1 bitmap_plot::$1 ] -Allocated (was zp ZP_BYTE:50) zp ZP_BYTE:13 [ point_init::point_idx1#0 ] -Allocated (was zp ZP_WORD:53) zp ZP_WORD:14 [ point_init::$4 point_init::y_diff#0 ] +Uplifting [main] best 27211 combination zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:93 [ bitmap_init::$5 ] +Uplifting [bitmap_init] best 27151 combination reg byte a [ bitmap_init::$5 ] +Attempting to uplift remaining variables inzp ZP_BYTE:94 [ bitmap_init::$6 ] +Uplifting [bitmap_init] best 27091 combination reg byte a [ bitmap_init::$6 ] +Attempting to uplift remaining variables inzp ZP_BYTE:95 [ bitmap_init::$7 ] +Uplifting [bitmap_init] best 27031 combination reg byte a [ bitmap_init::$7 ] +Attempting to uplift remaining variables inzp ZP_BYTE:23 [ screen_fill::y#4 screen_fill::y#1 ] +Uplifting [screen_fill] best 27031 combination zp ZP_BYTE:23 [ screen_fill::y#4 screen_fill::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:27 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Uplifting [bitmap_clear] best 27031 combination zp ZP_BYTE:27 [ bitmap_clear::y#4 bitmap_clear::y#1 ] +Attempting to uplift remaining variables inzp ZP_BYTE:91 [ bitmap_init::$3 ] +Uplifting [bitmap_init] best 27031 combination zp ZP_BYTE:91 [ bitmap_init::$3 ] +Attempting to uplift remaining variables inzp ZP_BYTE:36 [ point_init::point_idx#0 ] +Uplifting [point_init] best 27031 combination zp ZP_BYTE:36 [ point_init::point_idx#0 ] +Attempting to uplift remaining variables inzp ZP_BYTE:48 [ point_init::point_idx1#0 ] +Uplifting [point_init] best 27031 combination zp ZP_BYTE:48 [ point_init::point_idx1#0 ] +Coalescing zero page register with common assignment [ zp ZP_WORD:14 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 ] ] with [ zp ZP_WORD:81 [ divr16s::resultu#0 ] ] - score: 2 +Coalescing zero page register with common assignment [ zp ZP_BYTE:2 [ main::i#2 main::i#1 ] ] with [ zp ZP_BYTE:36 [ point_init::point_idx#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 ] ] with [ zp ZP_WORD:75 [ point_init::abs16s1_$2#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 ] ] with [ zp ZP_WORD:73 [ point_init::abs16s2_$2#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:7 [ divr16s::dividendu#3 ] ] with [ zp ZP_WORD:18 [ divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 ] ] with [ zp ZP_WORD:16 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:65 [ divr16s::rem#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 ] ] with [ zp ZP_WORD:85 [ divr16s::$7 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 ] ] with [ zp ZP_WORD:63 [ divr16s::divisor#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 ] ] with [ zp ZP_WORD:77 [ divr16u::divisor#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 ] ] with [ zp ZP_WORD:83 [ divr16s::$11 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:14 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 ] ] with [ zp ZP_WORD:67 [ divr16s::return#3 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] ] with [ zp ZP_WORD:79 [ divr16u::return#2 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:28 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] ] with [ zp ZP_WORD:89 [ bitmap_clear::$3 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:41 [ bitmap_plot::$3 ] ] with [ zp ZP_WORD:45 [ bitmap_plot::plotter#1 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:51 [ point_init::$4 ] ] with [ zp ZP_WORD:55 [ point_init::y_diff#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:59 [ point_init::$17 ] ] with [ zp ZP_WORD:61 [ point_init::$18 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::$7 ] ] with [ zp ZP_WORD:51 [ point_init::$4 point_init::y_diff#0 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::$11 ] ] with [ zp ZP_WORD:49 [ point_init::x_diff#1 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:14 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 ] ] with [ zp ZP_WORD:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] - score: 1 +Coalescing zero page register with common assignment [ zp ZP_WORD:14 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:69 [ point_init::x_stepf#0 ] ] - score: 1 +Coalescing zero page register [ zp ZP_BYTE:2 [ main::i#2 main::i#1 point_init::point_idx#0 ] ] with [ zp ZP_BYTE:23 [ screen_fill::y#4 screen_fill::y#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:2 [ main::i#2 main::i#1 point_init::point_idx#0 screen_fill::y#4 screen_fill::y#1 ] ] with [ zp ZP_BYTE:27 [ bitmap_clear::y#4 bitmap_clear::y#1 ] ] +Coalescing zero page register [ zp ZP_BYTE:2 [ main::i#2 main::i#1 point_init::point_idx#0 screen_fill::y#4 screen_fill::y#1 bitmap_clear::y#4 bitmap_clear::y#1 ] ] with [ zp ZP_BYTE:91 [ bitmap_init::$3 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 ] ] with [ zp ZP_WORD:7 [ divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ] ] with [ zp ZP_WORD:24 [ screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 ] ] with [ zp ZP_WORD:28 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 ] ] with [ zp ZP_WORD:34 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#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 ] ] with [ zp ZP_WORD:38 [ bitmap_plot::x#0 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#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 bitmap_plot::x#0 ] ] with [ zp ZP_WORD:53 [ point_init::$5 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#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 bitmap_plot::x#0 point_init::$5 ] ] with [ zp ZP_WORD:57 [ point_init::$16 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#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 bitmap_plot::x#0 point_init::$5 point_init::$16 ] ] with [ zp ZP_WORD:59 [ point_init::$17 point_init::$18 ] ] +Coalescing zero page register [ zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_$2#0 ] ] with [ zp ZP_WORD:14 [ divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 ] ] +Coalescing zero page register [ zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_$2#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 ] ] with [ zp ZP_WORD:41 [ bitmap_plot::$3 bitmap_plot::plotter#1 ] ] +Coalescing zero page register [ zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::$7 point_init::$4 point_init::y_diff#0 ] ] with [ zp ZP_WORD:43 [ bitmap_plot::$1 ] ] +Allocated (was zp ZP_WORD:9) zp ZP_WORD:7 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::$7 point_init::$4 point_init::y_diff#0 bitmap_plot::$1 ] +Allocated (was zp ZP_WORD:11) zp ZP_WORD:9 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::$11 point_init::x_diff#1 ] +Allocated (was zp ZP_BYTE:48) zp ZP_BYTE:11 [ point_init::point_idx1#0 ] ASSEMBLER BEFORE OPTIMIZATION //SEG0 Basic Upstart @@ -6378,8 +5887,6 @@ ASSEMBLER BEFORE OPTIMIZATION .label BITMAP = $a000 .label SCREEN = $8800 .const DELAY = 8 - .label rem16s = 3 - .label rem16u = 9 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @18 [phi:@begin->@18] @@ -6439,7 +5946,7 @@ main: { lda #toD0181_return sta D018 //SEG23 [13] call bitmap_init [ ] ( main:2 [ ] ) - //SEG24 [133] phi from main::@16 to bitmap_init [phi:main::@16->bitmap_init] + //SEG24 [130] phi from main::@16 to bitmap_init [phi:main::@16->bitmap_init] bitmap_init_from_b16: jsr bitmap_init //SEG25 [14] phi from main::@16 to main::@17 [phi:main::@16->main::@17] @@ -6455,99 +5962,87 @@ main: { //SEG29 main::@18 b18: //SEG30 [17] call screen_fill [ ] ( main:2 [ ] ) - //SEG31 [112] phi from main::@18 to screen_fill [phi:main::@18->screen_fill] + //SEG31 [109] phi from main::@18 to screen_fill [phi:main::@18->screen_fill] screen_fill_from_b18: jsr screen_fill //SEG32 [18] phi from main::@18 to main::@1 [phi:main::@18->main::@1] b1_from_b18: - //SEG33 [18] phi (signed word) rem16s#15 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#0] -- vwsz1=vbuc1 - lda #<0 - sta rem16s - lda #>0 - sta rem16s+1 - //SEG34 [18] phi (word) rem16u#21 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#1] -- vwuz1=vbuc1 - lda #<0 - sta rem16u - lda #>0 - sta rem16u+1 - //SEG35 [18] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#2] -- vbuz1=vbuc1 + //SEG33 [18] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#0] -- vbuz1=vbuc1 lda #0 sta i jmp b1 - //SEG36 [18] phi from main::@21 to main::@1 [phi:main::@21->main::@1] + //SEG34 [18] phi from main::@21 to main::@1 [phi:main::@21->main::@1] b1_from_b21: - //SEG37 [18] phi (signed word) rem16s#15 = (signed word) rem16s#13 [phi:main::@21->main::@1#0] -- register_copy - //SEG38 [18] phi (word) rem16u#21 = (word) rem16u#18 [phi:main::@21->main::@1#1] -- register_copy - //SEG39 [18] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@21->main::@1#2] -- register_copy + //SEG35 [18] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@21->main::@1#0] -- register_copy jmp b1 - //SEG40 main::@1 + //SEG36 main::@1 b1: - //SEG41 [19] (byte) point_init::point_idx#0 ← (byte) main::i#2 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 ] ( main:2 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 ] ) + //SEG37 [19] (byte) point_init::point_idx#0 ← (byte) main::i#2 [ main::i#2 point_init::point_idx#0 ] ( main:2 [ main::i#2 point_init::point_idx#0 ] ) // (byte) point_init::point_idx#0 = (byte) main::i#2 // register copy zp ZP_BYTE:2 - //SEG42 [20] call point_init [ main::i#2 rem16u#18 rem16s#13 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG38 [20] call point_init [ main::i#2 ] ( main:2 [ main::i#2 ] ) jsr point_init jmp b20 - //SEG43 main::@20 + //SEG39 main::@20 b20: - //SEG44 [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ) -- vbuxx=vbuz1_ror_1 + //SEG40 [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 main::$9 ] ( main:2 [ main::i#2 main::$9 ] ) -- vbuxx=vbuz1_ror_1 lda i lsr tax - //SEG45 [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ) -- vwuz1=pwuc1_derefidx_vbuz2 + //SEG41 [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 main::$9 bitmap_plot::x#0 ] ) -- vwuz1=pwuc1_derefidx_vbuz2 ldy i lda x_start,y sta bitmap_plot.x lda x_start+1,y sta bitmap_plot.x+1 - //SEG46 [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ) -- vbuyy=pbuc1_derefidx_vbuxx + //SEG42 [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ) -- vbuyy=pbuc1_derefidx_vbuxx ldy y_start,x - //SEG47 [24] call bitmap_plot [ main::i#2 rem16u#18 rem16s#13 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG43 [24] call bitmap_plot [ main::i#2 ] ( main:2 [ main::i#2 ] ) jsr bitmap_plot jmp b21 - //SEG48 main::@21 + //SEG44 main::@21 b21: - //SEG49 [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) -- vbuz1=vbuz1_plus_2 + //SEG45 [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=vbuz1_plus_2 lda i clc adc #2 sta i - //SEG50 [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG46 [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda i cmp #8 bne b1_from_b21 jmp b5 - //SEG51 main::@5 + //SEG47 main::@5 b5: - //SEG52 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 + //SEG48 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 lda RASTER cmp #$ff bne b5 jmp b7 - //SEG53 main::@7 + //SEG49 main::@7 b7: - //SEG54 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + //SEG50 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL jmp b5 } -//SEG55 bitmap_plot +//SEG51 bitmap_plot bitmap_plot: { - .label _1 = $b - .label x = 5 - .label plotter = 7 - .label _3 = 7 - //SEG56 [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 ] ) -- vwuz1=pbuc1_derefidx_vbuyy_word_pbuc2_derefidx_vbuyy + .label _1 = 7 + .label x = 3 + .label plotter = 5 + .label _3 = 5 + //SEG52 [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 ] ) -- vwuz1=pbuc1_derefidx_vbuyy_word_pbuc2_derefidx_vbuyy lda bitmap_plot_yhi,y sta _3+1 lda bitmap_plot_ylo,y sta _3 - //SEG57 [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) -- vwuz1=vwuz2_band_vwuc1 + //SEG53 [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) -- vwuz1=vwuz2_band_vwuc1 lda x and #<$fff8 sta _1 lda x+1 and #>$fff8 sta _1+1 - //SEG58 [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) -- pbuz1=pbuz1_plus_vwuz2 + //SEG54 [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) -- pbuz1=pbuz1_plus_vwuz2 lda plotter clc adc _1 @@ -6555,9 +6050,9 @@ bitmap_plot: { lda plotter+1 adc _1+1 sta plotter+1 - //SEG59 [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) -- vbuaa=_lo_vwuz1 + //SEG55 [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) -- vbuaa=_lo_vwuz1 lda x - //SEG60 [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) -- _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuaa + //SEG56 [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) -- _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuaa tay lda bitmap_plot_bit,y ldy #0 @@ -6565,32 +6060,32 @@ bitmap_plot: { ldy #0 sta (plotter),y jmp breturn - //SEG61 bitmap_plot::@return + //SEG57 bitmap_plot::@return breturn: - //SEG62 [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG58 [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) rts } -//SEG63 point_init +//SEG59 point_init point_init: { - .label _4 = $e - .label _5 = 5 - .label _16 = 5 - .label _17 = 5 - .label _18 = 5 + .label _4 = 7 + .label _5 = 3 + .label _16 = 3 + .label _17 = 3 + .label _18 = 3 .label point_idx = 2 - .label point_idx1 = $d - .label y_diff = $e - .label abs16s1__2 = 5 - .label abs16s1_return = 5 - .label abs16s2__2 = 7 - .label abs16s2_return = 7 + .label point_idx1 = $b + .label y_diff = 7 + .label abs16s1__2 = 3 + .label abs16s1_return = 3 + .label abs16s2__2 = 5 + .label abs16s2_return = 5 .label x_stepf = 5 - .label x_diff = $b - //SEG64 [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- vbuz1=vbuz2_ror_1 + .label x_diff = 9 + //SEG60 [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- vbuz1=vbuz2_ror_1 lda point_idx lsr sta point_idx1 - //SEG65 [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) -- vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 + //SEG61 [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) -- vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 ldy point_idx sec lda x_end,y @@ -6599,19 +6094,19 @@ point_init: { lda x_end+1,y sbc x_start+1,y sta x_diff+1 - //SEG66 [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 + //SEG62 [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 ldy point_idx1 lda y_end,y sta _4 lda #0 sta _4+1 - //SEG67 [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 + //SEG63 [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 ldy point_idx1 lda y_start,y sta _5 lda #0 sta _5+1 - //SEG68 [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1=vwsz1_minus_vwsz2 + //SEG64 [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1=vwsz1_minus_vwsz2 lda y_diff sec sbc _5 @@ -6620,51 +6115,51 @@ point_init: { sbc _5+1 sta y_diff+1 jmp abs16s1 - //SEG69 point_init::abs16s1 + //SEG65 point_init::abs16s1 abs16s1: - //SEG70 [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 + //SEG66 [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 lda x_diff+1 bmi abs16s1_b1 jmp b12 - //SEG71 point_init::@12 + //SEG67 point_init::@12 b12: - //SEG72 [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) -- vwuz1=vwuz2 + //SEG68 [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) -- vwuz1=vwuz2 lda x_diff sta abs16s1_return lda x_diff+1 sta abs16s1_return+1 - //SEG73 [42] phi from point_init::@12 point_init::abs16s1_@1 to point_init::abs16s1_@return [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return] + //SEG69 [42] phi from point_init::@12 point_init::abs16s1_@1 to point_init::abs16s1_@return [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return] abs16s1_breturn_from_b12: abs16s1_breturn_from_abs16s1_b1: - //SEG74 [42] phi (word) point_init::abs16s1_return#2 = (word~) point_init::abs16s1_return#6 [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return#0] -- register_copy + //SEG70 [42] phi (word) point_init::abs16s1_return#2 = (word~) point_init::abs16s1_return#6 [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return#0] -- register_copy jmp abs16s1_breturn - //SEG75 point_init::abs16s1_@return + //SEG71 point_init::abs16s1_@return abs16s1_breturn: jmp abs16s2 - //SEG76 point_init::abs16s2 + //SEG72 point_init::abs16s2 abs16s2: - //SEG77 [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) -- vwsz1_lt_0_then_la1 + //SEG73 [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) -- vwsz1_lt_0_then_la1 lda y_diff+1 bmi abs16s2_b1 jmp b13 - //SEG78 point_init::@13 + //SEG74 point_init::@13 b13: - //SEG79 [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) -- vwuz1=vwuz2 + //SEG75 [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) -- vwuz1=vwuz2 lda y_diff sta abs16s2_return lda y_diff+1 sta abs16s2_return+1 - //SEG80 [45] phi from point_init::@13 point_init::abs16s2_@1 to point_init::abs16s2_@return [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return] + //SEG76 [45] phi from point_init::@13 point_init::abs16s2_@1 to point_init::abs16s2_@return [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return] abs16s2_breturn_from_b13: abs16s2_breturn_from_abs16s2_b1: - //SEG81 [45] phi (word) point_init::abs16s2_return#2 = (word~) point_init::abs16s2_return#6 [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return#0] -- register_copy + //SEG77 [45] phi (word) point_init::abs16s2_return#2 = (word~) point_init::abs16s2_return#6 [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return#0] -- register_copy jmp abs16s2_breturn - //SEG82 point_init::abs16s2_@return + //SEG78 point_init::abs16s2_@return abs16s2_breturn: jmp b10 - //SEG83 point_init::@10 + //SEG79 point_init::@10 b10: - //SEG84 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwuz1_gt_vwuz2_then_la1 + //SEG80 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwuz1_gt_vwuz2_then_la1 lda abs16s1_return cmp abs16s2_return lda abs16s1_return+1 @@ -6673,15 +6168,10 @@ point_init: { eor #$80 !: bpl b1 - //SEG85 [47] phi from point_init::@10 point_init::@11 to point_init::@2 [phi:point_init::@10/point_init::@11->point_init::@2] - b2_from_b10: - b2_from_b11: - //SEG86 [47] phi (signed word) rem16s#13 = (signed word) rem16s#15 [phi:point_init::@10/point_init::@11->point_init::@2#0] -- register_copy - //SEG87 [47] phi (word) rem16u#18 = (word) rem16u#21 [phi:point_init::@10/point_init::@11->point_init::@2#1] -- register_copy jmp b2 - //SEG88 point_init::@2 + //SEG81 point_init::@2 b2: - //SEG89 [48] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) -- vwuz1=pwuc1_derefidx_vbuz2_rol_4 + //SEG82 [47] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) -- vwuz1=pwuc1_derefidx_vbuz2_rol_4 ldy point_idx lda x_start,y sta _16 @@ -6695,19 +6185,19 @@ point_init: { rol _16+1 asl _16 rol _16+1 - //SEG90 [49] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 + //SEG83 [48] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 ldy point_idx lda _16 sta x_cur,y lda _16+1 sta x_cur+1,y - //SEG91 [50] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + //SEG84 [49] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy point_idx1 lda y_start,y sta _17 lda #0 sta _17+1 - //SEG92 [51] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) -- vwuz1=vwuz1_rol_4 + //SEG85 [50] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) -- vwuz1=vwuz1_rol_4 asl _18 rol _18+1 asl _18 @@ -6716,75 +6206,72 @@ point_init: { rol _18+1 asl _18 rol _18+1 - //SEG93 [52] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ rem16u#18 rem16s#13 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 + //SEG86 [51] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 ldy point_idx lda _18 sta y_cur,y lda _18+1 sta y_cur+1,y - //SEG94 [53] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 + //SEG87 [52] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ ] ( main:2::point_init:20 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 ldy point_idx1 lda #DELAY sta delay,y jmp breturn - //SEG95 point_init::@return + //SEG88 point_init::@return breturn: - //SEG96 [54] return [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG89 [53] return [ ] ( main:2::point_init:20 [ main::i#2 ] ) rts - //SEG97 point_init::@1 + //SEG90 point_init::@1 b1: - //SEG98 [55] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 + //SEG91 [54] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 lda x_diff+1 bmi b3 jmp b7 - //SEG99 point_init::@7 + //SEG92 point_init::@7 b7: - //SEG100 [56] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbuc2 + //SEG93 [55] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbuc2 ldy point_idx lda #$10 sta x_add,y jmp b4 - //SEG101 point_init::@4 + //SEG94 point_init::@4 b4: - //SEG102 [57] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) - // (signed word) divr16s::divisor#0 = (signed word) point_init::x_diff#1 // register copy zp ZP_WORD:11 - //SEG103 [58] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1=vwsz2 - lda y_diff - sta divr16s.rem - lda y_diff+1 - sta divr16s.rem+1 - //SEG104 [59] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) - //SEG105 [70] phi from point_init::@4 to divr16s [phi:point_init::@4->divr16s] + //SEG95 [56] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) + // (signed word) divr16s::divisor#0 = (signed word) point_init::x_diff#1 // register copy zp ZP_WORD:9 + //SEG96 [57] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) + // (signed word) divr16s::rem#0 = (signed word) point_init::y_diff#0 // register copy zp ZP_WORD:7 + //SEG97 [58] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) + //SEG98 [69] phi from point_init::@4 to divr16s [phi:point_init::@4->divr16s] divr16s_from_b4: jsr divr16s - //SEG106 [60] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ) + //SEG99 [59] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ) // (signed word) divr16s::return#3 = (signed word) divr16s::return#2 // register copy zp ZP_WORD:5 jmp b11 - //SEG107 point_init::@11 + //SEG100 point_init::@11 b11: - //SEG108 [61] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ) + //SEG101 [60] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ) // (signed word) point_init::x_stepf#0 = (signed word) divr16s::return#3 // register copy zp ZP_WORD:5 - //SEG109 [62] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ) -- vbuaa=_hi_vwsz1 + //SEG102 [61] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ) -- vbuaa=_hi_vwsz1 lda x_stepf+1 - //SEG110 [63] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ) -- vbuaa=vbuaa_ror_4 + //SEG103 [62] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ) -- vbuaa=vbuaa_ror_4 lsr lsr lsr lsr - //SEG111 [64] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ) -- pbsc1_derefidx_vbuz1=vbsaa + //SEG104 [63] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- pbsc1_derefidx_vbuz1=vbsaa ldy point_idx1 sta y_add,y - jmp b2_from_b11 - //SEG112 point_init::@3 + jmp b2 + //SEG105 point_init::@3 b3: - //SEG113 [65] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbsc2 + //SEG106 [64] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbsc2 ldy point_idx lda #-$10 sta x_add,y jmp b4 - //SEG114 point_init::abs16s2_@1 + //SEG107 point_init::abs16s2_@1 abs16s2_b1: - //SEG115 [66] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) -- vwsz1=_neg_vwsz2 + //SEG108 [65] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) -- vwsz1=_neg_vwsz2 sec lda y_diff eor #$ff @@ -6794,12 +6281,12 @@ point_init: { eor #$ff adc #0 sta abs16s2__2+1 - //SEG116 [67] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) - // (word~) point_init::abs16s2_return#5 = (word)(signed word) point_init::abs16s2_$2#0 // register copy zp ZP_WORD:7 + //SEG109 [66] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) + // (word~) point_init::abs16s2_return#5 = (word)(signed word) point_init::abs16s2_$2#0 // register copy zp ZP_WORD:5 jmp abs16s2_breturn_from_abs16s2_b1 - //SEG117 point_init::abs16s1_@1 + //SEG110 point_init::abs16s1_@1 abs16s1_b1: - //SEG118 [68] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) -- vwsz1=_neg_vwsz2 + //SEG111 [67] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) -- vwsz1=_neg_vwsz2 sec lda x_diff eor #$ff @@ -6809,96 +6296,86 @@ point_init: { eor #$ff adc #0 sta abs16s1__2+1 - //SEG119 [69] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) - // (word~) point_init::abs16s1_return#5 = (word)(signed word) point_init::abs16s1_$2#0 // register copy zp ZP_WORD:5 + //SEG112 [68] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) + // (word~) point_init::abs16s1_return#5 = (word)(signed word) point_init::abs16s1_$2#0 // register copy zp ZP_WORD:3 jmp abs16s1_breturn_from_abs16s1_b1 } -//SEG120 divr16s +//SEG113 divr16s divr16s: { .const dividend = 0 - .label _7 = 9 - .label _11 = $b + .label _7 = 7 + .label _11 = 9 .label resultu = 5 .label return = 5 - .label divisor = $b - .label rem = 9 + .label divisor = 9 + .label rem = 7 .label dividendu = 3 - .label divisoru = $b - .label remu = 9 + .label divisoru = 9 + .label remu = 7 jmp b16 - //SEG121 divr16s::@16 + //SEG114 divr16s::@16 b16: - //SEG122 [71] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1_lt_0_then_la1 + //SEG115 [70] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1_lt_0_then_la1 lda rem+1 bmi b1 jmp b17 - //SEG123 divr16s::@17 + //SEG116 divr16s::@17 b17: - //SEG124 [72] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) - // (word~) divr16s::remu#8 = (word)(signed word) divr16s::rem#0 // register copy zp ZP_WORD:9 - //SEG125 [73] phi from divr16s::@17 to divr16s::@2 [phi:divr16s::@17->divr16s::@2] + //SEG117 [71] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) + // (word~) divr16s::remu#8 = (word)(signed word) divr16s::rem#0 // register copy zp ZP_WORD:7 + //SEG118 [72] phi from divr16s::@17 to divr16s::@2 [phi:divr16s::@17->divr16s::@2] b2_from_b17: - //SEG126 [73] phi (word) divr16s::remu#3 = (word~) divr16s::remu#8 [phi:divr16s::@17->divr16s::@2#0] -- register_copy - //SEG127 [73] phi (word) divr16s::dividendu#3 = ((word))(const signed word) divr16s::dividend#0 [phi:divr16s::@17->divr16s::@2#1] -- vwuz1=vbuc1 + //SEG119 [72] phi (word) divr16s::remu#3 = (word~) divr16s::remu#8 [phi:divr16s::@17->divr16s::@2#0] -- register_copy + //SEG120 [72] phi (word) divr16s::dividendu#3 = ((word))(const signed word) divr16s::dividend#0 [phi:divr16s::@17->divr16s::@2#1] -- vwuz1=vbuc1 lda #dividend sta dividendu+1 - //SEG128 [73] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16s::@17->divr16s::@2#2] -- vbuyy=vbuc1 + //SEG121 [72] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16s::@17->divr16s::@2#2] -- vbuyy=vbuc1 ldy #0 jmp b2 - //SEG129 divr16s::@2 + //SEG122 divr16s::@2 b2: - //SEG130 [74] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) -- vwsz1_lt_0_then_la1 + //SEG123 [73] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) -- vwsz1_lt_0_then_la1 lda divisor+1 bmi b3 jmp b18 - //SEG131 divr16s::@18 + //SEG124 divr16s::@18 b18: - //SEG132 [75] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) - // (word~) divr16s::divisoru#5 = (word)(signed word) divr16s::divisor#0 // register copy zp ZP_WORD:11 - //SEG133 [76] phi from divr16s::@18 divr16s::@3 to divr16s::@4 [phi:divr16s::@18/divr16s::@3->divr16s::@4] + //SEG125 [74] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) + // (word~) divr16s::divisoru#5 = (word)(signed word) divr16s::divisor#0 // register copy zp ZP_WORD:9 + //SEG126 [75] phi from divr16s::@18 divr16s::@3 to divr16s::@4 [phi:divr16s::@18/divr16s::@3->divr16s::@4] b4_from_b18: b4_from_b3: - //SEG134 [76] phi (byte) divr16s::neg#4 = (byte) divr16s::neg#3 [phi:divr16s::@18/divr16s::@3->divr16s::@4#0] -- register_copy - //SEG135 [76] phi (word) divr16s::divisoru#3 = (word~) divr16s::divisoru#5 [phi:divr16s::@18/divr16s::@3->divr16s::@4#1] -- register_copy + //SEG127 [75] phi (byte) divr16s::neg#4 = (byte) divr16s::neg#3 [phi:divr16s::@18/divr16s::@3->divr16s::@4#0] -- register_copy + //SEG128 [75] phi (word) divr16s::divisoru#3 = (word~) divr16s::divisoru#5 [phi:divr16s::@18/divr16s::@3->divr16s::@4#1] -- register_copy jmp b4 - //SEG136 divr16s::@4 + //SEG129 divr16s::@4 b4: - //SEG137 [77] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) + //SEG130 [76] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) // (word) divr16u::dividend#1 = (word) divr16s::dividendu#3 // register copy zp ZP_WORD:3 - //SEG138 [78] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) - // (word) divr16u::divisor#0 = (word) divr16s::divisoru#3 // register copy zp ZP_WORD:11 - //SEG139 [79] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) - // (word) divr16u::rem#3 = (word) divr16s::remu#3 // register copy zp ZP_WORD:9 - //SEG140 [80] call divr16u [ divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ) - //SEG141 [95] phi from divr16s::@4 to divr16u [phi:divr16s::@4->divr16u] + //SEG131 [77] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) + // (word) divr16u::divisor#0 = (word) divr16s::divisoru#3 // register copy zp ZP_WORD:9 + //SEG132 [78] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) + // (word) divr16u::rem#3 = (word) divr16s::remu#3 // register copy zp ZP_WORD:7 + //SEG133 [79] call divr16u [ divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) + //SEG134 [92] phi from divr16s::@4 to divr16u [phi:divr16s::@4->divr16u] divr16u_from_b4: jsr divr16u - //SEG142 [81] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ) + //SEG135 [80] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#2 ] ) // (word) divr16u::return#2 = (word) divr16u::return#0 // register copy zp ZP_WORD:5 jmp b15 - //SEG143 divr16s::@15 + //SEG136 divr16s::@15 b15: - //SEG144 [82] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ) + //SEG137 [81] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16s::resultu#0 ] ) // (word) divr16s::resultu#0 = (word) divr16u::return#2 // register copy zp ZP_WORD:5 - //SEG145 [83] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16u::rem#10 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 ] ) -- vbuyy_eq_0_then_la1 + //SEG138 [82] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::resultu#0 ] ) -- vbuyy_eq_0_then_la1 cpy #0 beq b19 jmp b11 - //SEG146 divr16s::@11 + //SEG139 divr16s::@11 b11: - //SEG147 [84] (signed word) rem16s#2 ← - (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ) -- vwsz1=_neg_vwsz2 - sec - lda divr16u.rem - eor #$ff - adc #0 - sta rem16s - lda divr16u.rem+1 - eor #$ff - adc #0 - sta rem16s+1 - //SEG148 [85] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 rem16s#2 divr16s::return#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#2 divr16s::return#1 ] ) -- vwsz1=_neg_vwsz1 + //SEG140 [83] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16s::return#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#1 ] ) -- vwsz1=_neg_vwsz1 sec lda return eor #$ff @@ -6908,29 +6385,23 @@ divr16s: { eor #$ff adc #0 sta return+1 - //SEG149 [86] phi from divr16s::@11 divr16s::@19 to divr16s::@return [phi:divr16s::@11/divr16s::@19->divr16s::@return] + //SEG141 [84] phi from divr16s::@11 divr16s::@19 to divr16s::@return [phi:divr16s::@11/divr16s::@19->divr16s::@return] breturn_from_b11: breturn_from_b19: - //SEG150 [86] phi (signed word) rem16s#3 = (signed word) rem16s#2 [phi:divr16s::@11/divr16s::@19->divr16s::@return#0] -- register_copy - //SEG151 [86] phi (signed word) divr16s::return#2 = (signed word) divr16s::return#1 [phi:divr16s::@11/divr16s::@19->divr16s::@return#1] -- register_copy + //SEG142 [84] phi (signed word) divr16s::return#2 = (signed word) divr16s::return#1 [phi:divr16s::@11/divr16s::@19->divr16s::@return#0] -- register_copy jmp breturn - //SEG152 divr16s::@return + //SEG143 divr16s::@return breturn: - //SEG153 [87] return [ divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) + //SEG144 [85] return [ divr16s::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) rts - //SEG154 divr16s::@19 + //SEG145 divr16s::@19 b19: - //SEG155 [88] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 divr16s::return#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 ] ) + //SEG146 [86] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16s::return#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#7 ] ) // (signed word~) divr16s::return#7 = (signed word)(word) divr16s::resultu#0 // register copy zp ZP_WORD:5 - //SEG156 [89] (signed word~) rem16s#57 ← (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::return#7 rem16s#57 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 rem16s#57 ] ) -- vwsz1=vwsz2 - lda divr16u.rem - sta rem16s - lda divr16u.rem+1 - sta rem16s+1 jmp breturn_from_b19 - //SEG157 divr16s::@3 + //SEG147 divr16s::@3 b3: - //SEG158 [90] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) -- vwsz1=_neg_vwsz1 + //SEG148 [87] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) -- vwsz1=_neg_vwsz1 sec lda _11 eor #$ff @@ -6940,16 +6411,16 @@ divr16s: { eor #$ff adc #0 sta _11+1 - //SEG159 [91] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) -- vbuyy=vbuyy_bxor_vbuc1 + //SEG149 [88] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) -- vbuyy=vbuyy_bxor_vbuc1 tya eor #1 tay - //SEG160 [92] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) - // (word~) divr16s::divisoru#4 = (word)(signed word~) divr16s::$11 // register copy zp ZP_WORD:11 + //SEG150 [89] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) + // (word~) divr16s::divisoru#4 = (word)(signed word~) divr16s::$11 // register copy zp ZP_WORD:9 jmp b4_from_b3 - //SEG161 divr16s::@1 + //SEG151 divr16s::@1 b1: - //SEG162 [93] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) -- vwsz1=_neg_vwsz1 + //SEG152 [90] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) -- vwsz1=_neg_vwsz1 sec lda _7 eor #$ff @@ -6959,79 +6430,79 @@ divr16s: { eor #$ff adc #0 sta _7+1 - //SEG163 [94] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) - // (word~) divr16s::remu#7 = (word)(signed word~) divr16s::$7 // register copy zp ZP_WORD:9 - //SEG164 [73] phi from divr16s::@1 to divr16s::@2 [phi:divr16s::@1->divr16s::@2] + //SEG153 [91] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) + // (word~) divr16s::remu#7 = (word)(signed word~) divr16s::$7 // register copy zp ZP_WORD:7 + //SEG154 [72] phi from divr16s::@1 to divr16s::@2 [phi:divr16s::@1->divr16s::@2] b2_from_b1: - //SEG165 [73] phi (word) divr16s::remu#3 = (word~) divr16s::remu#7 [phi:divr16s::@1->divr16s::@2#0] -- register_copy - //SEG166 [73] phi (word) divr16s::dividendu#3 = ((word))-(const signed word) divr16s::dividend#0 [phi:divr16s::@1->divr16s::@2#1] -- vwuz1=vbuc1 + //SEG155 [72] phi (word) divr16s::remu#3 = (word~) divr16s::remu#7 [phi:divr16s::@1->divr16s::@2#0] -- register_copy + //SEG156 [72] phi (word) divr16s::dividendu#3 = ((word))-(const signed word) divr16s::dividend#0 [phi:divr16s::@1->divr16s::@2#1] -- vwuz1=vbuc1 lda #<-dividend sta dividendu lda #>-dividend sta dividendu+1 - //SEG167 [73] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:divr16s::@1->divr16s::@2#2] -- vbuyy=vbuc1 + //SEG157 [72] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:divr16s::@1->divr16s::@2#2] -- vbuyy=vbuc1 ldy #1 jmp b2 } -//SEG168 divr16u +//SEG158 divr16u divr16u: { - .label rem = 9 + .label rem = 7 .label dividend = 3 .label quotient = 5 .label return = 5 - .label divisor = $b - //SEG169 [96] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + .label divisor = 9 + //SEG159 [93] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] b1_from_divr16u: - //SEG170 [96] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + //SEG160 [93] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - //SEG171 [96] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + //SEG161 [93] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 lda #<0 sta quotient lda #>0 sta quotient+1 - //SEG172 [96] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy - //SEG173 [96] phi (word) divr16u::rem#4 = (word) divr16u::rem#3 [phi:divr16u->divr16u::@1#3] -- register_copy + //SEG162 [93] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy + //SEG163 [93] phi (word) divr16u::rem#4 = (word) divr16u::rem#3 [phi:divr16u->divr16u::@1#3] -- register_copy jmp b1 - //SEG174 [96] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + //SEG164 [93] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] b1_from_b3: - //SEG175 [96] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - //SEG176 [96] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - //SEG177 [96] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG178 [96] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG165 [93] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + //SEG166 [93] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + //SEG167 [93] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + //SEG168 [93] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 - //SEG179 divr16u::@1 + //SEG169 divr16u::@1 b1: - //SEG180 [97] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 + //SEG170 [94] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - //SEG181 [98] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 + //SEG171 [95] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 lda dividend+1 - //SEG182 [99] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 + //SEG172 [96] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 and #$80 - //SEG183 [100] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuaa_eq_0_then_la1 + //SEG173 [97] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b2_from_b1 jmp b4 - //SEG184 divr16u::@4 + //SEG174 divr16u::@4 b4: - //SEG185 [101] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 + //SEG175 [98] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem - //SEG186 [102] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + //SEG176 [99] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] b2_from_b1: b2_from_b4: - //SEG187 [102] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + //SEG177 [99] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy jmp b2 - //SEG188 divr16u::@2 + //SEG178 divr16u::@2 b2: - //SEG189 [103] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 + //SEG179 [100] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG190 [104] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG180 [101] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG191 [105] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG181 [102] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3_from_b2 @@ -7041,14 +6512,14 @@ divr16u: { bcc b3_from_b2 !: jmp b5 - //SEG192 divr16u::@5 + //SEG182 divr16u::@5 b5: - //SEG193 [106] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG183 [103] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG194 [107] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG184 [104] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -7056,236 +6527,236 @@ divr16u: { lda rem+1 sbc divisor+1 sta rem+1 - //SEG195 [108] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + //SEG185 [105] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] b3_from_b2: b3_from_b5: - //SEG196 [108] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG197 [108] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG186 [105] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + //SEG187 [105] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 - //SEG198 divr16u::@3 + //SEG188 divr16u::@3 b3: - //SEG199 [109] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG189 [106] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG200 [110] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG190 [107] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1_from_b3 jmp breturn - //SEG201 divr16u::@return + //SEG191 divr16u::@return breturn: - //SEG202 [111] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::return#0 ] ) + //SEG192 [108] return [ divr16u::return#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) rts } -//SEG203 screen_fill +//SEG193 screen_fill screen_fill: { .const ch = $10 .label screen = 3 .label y = 2 - //SEG204 [113] phi from screen_fill to screen_fill::@1 [phi:screen_fill->screen_fill::@1] + //SEG194 [110] phi from screen_fill to screen_fill::@1 [phi:screen_fill->screen_fill::@1] b1_from_screen_fill: - //SEG205 [113] phi (byte) screen_fill::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill->screen_fill::@1#0] -- vbuz1=vbuc1 + //SEG195 [110] phi (byte) screen_fill::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill->screen_fill::@1#0] -- vbuz1=vbuc1 lda #0 sta y - //SEG206 [113] phi (byte*) screen_fill::screen#3 = (const byte*) SCREEN#0 [phi:screen_fill->screen_fill::@1#1] -- pbuz1=pbuc1 + //SEG196 [110] phi (byte*) screen_fill::screen#3 = (const byte*) SCREEN#0 [phi:screen_fill->screen_fill::@1#1] -- pbuz1=pbuc1 lda #SCREEN sta screen+1 jmp b1 - //SEG207 [113] phi from screen_fill::@3 to screen_fill::@1 [phi:screen_fill::@3->screen_fill::@1] + //SEG197 [110] phi from screen_fill::@3 to screen_fill::@1 [phi:screen_fill::@3->screen_fill::@1] b1_from_b3: - //SEG208 [113] phi (byte) screen_fill::y#4 = (byte) screen_fill::y#1 [phi:screen_fill::@3->screen_fill::@1#0] -- register_copy - //SEG209 [113] phi (byte*) screen_fill::screen#3 = (byte*) screen_fill::screen#1 [phi:screen_fill::@3->screen_fill::@1#1] -- register_copy + //SEG198 [110] phi (byte) screen_fill::y#4 = (byte) screen_fill::y#1 [phi:screen_fill::@3->screen_fill::@1#0] -- register_copy + //SEG199 [110] phi (byte*) screen_fill::screen#3 = (byte*) screen_fill::screen#1 [phi:screen_fill::@3->screen_fill::@1#1] -- register_copy jmp b1 - //SEG210 screen_fill::@1 + //SEG200 screen_fill::@1 b1: - //SEG211 [114] phi from screen_fill::@1 to screen_fill::@2 [phi:screen_fill::@1->screen_fill::@2] + //SEG201 [111] phi from screen_fill::@1 to screen_fill::@2 [phi:screen_fill::@1->screen_fill::@2] b2_from_b1: - //SEG212 [114] phi (byte) screen_fill::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill::@1->screen_fill::@2#0] -- vbuxx=vbuc1 + //SEG202 [111] phi (byte) screen_fill::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill::@1->screen_fill::@2#0] -- vbuxx=vbuc1 ldx #0 - //SEG213 [114] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#3 [phi:screen_fill::@1->screen_fill::@2#1] -- register_copy + //SEG203 [111] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#3 [phi:screen_fill::@1->screen_fill::@2#1] -- register_copy jmp b2 - //SEG214 [114] phi from screen_fill::@2 to screen_fill::@2 [phi:screen_fill::@2->screen_fill::@2] + //SEG204 [111] phi from screen_fill::@2 to screen_fill::@2 [phi:screen_fill::@2->screen_fill::@2] b2_from_b2: - //SEG215 [114] phi (byte) screen_fill::x#2 = (byte) screen_fill::x#1 [phi:screen_fill::@2->screen_fill::@2#0] -- register_copy - //SEG216 [114] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#1 [phi:screen_fill::@2->screen_fill::@2#1] -- register_copy + //SEG205 [111] phi (byte) screen_fill::x#2 = (byte) screen_fill::x#1 [phi:screen_fill::@2->screen_fill::@2#0] -- register_copy + //SEG206 [111] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#1 [phi:screen_fill::@2->screen_fill::@2#1] -- register_copy jmp b2 - //SEG217 screen_fill::@2 + //SEG207 screen_fill::@2 b2: - //SEG218 [115] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) -- _deref_pbuz1=vbuc1 + //SEG208 [112] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (screen),y - //SEG219 [116] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) -- pbuz1=_inc_pbuz1 + //SEG209 [113] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - //SEG220 [117] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuxx=_inc_vbuxx + //SEG210 [114] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG221 [118] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG211 [115] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$28 bne b2_from_b2 jmp b3 - //SEG222 screen_fill::@3 + //SEG212 screen_fill::@3 b3: - //SEG223 [119] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG213 [116] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1=_inc_vbuz1 inc y - //SEG224 [120] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG214 [117] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda y cmp #$19 bne b1_from_b3 jmp breturn - //SEG225 screen_fill::@return + //SEG215 screen_fill::@return breturn: - //SEG226 [121] return [ ] ( main:2::screen_fill:17 [ ] ) + //SEG216 [118] return [ ] ( main:2::screen_fill:17 [ ] ) rts } -//SEG227 bitmap_clear +//SEG217 bitmap_clear bitmap_clear: { .label bitmap = 3 .label y = 2 .label _3 = 3 - //SEG228 [122] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + //SEG218 [119] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda bitmap_plot_ylo+0 sta _3 lda bitmap_plot_yhi+0 sta _3+1 - //SEG229 [123] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) + //SEG219 [120] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) // (byte*~) bitmap_clear::bitmap#5 = (byte*)(word~) bitmap_clear::$3 // register copy zp ZP_WORD:3 - //SEG230 [124] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + //SEG220 [121] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] b1_from_bitmap_clear: - //SEG231 [124] phi (byte) bitmap_clear::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear->bitmap_clear::@1#0] -- vbuz1=vbuc1 + //SEG221 [121] phi (byte) bitmap_clear::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear->bitmap_clear::@1#0] -- vbuz1=vbuc1 lda #0 sta y - //SEG232 [124] phi (byte*) bitmap_clear::bitmap#3 = (byte*~) bitmap_clear::bitmap#5 [phi:bitmap_clear->bitmap_clear::@1#1] -- register_copy + //SEG222 [121] phi (byte*) bitmap_clear::bitmap#3 = (byte*~) bitmap_clear::bitmap#5 [phi:bitmap_clear->bitmap_clear::@1#1] -- register_copy jmp b1 - //SEG233 [124] phi from bitmap_clear::@3 to bitmap_clear::@1 [phi:bitmap_clear::@3->bitmap_clear::@1] + //SEG223 [121] phi from bitmap_clear::@3 to bitmap_clear::@1 [phi:bitmap_clear::@3->bitmap_clear::@1] b1_from_b3: - //SEG234 [124] phi (byte) bitmap_clear::y#4 = (byte) bitmap_clear::y#1 [phi:bitmap_clear::@3->bitmap_clear::@1#0] -- register_copy - //SEG235 [124] phi (byte*) bitmap_clear::bitmap#3 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@3->bitmap_clear::@1#1] -- register_copy + //SEG224 [121] phi (byte) bitmap_clear::y#4 = (byte) bitmap_clear::y#1 [phi:bitmap_clear::@3->bitmap_clear::@1#0] -- register_copy + //SEG225 [121] phi (byte*) bitmap_clear::bitmap#3 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@3->bitmap_clear::@1#1] -- register_copy jmp b1 - //SEG236 bitmap_clear::@1 + //SEG226 bitmap_clear::@1 b1: - //SEG237 [125] phi from bitmap_clear::@1 to bitmap_clear::@2 [phi:bitmap_clear::@1->bitmap_clear::@2] + //SEG227 [122] phi from bitmap_clear::@1 to bitmap_clear::@2 [phi:bitmap_clear::@1->bitmap_clear::@2] b2_from_b1: - //SEG238 [125] phi (byte) bitmap_clear::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear::@1->bitmap_clear::@2#0] -- vbuxx=vbuc1 + //SEG228 [122] phi (byte) bitmap_clear::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear::@1->bitmap_clear::@2#0] -- vbuxx=vbuc1 ldx #0 - //SEG239 [125] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#3 [phi:bitmap_clear::@1->bitmap_clear::@2#1] -- register_copy + //SEG229 [122] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#3 [phi:bitmap_clear::@1->bitmap_clear::@2#1] -- register_copy jmp b2 - //SEG240 [125] phi from bitmap_clear::@2 to bitmap_clear::@2 [phi:bitmap_clear::@2->bitmap_clear::@2] + //SEG230 [122] phi from bitmap_clear::@2 to bitmap_clear::@2 [phi:bitmap_clear::@2->bitmap_clear::@2] b2_from_b2: - //SEG241 [125] phi (byte) bitmap_clear::x#2 = (byte) bitmap_clear::x#1 [phi:bitmap_clear::@2->bitmap_clear::@2#0] -- register_copy - //SEG242 [125] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@2->bitmap_clear::@2#1] -- register_copy + //SEG231 [122] phi (byte) bitmap_clear::x#2 = (byte) bitmap_clear::x#1 [phi:bitmap_clear::@2->bitmap_clear::@2#0] -- register_copy + //SEG232 [122] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@2->bitmap_clear::@2#1] -- register_copy jmp b2 - //SEG243 bitmap_clear::@2 + //SEG233 bitmap_clear::@2 b2: - //SEG244 [126] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) -- _deref_pbuz1=vbuc1 + //SEG234 [123] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) -- _deref_pbuz1=vbuc1 lda #0 ldy #0 sta (bitmap),y - //SEG245 [127] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) -- pbuz1=_inc_pbuz1 + //SEG235 [124] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) -- pbuz1=_inc_pbuz1 inc bitmap bne !+ inc bitmap+1 !: - //SEG246 [128] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuxx=_inc_vbuxx + //SEG236 [125] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG247 [129] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG237 [126] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$c8 bne b2_from_b2 jmp b3 - //SEG248 bitmap_clear::@3 + //SEG238 bitmap_clear::@3 b3: - //SEG249 [130] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG239 [127] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1=_inc_vbuz1 inc y - //SEG250 [131] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG240 [128] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda y cmp #$28 bne b1_from_b3 jmp breturn - //SEG251 bitmap_clear::@return + //SEG241 bitmap_clear::@return breturn: - //SEG252 [132] return [ ] ( main:2::bitmap_clear:15 [ ] ) + //SEG242 [129] return [ ] ( main:2::bitmap_clear:15 [ ] ) rts } -//SEG253 bitmap_init +//SEG243 bitmap_init bitmap_init: { .label _3 = 2 .label yoffs = 3 - //SEG254 [134] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + //SEG244 [131] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] b1_from_bitmap_init: - //SEG255 [134] phi (byte) bitmap_init::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 + //SEG245 [131] phi (byte) bitmap_init::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 ldx #0 - //SEG256 [134] phi (byte) bitmap_init::bits#3 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 + //SEG246 [131] phi (byte) bitmap_init::bits#3 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 lda #$80 jmp b1 - //SEG257 [134] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + //SEG247 [131] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] b1_from_b2: - //SEG258 [134] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - //SEG259 [134] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + //SEG248 [131] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + //SEG249 [131] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy jmp b1 - //SEG260 bitmap_init::@1 + //SEG250 bitmap_init::@1 b1: - //SEG261 [135] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG251 [132] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_bit,x - //SEG262 [136] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuaa=vbuaa_ror_1 + //SEG252 [133] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuaa=vbuaa_ror_1 lsr - //SEG263 [137] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuaa_neq_0_then_la1 + //SEG253 [134] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuaa_neq_0_then_la1 cmp #0 bne b10_from_b1 - //SEG264 [138] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + //SEG254 [135] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] b2_from_b1: - //SEG265 [138] phi (byte) bitmap_init::bits#4 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 + //SEG255 [135] phi (byte) bitmap_init::bits#4 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 lda #$80 jmp b2 - //SEG266 bitmap_init::@2 + //SEG256 bitmap_init::@2 b2: - //SEG267 [139] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuxx=_inc_vbuxx + //SEG257 [136] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG268 [140] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuxx_neq_0_then_la1 + //SEG258 [137] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuxx_neq_0_then_la1 cpx #0 bne b1_from_b2 - //SEG269 [141] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + //SEG259 [138] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] b3_from_b2: - //SEG270 [141] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP#0 [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + //SEG260 [138] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP#0 [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta yoffs+1 - //SEG271 [141] phi (byte) bitmap_init::y#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 + //SEG261 [138] phi (byte) bitmap_init::y#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 ldx #0 jmp b3 - //SEG272 [141] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + //SEG262 [138] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] b3_from_b4: - //SEG273 [141] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - //SEG274 [141] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + //SEG263 [138] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + //SEG264 [138] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy jmp b3 - //SEG275 bitmap_init::@3 + //SEG265 bitmap_init::@3 b3: - //SEG276 [142] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) -- vbuz1=vbuxx_band_vbuc1 + //SEG266 [139] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) -- vbuz1=vbuxx_band_vbuc1 txa and #7 sta _3 - //SEG277 [143] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) -- vbuaa=_lo_pbuz1 + //SEG267 [140] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) -- vbuaa=_lo_pbuz1 lda yoffs - //SEG278 [144] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) -- vbuaa=vbuz1_bor_vbuaa + //SEG268 [141] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) -- vbuaa=vbuz1_bor_vbuaa ora _3 - //SEG279 [145] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG269 [142] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_ylo,x - //SEG280 [146] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) -- vbuaa=_hi_pbuz1 + //SEG270 [143] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) -- vbuaa=_hi_pbuz1 lda yoffs+1 - //SEG281 [147] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG271 [144] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_yhi,x - //SEG282 [148] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) -- vbuaa=vbuxx_band_vbuc1 + //SEG272 [145] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) -- vbuaa=vbuxx_band_vbuc1 txa and #7 - //SEG283 [149] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- vbuaa_neq_vbuc1_then_la1 + //SEG273 [146] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- vbuaa_neq_vbuc1_then_la1 cmp #7 bne b4_from_b3 jmp b7 - //SEG284 bitmap_init::@7 + //SEG274 bitmap_init::@7 b7: - //SEG285 [150] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1 + //SEG275 [147] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1 clc lda yoffs adc #<$28*8 @@ -7293,31 +6764,31 @@ bitmap_init: { lda yoffs+1 adc #>$28*8 sta yoffs+1 - //SEG286 [151] phi from bitmap_init::@3 bitmap_init::@7 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4] + //SEG276 [148] phi from bitmap_init::@3 bitmap_init::@7 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4] b4_from_b3: b4_from_b7: - //SEG287 [151] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4#0] -- register_copy + //SEG277 [148] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4#0] -- register_copy jmp b4 - //SEG288 bitmap_init::@4 + //SEG278 bitmap_init::@4 b4: - //SEG289 [152] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuxx=_inc_vbuxx + //SEG279 [149] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuxx=_inc_vbuxx inx - //SEG290 [153] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuxx_neq_0_then_la1 + //SEG280 [150] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuxx_neq_0_then_la1 cpx #0 bne b3_from_b4 jmp breturn - //SEG291 bitmap_init::@return + //SEG281 bitmap_init::@return breturn: - //SEG292 [154] return [ ] ( main:2::bitmap_init:13 [ ] ) + //SEG282 [151] return [ ] ( main:2::bitmap_init:13 [ ] ) rts - //SEG293 [155] phi from bitmap_init::@1 to bitmap_init::@10 [phi:bitmap_init::@1->bitmap_init::@10] + //SEG283 [152] phi from bitmap_init::@1 to bitmap_init::@10 [phi:bitmap_init::@1->bitmap_init::@10] b10_from_b1: jmp b10 - //SEG294 bitmap_init::@10 + //SEG284 bitmap_init::@10 b10: - //SEG295 [138] phi from bitmap_init::@10 to bitmap_init::@2 [phi:bitmap_init::@10->bitmap_init::@2] + //SEG285 [135] phi from bitmap_init::@10 to bitmap_init::@2 [phi:bitmap_init::@10->bitmap_init::@2] b2_from_b10: - //SEG296 [138] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@10->bitmap_init::@2#0] -- register_copy + //SEG286 [135] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@10->bitmap_init::@2#0] -- register_copy jmp b2 } x_start: .word $a, $14, $1e, $1e @@ -7391,10 +6862,6 @@ Removing instruction jmp b4 Removing instruction jmp breturn Removing instruction jmp b10 Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #>0 -Removing instruction lda #<0 -Removing instruction lda #>0 -Removing instruction lda #0 Removing instruction lda i Removing instruction ldy #0 Removing instruction ldy point_idx1 @@ -7404,7 +6871,6 @@ Removing instruction lda #>0 Replacing instruction ldy #0 with TAY Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b21 with b1 -Replacing label b2_from_b11 with b2 Replacing label abs16s2_breturn_from_abs16s2_b1 with b10 Replacing label abs16s1_breturn_from_abs16s1_b1 with abs16s2 Replacing label breturn_from_b19 with breturn @@ -7438,8 +6904,6 @@ Removing instruction abs16s1_breturn: Removing instruction abs16s2_breturn_from_b13: Removing instruction abs16s2_breturn_from_abs16s2_b1: Removing instruction abs16s2_breturn: -Removing instruction b2_from_b10: -Removing instruction b2_from_b11: Removing instruction b4_from_b18: Removing instruction b4_from_b3: Removing instruction breturn_from_b11: @@ -7506,6 +6970,7 @@ Removing instruction b3_from_b2: Removing instruction b7: Removing instruction breturn: Succesful ASM optimization Pass5UnusedLabelElimination +Skipping double jump to breturn in beq b19 Skipping double jump to b2 in bne b10 Succesful ASM optimization Pass5DoubleJumpElimination Removing instruction jmp b1 @@ -7517,12 +6982,14 @@ Removing instruction jmp b2 Removing instruction jmp b1 Removing instruction jmp b3 Succesful ASM optimization Pass5NextJumpElimination +Removing instruction b19: Removing instruction b10: Succesful ASM optimization Pass5UnusedLabelElimination +Removing unreachable instruction jmp breturn Removing unreachable instruction jmp b2 Succesful ASM optimization Pass5UnreachableCodeElimination -Fixing long branch [146] bmi abs16s1_b1 to bpl -Fixing long branch [155] bmi abs16s2_b1 to bpl +Fixing long branch [140] bmi abs16s1_b1 to bpl +Fixing long branch [149] bmi abs16s2_b1 to bpl FINAL SYMBOL TABLE (label) @18 @@ -7606,14 +7073,14 @@ FINAL SYMBOL TABLE (byte*) bitmap_init::yoffs#2 yoffs zp ZP_WORD:3 6.111111111111112 (byte*) bitmap_init::yoffs#4 yoffs zp ZP_WORD:3 11.0 (void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y) -(word~) bitmap_plot::$1 $1 zp ZP_WORD:11 4.0 +(word~) bitmap_plot::$1 $1 zp ZP_WORD:7 4.0 (byte~) bitmap_plot::$2 reg byte a 4.0 -(word~) bitmap_plot::$3 $3 zp ZP_WORD:7 1.0 +(word~) bitmap_plot::$3 $3 zp ZP_WORD:5 1.0 (label) bitmap_plot::@return (byte*) bitmap_plot::plotter -(byte*) bitmap_plot::plotter#1 plotter zp ZP_WORD:7 3.0 +(byte*) bitmap_plot::plotter#1 plotter zp ZP_WORD:5 3.0 (word) bitmap_plot::x -(word) bitmap_plot::x#0 x zp ZP_WORD:5 3.0 +(word) bitmap_plot::x#0 x zp ZP_WORD:3 3.0 (byte) bitmap_plot::y (byte) bitmap_plot::y#0 reg byte y 15.0 (byte[256]) bitmap_plot_bit @@ -7625,8 +7092,8 @@ FINAL SYMBOL TABLE (byte[4]) delay (const byte[4]) delay#0 delay = { fill( 4, 0) } (signed word()) divr16s((signed word) divr16s::dividend , (signed word) divr16s::divisor , (signed word) divr16s::rem) -(signed word~) divr16s::$11 $11 zp ZP_WORD:11 1.0 -(signed word~) divr16s::$7 $7 zp ZP_WORD:9 2.0 +(signed word~) divr16s::$11 $11 zp ZP_WORD:9 1.0 +(signed word~) divr16s::$7 $7 zp ZP_WORD:7 2.0 (label) divr16s::@1 (label) divr16s::@11 (label) divr16s::@15 @@ -7643,28 +7110,28 @@ FINAL SYMBOL TABLE (word) divr16s::dividendu (word) divr16s::dividendu#3 dividendu zp ZP_WORD:3 0.2857142857142857 (signed word) divr16s::divisor -(signed word) divr16s::divisor#0 divisor zp ZP_WORD:11 0.6666666666666666 +(signed word) divr16s::divisor#0 divisor zp ZP_WORD:9 0.6666666666666666 (word) divr16s::divisoru -(word) divr16s::divisoru#3 divisoru zp ZP_WORD:11 3.0 -(word~) divr16s::divisoru#4 divisoru zp ZP_WORD:11 4.0 -(word~) divr16s::divisoru#5 divisoru zp ZP_WORD:11 4.0 +(word) divr16s::divisoru#3 divisoru zp ZP_WORD:9 3.0 +(word~) divr16s::divisoru#4 divisoru zp ZP_WORD:9 4.0 +(word~) divr16s::divisoru#5 divisoru zp ZP_WORD:9 4.0 (byte) divr16s::neg (byte) divr16s::neg#2 reg byte y 2.0 (byte) divr16s::neg#3 reg byte y 1.0 (byte) divr16s::neg#4 reg byte y 0.8571428571428571 (signed word) divr16s::rem -(signed word) divr16s::rem#0 rem zp ZP_WORD:9 2.0 +(signed word) divr16s::rem#0 rem zp ZP_WORD:7 2.0 (word) divr16s::remu -(word) divr16s::remu#3 remu zp ZP_WORD:9 0.6666666666666666 -(word~) divr16s::remu#7 remu zp ZP_WORD:9 4.0 -(word~) divr16s::remu#8 remu zp ZP_WORD:9 4.0 +(word) divr16s::remu#3 remu zp ZP_WORD:7 0.6666666666666666 +(word~) divr16s::remu#7 remu zp ZP_WORD:7 4.0 +(word~) divr16s::remu#8 remu zp ZP_WORD:7 4.0 (word) divr16s::resultu -(word) divr16s::resultu#0 resultu zp ZP_WORD:5 0.6666666666666666 +(word) divr16s::resultu#0 resultu zp ZP_WORD:5 1.0 (signed word) divr16s::return (signed word) divr16s::return#1 return zp ZP_WORD:5 4.0 (signed word) divr16s::return#2 return zp ZP_WORD:5 2.0 (signed word) divr16s::return#3 return zp ZP_WORD:5 4.0 -(signed word~) divr16s::return#7 return zp ZP_WORD:5 2.0 +(signed word~) divr16s::return#7 return zp ZP_WORD:5 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 reg byte a 202.0 (byte~) divr16u::$2 reg byte a 202.0 @@ -7679,7 +7146,7 @@ FINAL SYMBOL TABLE (word) divr16u::dividend#1 dividend zp ZP_WORD:3 1.0 (word) divr16u::dividend#2 dividend zp ZP_WORD:3 43.57142857142858 (word) divr16u::divisor -(word) divr16u::divisor#0 divisor zp ZP_WORD:11 11.333333333333332 +(word) divr16u::divisor#0 divisor zp ZP_WORD:9 11.333333333333332 (byte) divr16u::i (byte) divr16u::i#1 reg byte x 151.5 (byte) divr16u::i#2 reg byte x 15.538461538461538 @@ -7688,13 +7155,13 @@ FINAL SYMBOL TABLE (word) divr16u::quotient#2 quotient zp ZP_WORD:5 101.0 (word) divr16u::quotient#3 quotient zp ZP_WORD:5 25.25 (word) divr16u::rem -(word) divr16u::rem#0 rem zp ZP_WORD:9 75.75 -(word) divr16u::rem#1 rem zp ZP_WORD:9 202.0 -(word) divr16u::rem#10 rem zp ZP_WORD:9 15.25 -(word) divr16u::rem#2 rem zp ZP_WORD:9 202.0 -(word) divr16u::rem#3 rem zp ZP_WORD:9 2.0 -(word) divr16u::rem#4 rem zp ZP_WORD:9 204.0 -(word) divr16u::rem#5 rem zp ZP_WORD:9 101.0 +(word) divr16u::rem#0 rem zp ZP_WORD:7 75.75 +(word) divr16u::rem#1 rem zp ZP_WORD:7 202.0 +(word) divr16u::rem#2 rem zp ZP_WORD:7 202.0 +(word) divr16u::rem#3 rem zp ZP_WORD:7 2.0 +(word) divr16u::rem#4 rem zp ZP_WORD:7 204.0 +(word) divr16u::rem#5 rem zp ZP_WORD:7 101.0 +(word) divr16u::rem#9 rem zp ZP_WORD:7 101.0 (word) divr16u::return (word) divr16u::return#0 return zp ZP_WORD:5 61.0 (word) divr16u::return#2 return zp ZP_WORD:5 4.0 @@ -7740,11 +7207,11 @@ FINAL SYMBOL TABLE (void()) point_init((byte) point_init::point_idx) (byte~) point_init::$13 reg byte a 4.0 (byte~) point_init::$14 reg byte a 2.0 -(word~) point_init::$16 $16 zp ZP_WORD:5 4.0 -(word~) point_init::$17 $17 zp ZP_WORD:5 4.0 -(word~) point_init::$18 $18 zp ZP_WORD:5 4.0 -(signed word~) point_init::$4 $4 zp ZP_WORD:14 2.0 -(signed word~) point_init::$5 $5 zp ZP_WORD:5 4.0 +(word~) point_init::$16 $16 zp ZP_WORD:3 4.0 +(word~) point_init::$17 $17 zp ZP_WORD:3 4.0 +(word~) point_init::$18 $18 zp ZP_WORD:3 4.0 +(signed word~) point_init::$4 $4 zp ZP_WORD:7 2.0 +(signed word~) point_init::$5 $5 zp ZP_WORD:3 4.0 (label) point_init::@1 (label) point_init::@10 (label) point_init::@11 @@ -7759,47 +7226,38 @@ FINAL SYMBOL TABLE (bool~) point_init::abs16s1_$0 (word~) point_init::abs16s1_$1 (signed word~) point_init::abs16s1_$2 -(signed word) point_init::abs16s1_$2#0 abs16s1_$2 zp ZP_WORD:5 2.0 +(signed word) point_init::abs16s1_$2#0 abs16s1_$2 zp ZP_WORD:3 2.0 (word~) point_init::abs16s1_$3 (label) point_init::abs16s1_@1 (label) point_init::abs16s1_@return (word) point_init::abs16s1_return -(word) point_init::abs16s1_return#2 abs16s1_return zp ZP_WORD:5 1.0 -(word~) point_init::abs16s1_return#5 abs16s1_return zp ZP_WORD:5 4.0 -(word~) point_init::abs16s1_return#6 abs16s1_return zp ZP_WORD:5 4.0 +(word) point_init::abs16s1_return#2 abs16s1_return zp ZP_WORD:3 1.0 +(word~) point_init::abs16s1_return#5 abs16s1_return zp ZP_WORD:3 4.0 +(word~) point_init::abs16s1_return#6 abs16s1_return zp ZP_WORD:3 4.0 (signed word) point_init::abs16s1_w (label) point_init::abs16s2 (bool~) point_init::abs16s2_$0 (word~) point_init::abs16s2_$1 (signed word~) point_init::abs16s2_$2 -(signed word) point_init::abs16s2_$2#0 abs16s2_$2 zp ZP_WORD:7 2.0 +(signed word) point_init::abs16s2_$2#0 abs16s2_$2 zp ZP_WORD:5 2.0 (word~) point_init::abs16s2_$3 (label) point_init::abs16s2_@1 (label) point_init::abs16s2_@return (word) point_init::abs16s2_return -(word) point_init::abs16s2_return#2 abs16s2_return zp ZP_WORD:7 6.0 -(word~) point_init::abs16s2_return#5 abs16s2_return zp ZP_WORD:7 4.0 -(word~) point_init::abs16s2_return#6 abs16s2_return zp ZP_WORD:7 4.0 +(word) point_init::abs16s2_return#2 abs16s2_return zp ZP_WORD:5 6.0 +(word~) point_init::abs16s2_return#5 abs16s2_return zp ZP_WORD:5 4.0 +(word~) point_init::abs16s2_return#6 abs16s2_return zp ZP_WORD:5 4.0 (signed word) point_init::abs16s2_w (byte) point_init::point_idx -(byte) point_init::point_idx#0 point_idx zp ZP_BYTE:2 0.6969696969696968 +(byte) point_init::point_idx#0 point_idx zp ZP_BYTE:2 0.71875 (byte) point_init::point_idx1 -(byte) point_init::point_idx1#0 point_idx1 zp ZP_BYTE:13 0.36363636363636365 +(byte) point_init::point_idx1#0 point_idx1 zp ZP_BYTE:11 0.375 (signed word) point_init::x_diff -(signed word) point_init::x_diff#1 x_diff zp ZP_WORD:11 0.5555555555555556 +(signed word) point_init::x_diff#1 x_diff zp ZP_WORD:9 0.5555555555555556 (signed word) point_init::x_stepf (signed word) point_init::x_stepf#0 x_stepf zp ZP_WORD:5 4.0 (signed word) point_init::y_diff -(signed word) point_init::y_diff#0 y_diff zp ZP_WORD:14 0.5 -(signed word) rem16s -(signed word) rem16s#13 rem16s zp ZP_WORD:3 0.9999999999999999 -(signed word) rem16s#15 rem16s zp ZP_WORD:3 0.7222222222222223 -(signed word) rem16s#2 rem16s zp ZP_WORD:3 2.0 -(signed word) rem16s#3 rem16s zp ZP_WORD:3 0.75 -(signed word~) rem16s#57 rem16s zp ZP_WORD:3 4.0 -(word) rem16u -(word) rem16u#18 rem16u zp ZP_WORD:9 0.9999999999999999 -(word) rem16u#21 rem16u zp ZP_WORD:9 0.7222222222222223 +(signed word) point_init::y_diff#0 y_diff zp ZP_WORD:7 0.5 (void()) screen_fill((byte*) screen_fill::screen , (byte) screen_fill::ch) (label) screen_fill::@1 (label) screen_fill::@2 @@ -7835,11 +7293,10 @@ FINAL SYMBOL TABLE (const byte[4]) y_start#0 y_start = { (byte/signed byte/word/signed word/dword/signed dword) 10, (byte/signed byte/word/signed word/dword/signed dword) 10, (byte/signed byte/word/signed word/dword/signed dword) 10, (byte/signed byte/word/signed word/dword/signed dword) 20 } zp ZP_BYTE:2 [ main::i#2 main::i#1 point_init::point_idx#0 screen_fill::y#4 screen_fill::y#1 bitmap_clear::y#4 bitmap_clear::y#1 bitmap_init::$3 ] -zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#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 ] -zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 bitmap_plot::x#0 point_init::$5 point_init::$16 point_init::$17 point_init::$18 ] -zp ZP_WORD:7 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_$2#0 bitmap_plot::$3 bitmap_plot::plotter#1 ] -zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::$7 ] -zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::$11 point_init::x_diff#1 bitmap_plot::$1 ] +zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#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 bitmap_plot::x#0 point_init::$5 point_init::$16 point_init::$17 point_init::$18 ] +zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_$2#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 bitmap_plot::$3 bitmap_plot::plotter#1 ] +zp ZP_WORD:7 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::$7 point_init::$4 point_init::y_diff#0 bitmap_plot::$1 ] +zp ZP_WORD:9 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::$11 point_init::x_diff#1 ] reg byte y [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte x [ screen_fill::x#2 screen_fill::x#1 ] @@ -7850,8 +7307,7 @@ reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte x [ main::$9 ] reg byte y [ bitmap_plot::y#0 ] reg byte a [ bitmap_plot::$2 ] -zp ZP_BYTE:13 [ point_init::point_idx1#0 ] -zp ZP_WORD:14 [ point_init::$4 point_init::y_diff#0 ] +zp ZP_BYTE:11 [ point_init::point_idx1#0 ] reg byte a [ point_init::$13 ] reg byte a [ point_init::$14 ] reg byte a [ divr16u::$1 ] @@ -7863,7 +7319,7 @@ reg byte a [ bitmap_init::$7 ] FINAL ASSEMBLER -Score: 21640 +Score: 21471 //SEG0 Basic Upstart .pc = $801 "Basic" @@ -7886,8 +7342,6 @@ Score: 21640 .label BITMAP = $a000 .label SCREEN = $8800 .const DELAY = 8 - .label rem16s = 3 - .label rem16u = 9 //SEG2 @begin //SEG3 [1] phi from @begin to @18 [phi:@begin->@18] //SEG4 @18 @@ -7928,7 +7382,7 @@ main: { lda #toD0181_return sta D018 //SEG23 [13] call bitmap_init [ ] ( main:2 [ ] ) - //SEG24 [133] phi from main::@16 to bitmap_init [phi:main::@16->bitmap_init] + //SEG24 [130] phi from main::@16 to bitmap_init [phi:main::@16->bitmap_init] jsr bitmap_init //SEG25 [14] phi from main::@16 to main::@17 [phi:main::@16->main::@17] //SEG26 main::@17 @@ -7937,82 +7391,74 @@ main: { //SEG28 [16] phi from main::@17 to main::@18 [phi:main::@17->main::@18] //SEG29 main::@18 //SEG30 [17] call screen_fill [ ] ( main:2 [ ] ) - //SEG31 [112] phi from main::@18 to screen_fill [phi:main::@18->screen_fill] + //SEG31 [109] phi from main::@18 to screen_fill [phi:main::@18->screen_fill] jsr screen_fill //SEG32 [18] phi from main::@18 to main::@1 [phi:main::@18->main::@1] - //SEG33 [18] phi (signed word) rem16s#15 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#0] -- vwsz1=vbuc1 - lda #<0 - sta rem16s - sta rem16s+1 - //SEG34 [18] phi (word) rem16u#21 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#1] -- vwuz1=vbuc1 - sta rem16u - sta rem16u+1 - //SEG35 [18] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#2] -- vbuz1=vbuc1 + //SEG33 [18] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@18->main::@1#0] -- vbuz1=vbuc1 + lda #0 sta i - //SEG36 [18] phi from main::@21 to main::@1 [phi:main::@21->main::@1] - //SEG37 [18] phi (signed word) rem16s#15 = (signed word) rem16s#13 [phi:main::@21->main::@1#0] -- register_copy - //SEG38 [18] phi (word) rem16u#21 = (word) rem16u#18 [phi:main::@21->main::@1#1] -- register_copy - //SEG39 [18] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@21->main::@1#2] -- register_copy - //SEG40 main::@1 + //SEG34 [18] phi from main::@21 to main::@1 [phi:main::@21->main::@1] + //SEG35 [18] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@21->main::@1#0] -- register_copy + //SEG36 main::@1 b1: - //SEG41 [19] (byte) point_init::point_idx#0 ← (byte) main::i#2 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 ] ( main:2 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 ] ) + //SEG37 [19] (byte) point_init::point_idx#0 ← (byte) main::i#2 [ main::i#2 point_init::point_idx#0 ] ( main:2 [ main::i#2 point_init::point_idx#0 ] ) // (byte) point_init::point_idx#0 = (byte) main::i#2 // register copy zp ZP_BYTE:2 - //SEG42 [20] call point_init [ main::i#2 rem16u#18 rem16s#13 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG38 [20] call point_init [ main::i#2 ] ( main:2 [ main::i#2 ] ) jsr point_init - //SEG43 main::@20 - //SEG44 [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 ] ) -- vbuxx=vbuz1_ror_1 + //SEG39 main::@20 + //SEG40 [21] (byte~) main::$9 ← (byte) main::i#2 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#2 main::$9 ] ( main:2 [ main::i#2 main::$9 ] ) -- vbuxx=vbuz1_ror_1 lda i lsr tax - //SEG45 [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 main::$9 bitmap_plot::x#0 ] ) -- vwuz1=pwuc1_derefidx_vbuz2 + //SEG41 [22] (word) bitmap_plot::x#0 ← *((const word[4]) x_start#0 + (byte) main::i#2) [ main::i#2 main::$9 bitmap_plot::x#0 ] ( main:2 [ main::i#2 main::$9 bitmap_plot::x#0 ] ) -- vwuz1=pwuc1_derefidx_vbuz2 ldy i lda x_start,y sta bitmap_plot.x lda x_start+1,y sta bitmap_plot.x+1 - //SEG46 [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::y#0 ] ) -- vbuyy=pbuc1_derefidx_vbuxx + //SEG42 [23] (byte) bitmap_plot::y#0 ← *((const byte[4]) y_start#0 + (byte~) main::$9) [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ( main:2 [ main::i#2 bitmap_plot::x#0 bitmap_plot::y#0 ] ) -- vbuyy=pbuc1_derefidx_vbuxx ldy y_start,x - //SEG47 [24] call bitmap_plot [ main::i#2 rem16u#18 rem16s#13 ] ( main:2 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG43 [24] call bitmap_plot [ main::i#2 ] ( main:2 [ main::i#2 ] ) jsr bitmap_plot - //SEG48 main::@21 - //SEG49 [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) -- vbuz1=vbuz1_plus_2 + //SEG44 main::@21 + //SEG45 [25] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=vbuz1_plus_2 lda i clc adc #2 sta i - //SEG50 [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 rem16u#18 rem16s#13 ] ( main:2 [ main::i#1 rem16u#18 rem16s#13 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG46 [26] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 cmp #8 bne b1 - //SEG51 main::@5 + //SEG47 main::@5 b5: - //SEG52 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 + //SEG48 [27] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 [ ] ( main:2 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 lda RASTER cmp #$ff bne b5 - //SEG53 main::@7 - //SEG54 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_inc__deref_pbuc1 + //SEG49 main::@7 + //SEG50 [28] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_inc__deref_pbuc1 inc BORDERCOL jmp b5 } -//SEG55 bitmap_plot +//SEG51 bitmap_plot bitmap_plot: { - .label _1 = $b - .label x = 5 - .label plotter = 7 - .label _3 = 7 - //SEG56 [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 ] ) -- vwuz1=pbuc1_derefidx_vbuyy_word_pbuc2_derefidx_vbuyy + .label _1 = 7 + .label x = 3 + .label plotter = 5 + .label _3 = 5 + //SEG52 [29] (word~) bitmap_plot::$3 ← *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#0) w= *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#0) [ bitmap_plot::x#0 bitmap_plot::$3 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 ] ) -- vwuz1=pbuc1_derefidx_vbuyy_word_pbuc2_derefidx_vbuyy lda bitmap_plot_yhi,y sta _3+1 lda bitmap_plot_ylo,y sta _3 - //SEG57 [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) -- vwuz1=vwuz2_band_vwuc1 + //SEG53 [30] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#0 & (word/dword/signed dword) 65528 [ bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::$3 bitmap_plot::$1 ] ) -- vwuz1=vwuz2_band_vwuc1 lda x and #<$fff8 sta _1 lda x+1 and #>$fff8 sta _1+1 - //SEG58 [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) -- pbuz1=pbuz1_plus_vwuz2 + //SEG54 [31] (byte*) bitmap_plot::plotter#1 ← (byte*)(word~) bitmap_plot::$3 + (word~) bitmap_plot::$1 [ bitmap_plot::x#0 bitmap_plot::plotter#1 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::x#0 bitmap_plot::plotter#1 ] ) -- pbuz1=pbuz1_plus_vwuz2 lda plotter clc adc _1 @@ -8020,39 +7466,39 @@ bitmap_plot: { lda plotter+1 adc _1+1 sta plotter+1 - //SEG59 [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) -- vbuaa=_lo_vwuz1 + //SEG55 [32] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#0 [ bitmap_plot::plotter#1 bitmap_plot::$2 ] ( main:2::bitmap_plot:24 [ main::i#2 bitmap_plot::plotter#1 bitmap_plot::$2 ] ) -- vbuaa=_lo_vwuz1 lda x - //SEG60 [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) -- _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuaa + //SEG56 [33] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[256]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2) [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) -- _deref_pbuz1=_deref_pbuz1_bor_pbuc1_derefidx_vbuaa tay lda bitmap_plot_bit,y ldy #0 ora (plotter),y sta (plotter),y - //SEG61 bitmap_plot::@return - //SEG62 [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG57 bitmap_plot::@return + //SEG58 [34] return [ ] ( main:2::bitmap_plot:24 [ main::i#2 ] ) rts } -//SEG63 point_init +//SEG59 point_init point_init: { - .label _4 = $e - .label _5 = 5 - .label _16 = 5 - .label _17 = 5 - .label _18 = 5 + .label _4 = 7 + .label _5 = 3 + .label _16 = 3 + .label _17 = 3 + .label _18 = 3 .label point_idx = 2 - .label point_idx1 = $d - .label y_diff = $e - .label abs16s1__2 = 5 - .label abs16s1_return = 5 - .label abs16s2__2 = 7 - .label abs16s2_return = 7 + .label point_idx1 = $b + .label y_diff = 7 + .label abs16s1__2 = 3 + .label abs16s1_return = 3 + .label abs16s2__2 = 5 + .label abs16s2_return = 5 .label x_stepf = 5 - .label x_diff = $b - //SEG64 [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- vbuz1=vbuz2_ror_1 + .label x_diff = 9 + //SEG60 [35] (byte) point_init::point_idx1#0 ← (byte) point_init::point_idx#0 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- vbuz1=vbuz2_ror_1 lda point_idx lsr sta point_idx1 - //SEG65 [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) -- vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 + //SEG61 [36] (signed word) point_init::x_diff#1 ← (signed word)*((const word[4]) x_end#0 + (byte) point_init::point_idx#0) - (signed word)*((const word[4]) x_start#0 + (byte) point_init::point_idx#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 ] ) -- vwsz1=pwsc1_derefidx_vbuz2_minus_pwsc2_derefidx_vbuz2 ldy point_idx sec lda x_end,y @@ -8061,18 +7507,18 @@ point_init: { lda x_end+1,y sbc x_start+1,y sta x_diff+1 - //SEG66 [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 + //SEG62 [37] (signed word~) point_init::$4 ← ((signed word)) *((const byte[4]) y_end#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 ldy point_idx1 lda y_end,y sta _4 lda #0 sta _4+1 - //SEG67 [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 + //SEG63 [38] (signed word~) point_init::$5 ← ((signed word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::$4 point_init::$5 ] ) -- vwsz1=_sword_pbuc1_derefidx_vbuz2 lda y_start,y sta _5 lda #0 sta _5+1 - //SEG68 [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1=vwsz1_minus_vwsz2 + //SEG64 [39] (signed word) point_init::y_diff#0 ← (signed word~) point_init::$4 - (signed word~) point_init::$5 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1=vwsz1_minus_vwsz2 lda y_diff sec sbc _5 @@ -8080,40 +7526,40 @@ point_init: { lda y_diff+1 sbc _5+1 sta y_diff+1 - //SEG69 point_init::abs16s1 - //SEG70 [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 + //SEG65 point_init::abs16s1 + //SEG66 [40] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s1_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 lda x_diff+1 bpl !abs16s1_b1+ jmp abs16s1_b1 !abs16s1_b1: - //SEG71 point_init::@12 - //SEG72 [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) -- vwuz1=vwuz2 + //SEG67 point_init::@12 + //SEG68 [41] (word~) point_init::abs16s1_return#6 ← (word)(signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#6 ] ) -- vwuz1=vwuz2 lda x_diff sta abs16s1_return lda x_diff+1 sta abs16s1_return+1 - //SEG73 [42] phi from point_init::@12 point_init::abs16s1_@1 to point_init::abs16s1_@return [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return] - //SEG74 [42] phi (word) point_init::abs16s1_return#2 = (word~) point_init::abs16s1_return#6 [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return#0] -- register_copy - //SEG75 point_init::abs16s1_@return - //SEG76 point_init::abs16s2 + //SEG69 [42] phi from point_init::@12 point_init::abs16s1_@1 to point_init::abs16s1_@return [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return] + //SEG70 [42] phi (word) point_init::abs16s1_return#2 = (word~) point_init::abs16s1_return#6 [phi:point_init::@12/point_init::abs16s1_@1->point_init::abs16s1_@return#0] -- register_copy + //SEG71 point_init::abs16s1_@return + //SEG72 point_init::abs16s2 abs16s2: - //SEG77 [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) -- vwsz1_lt_0_then_la1 + //SEG73 [43] if((signed word) point_init::y_diff#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::abs16s2_@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 ] ) -- vwsz1_lt_0_then_la1 lda y_diff+1 bpl !abs16s2_b1+ jmp abs16s2_b1 !abs16s2_b1: - //SEG78 point_init::@13 - //SEG79 [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) -- vwuz1=vwuz2 + //SEG74 point_init::@13 + //SEG75 [44] (word~) point_init::abs16s2_return#6 ← (word)(signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#6 ] ) -- vwuz1=vwuz2 lda y_diff sta abs16s2_return lda y_diff+1 sta abs16s2_return+1 - //SEG80 [45] phi from point_init::@13 point_init::abs16s2_@1 to point_init::abs16s2_@return [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return] - //SEG81 [45] phi (word) point_init::abs16s2_return#2 = (word~) point_init::abs16s2_return#6 [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return#0] -- register_copy - //SEG82 point_init::abs16s2_@return - //SEG83 point_init::@10 + //SEG76 [45] phi from point_init::@13 point_init::abs16s2_@1 to point_init::abs16s2_@return [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return] + //SEG77 [45] phi (word) point_init::abs16s2_return#2 = (word~) point_init::abs16s2_return#6 [phi:point_init::@13/point_init::abs16s2_@1->point_init::abs16s2_@return#0] -- register_copy + //SEG78 point_init::abs16s2_@return + //SEG79 point_init::@10 b10: - //SEG84 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwuz1_gt_vwuz2_then_la1 + //SEG80 [46] if((word) point_init::abs16s1_return#2>(word) point_init::abs16s2_return#2) goto point_init::@1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwuz1_gt_vwuz2_then_la1 lda abs16s1_return cmp abs16s2_return lda abs16s1_return+1 @@ -8122,12 +7568,9 @@ point_init: { eor #$80 !: bpl b1 - //SEG85 [47] phi from point_init::@10 point_init::@11 to point_init::@2 [phi:point_init::@10/point_init::@11->point_init::@2] - //SEG86 [47] phi (signed word) rem16s#13 = (signed word) rem16s#15 [phi:point_init::@10/point_init::@11->point_init::@2#0] -- register_copy - //SEG87 [47] phi (word) rem16u#18 = (word) rem16u#21 [phi:point_init::@10/point_init::@11->point_init::@2#1] -- register_copy - //SEG88 point_init::@2 + //SEG81 point_init::@2 b2: - //SEG89 [48] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) -- vwuz1=pwuc1_derefidx_vbuz2_rol_4 + //SEG82 [47] (word~) point_init::$16 ← *((const word[4]) x_start#0 + (byte) point_init::point_idx#0) << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$16 ] ) -- vwuz1=pwuc1_derefidx_vbuz2_rol_4 ldy point_idx lda x_start,y sta _16 @@ -8141,18 +7584,18 @@ point_init: { rol _16+1 asl _16 rol _16+1 - //SEG90 [49] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 + //SEG83 [48] *((const word[4]) x_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$16 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 lda _16 sta x_cur,y lda _16+1 sta x_cur+1,y - //SEG91 [50] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) -- vwuz1=_word_pbuc1_derefidx_vbuz2 + //SEG84 [49] (word~) point_init::$17 ← ((word)) *((const byte[4]) y_start#0 + (byte) point_init::point_idx1#0) [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$17 ] ) -- vwuz1=_word_pbuc1_derefidx_vbuz2 ldy point_idx1 lda y_start,y sta _17 lda #0 sta _17+1 - //SEG92 [51] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) -- vwuz1=vwuz1_rol_4 + //SEG85 [50] (word~) point_init::$18 ← (word~) point_init::$17 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$18 ] ) -- vwuz1=vwuz1_rol_4 asl _18 rol _18+1 asl _18 @@ -8161,67 +7604,64 @@ point_init: { rol _18+1 asl _18 rol _18+1 - //SEG93 [52] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ rem16u#18 rem16s#13 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 + //SEG86 [51] *((const word[4]) y_cur#0 + (byte) point_init::point_idx#0) ← (word~) point_init::$18 [ point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx1#0 ] ) -- pwuc1_derefidx_vbuz1=vwuz2 ldy point_idx lda _18 sta y_cur,y lda _18+1 sta y_cur+1,y - //SEG94 [53] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 + //SEG87 [52] *((const byte[4]) delay#0 + (byte) point_init::point_idx1#0) ← (const byte) DELAY#0 [ ] ( main:2::point_init:20 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 ldy point_idx1 lda #DELAY sta delay,y - //SEG95 point_init::@return - //SEG96 [54] return [ rem16u#18 rem16s#13 ] ( main:2::point_init:20 [ main::i#2 rem16u#18 rem16s#13 ] ) + //SEG88 point_init::@return + //SEG89 [53] return [ ] ( main:2::point_init:20 [ main::i#2 ] ) rts - //SEG97 point_init::@1 + //SEG90 point_init::@1 b1: - //SEG98 [55] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 + //SEG91 [54] if((signed word) point_init::x_diff#1<(byte/signed byte/word/signed word/dword/signed dword) 0) goto point_init::@3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- vwsz1_lt_0_then_la1 lda x_diff+1 bmi b3 - //SEG99 point_init::@7 - //SEG100 [56] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbuc2 + //SEG92 point_init::@7 + //SEG93 [55] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbuc2 ldy point_idx lda #$10 sta x_add,y - //SEG101 point_init::@4 + //SEG94 point_init::@4 b4: - //SEG102 [57] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) - // (signed word) divr16s::divisor#0 = (signed word) point_init::x_diff#1 // register copy zp ZP_WORD:11 - //SEG103 [58] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1=vwsz2 - lda y_diff - sta divr16s.rem - lda y_diff+1 - sta divr16s.rem+1 - //SEG104 [59] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) - //SEG105 [70] phi from point_init::@4 to divr16s [phi:point_init::@4->divr16s] + //SEG95 [56] (signed word) divr16s::divisor#0 ← (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::y_diff#0 divr16s::divisor#0 ] ) + // (signed word) divr16s::divisor#0 = (signed word) point_init::x_diff#1 // register copy zp ZP_WORD:9 + //SEG96 [57] (signed word) divr16s::rem#0 ← (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) + // (signed word) divr16s::rem#0 = (signed word) point_init::y_diff#0 // register copy zp ZP_WORD:7 + //SEG97 [58] call divr16s [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) + //SEG98 [69] phi from point_init::@4 to divr16s [phi:point_init::@4->divr16s] jsr divr16s - //SEG106 [60] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#3 ] ) + //SEG99 [59] (signed word) divr16s::return#3 ← (signed word) divr16s::return#2 [ point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#3 ] ) // (signed word) divr16s::return#3 = (signed word) divr16s::return#2 // register copy zp ZP_WORD:5 - //SEG107 point_init::@11 - //SEG108 [61] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::x_stepf#0 ] ) + //SEG100 point_init::@11 + //SEG101 [60] (signed word) point_init::x_stepf#0 ← (signed word) divr16s::return#3 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_stepf#0 ] ) // (signed word) point_init::x_stepf#0 = (signed word) divr16s::return#3 // register copy zp ZP_WORD:5 - //SEG109 [62] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$13 ] ) -- vbuaa=_hi_vwsz1 + //SEG102 [61] (byte~) point_init::$13 ← > (signed word) point_init::x_stepf#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$13 ] ) -- vbuaa=_hi_vwsz1 lda x_stepf+1 - //SEG110 [63] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 point_init::$14 ] ) -- vbuaa=vbuaa_ror_4 + //SEG103 [62] (byte~) point_init::$14 ← (byte~) point_init::$13 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::$14 ] ) -- vbuaa=vbuaa_ror_4 lsr lsr lsr lsr - //SEG111 [64] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 ] ) -- pbsc1_derefidx_vbuz1=vbsaa + //SEG104 [63] *((const signed byte[4]) y_add#0 + (byte) point_init::point_idx1#0) ← (signed byte)(byte~) point_init::$14 [ point_init::point_idx#0 point_init::point_idx1#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 ] ) -- pbsc1_derefidx_vbuz1=vbsaa ldy point_idx1 sta y_add,y jmp b2 - //SEG112 point_init::@3 + //SEG105 point_init::@3 b3: - //SEG113 [65] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbsc2 + //SEG106 [64] *((const signed byte[4]) x_add#0 + (byte) point_init::point_idx#0) ← -(byte/signed byte/word/signed word/dword/signed dword) 16 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 ] ) -- pbsc1_derefidx_vbuz1=vbsc2 ldy point_idx lda #-$10 sta x_add,y jmp b4 - //SEG114 point_init::abs16s2_@1 + //SEG107 point_init::abs16s2_@1 abs16s2_b1: - //SEG115 [66] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) -- vwsz1=_neg_vwsz2 + //SEG108 [65] (signed word) point_init::abs16s2_$2#0 ← - (signed word) point_init::y_diff#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_$2#0 ] ) -- vwsz1=_neg_vwsz2 sec lda y_diff eor #$ff @@ -8231,12 +7671,12 @@ point_init: { eor #$ff adc #0 sta abs16s2__2+1 - //SEG116 [67] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) - // (word~) point_init::abs16s2_return#5 = (word)(signed word) point_init::abs16s2_$2#0 // register copy zp ZP_WORD:7 + //SEG109 [66] (word~) point_init::abs16s2_return#5 ← (word)(signed word) point_init::abs16s2_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#2 point_init::abs16s2_return#5 ] ) + // (word~) point_init::abs16s2_return#5 = (word)(signed word) point_init::abs16s2_$2#0 // register copy zp ZP_WORD:5 jmp b10 - //SEG117 point_init::abs16s1_@1 + //SEG110 point_init::abs16s1_@1 abs16s1_b1: - //SEG118 [68] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) -- vwsz1=_neg_vwsz2 + //SEG111 [67] (signed word) point_init::abs16s1_$2#0 ← - (signed word) point_init::x_diff#1 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_$2#0 ] ) -- vwsz1=_neg_vwsz2 sec lda x_diff eor #$ff @@ -8246,80 +7686,70 @@ point_init: { eor #$ff adc #0 sta abs16s1__2+1 - //SEG119 [69] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 rem16u#21 rem16s#15 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) - // (word~) point_init::abs16s1_return#5 = (word)(signed word) point_init::abs16s1_$2#0 // register copy zp ZP_WORD:5 + //SEG112 [68] (word~) point_init::abs16s1_return#5 ← (word)(signed word) point_init::abs16s1_$2#0 [ point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ( main:2::point_init:20 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 point_init::x_diff#1 point_init::y_diff#0 point_init::abs16s1_return#5 ] ) + // (word~) point_init::abs16s1_return#5 = (word)(signed word) point_init::abs16s1_$2#0 // register copy zp ZP_WORD:3 jmp abs16s2 } -//SEG120 divr16s +//SEG113 divr16s divr16s: { .const dividend = 0 - .label _7 = 9 - .label _11 = $b + .label _7 = 7 + .label _11 = 9 .label resultu = 5 .label return = 5 - .label divisor = $b - .label rem = 9 + .label divisor = 9 + .label rem = 7 .label dividendu = 3 - .label divisoru = $b - .label remu = 9 - //SEG121 divr16s::@16 - //SEG122 [71] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1_lt_0_then_la1 + .label divisoru = 9 + .label remu = 7 + //SEG114 divr16s::@16 + //SEG115 [70] if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 [ divr16s::divisor#0 divr16s::rem#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::rem#0 ] ) -- vwsz1_lt_0_then_la1 lda rem+1 bmi b1 - //SEG123 divr16s::@17 - //SEG124 [72] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) - // (word~) divr16s::remu#8 = (word)(signed word) divr16s::rem#0 // register copy zp ZP_WORD:9 - //SEG125 [73] phi from divr16s::@17 to divr16s::@2 [phi:divr16s::@17->divr16s::@2] - //SEG126 [73] phi (word) divr16s::remu#3 = (word~) divr16s::remu#8 [phi:divr16s::@17->divr16s::@2#0] -- register_copy - //SEG127 [73] phi (word) divr16s::dividendu#3 = ((word))(const signed word) divr16s::dividend#0 [phi:divr16s::@17->divr16s::@2#1] -- vwuz1=vbuc1 + //SEG116 divr16s::@17 + //SEG117 [71] (word~) divr16s::remu#8 ← (word)(signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::remu#8 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#8 ] ) + // (word~) divr16s::remu#8 = (word)(signed word) divr16s::rem#0 // register copy zp ZP_WORD:7 + //SEG118 [72] phi from divr16s::@17 to divr16s::@2 [phi:divr16s::@17->divr16s::@2] + //SEG119 [72] phi (word) divr16s::remu#3 = (word~) divr16s::remu#8 [phi:divr16s::@17->divr16s::@2#0] -- register_copy + //SEG120 [72] phi (word) divr16s::dividendu#3 = ((word))(const signed word) divr16s::dividend#0 [phi:divr16s::@17->divr16s::@2#1] -- vwuz1=vbuc1 lda #dividend sta dividendu+1 - //SEG128 [73] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16s::@17->divr16s::@2#2] -- vbuyy=vbuc1 + //SEG121 [72] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16s::@17->divr16s::@2#2] -- vbuyy=vbuc1 ldy #0 - //SEG129 divr16s::@2 + //SEG122 divr16s::@2 b2: - //SEG130 [74] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) -- vwsz1_lt_0_then_la1 + //SEG123 [73] if((signed word) divr16s::divisor#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@3 [ divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 ] ) -- vwsz1_lt_0_then_la1 lda divisor+1 bmi b3 - //SEG131 divr16s::@18 - //SEG132 [75] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) - // (word~) divr16s::divisoru#5 = (word)(signed word) divr16s::divisor#0 // register copy zp ZP_WORD:11 - //SEG133 [76] phi from divr16s::@18 divr16s::@3 to divr16s::@4 [phi:divr16s::@18/divr16s::@3->divr16s::@4] - //SEG134 [76] phi (byte) divr16s::neg#4 = (byte) divr16s::neg#3 [phi:divr16s::@18/divr16s::@3->divr16s::@4#0] -- register_copy - //SEG135 [76] phi (word) divr16s::divisoru#3 = (word~) divr16s::divisoru#5 [phi:divr16s::@18/divr16s::@3->divr16s::@4#1] -- register_copy - //SEG136 divr16s::@4 + //SEG124 divr16s::@18 + //SEG125 [74] (word~) divr16s::divisoru#5 ← (word)(signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#5 ] ) + // (word~) divr16s::divisoru#5 = (word)(signed word) divr16s::divisor#0 // register copy zp ZP_WORD:9 + //SEG126 [75] phi from divr16s::@18 divr16s::@3 to divr16s::@4 [phi:divr16s::@18/divr16s::@3->divr16s::@4] + //SEG127 [75] phi (byte) divr16s::neg#4 = (byte) divr16s::neg#3 [phi:divr16s::@18/divr16s::@3->divr16s::@4#0] -- register_copy + //SEG128 [75] phi (word) divr16s::divisoru#3 = (word~) divr16s::divisoru#5 [phi:divr16s::@18/divr16s::@3->divr16s::@4#1] -- register_copy + //SEG129 divr16s::@4 b4: - //SEG137 [77] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) + //SEG130 [76] (word) divr16u::dividend#1 ← (word) divr16s::dividendu#3 [ divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::divisoru#3 divr16s::neg#4 divr16u::dividend#1 ] ) // (word) divr16u::dividend#1 = (word) divr16s::dividendu#3 // register copy zp ZP_WORD:3 - //SEG138 [78] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) - // (word) divr16u::divisor#0 = (word) divr16s::divisoru#3 // register copy zp ZP_WORD:11 - //SEG139 [79] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) - // (word) divr16u::rem#3 = (word) divr16s::remu#3 // register copy zp ZP_WORD:9 - //SEG140 [80] call divr16u [ divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#0 ] ) - //SEG141 [95] phi from divr16s::@4 to divr16u [phi:divr16s::@4->divr16u] + //SEG131 [77] (word) divr16u::divisor#0 ← (word) divr16s::divisoru#3 [ divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::remu#3 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 ] ) + // (word) divr16u::divisor#0 = (word) divr16s::divisoru#3 // register copy zp ZP_WORD:9 + //SEG132 [78] (word) divr16u::rem#3 ← (word) divr16s::remu#3 [ divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::dividend#1 divr16u::divisor#0 divr16u::rem#3 ] ) + // (word) divr16u::rem#3 = (word) divr16s::remu#3 // register copy zp ZP_WORD:7 + //SEG133 [79] call divr16u [ divr16s::neg#4 divr16u::return#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) + //SEG134 [92] phi from divr16s::@4 to divr16u [phi:divr16s::@4->divr16u] jsr divr16u - //SEG142 [81] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16u::return#2 ] ) + //SEG135 [80] (word) divr16u::return#2 ← (word) divr16u::return#0 [ divr16s::neg#4 divr16u::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#2 ] ) // (word) divr16u::return#2 = (word) divr16u::return#0 // register copy zp ZP_WORD:5 - //SEG143 divr16s::@15 - //SEG144 [82] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::neg#4 divr16s::resultu#0 ] ) + //SEG136 divr16s::@15 + //SEG137 [81] (word) divr16s::resultu#0 ← (word) divr16u::return#2 [ divr16s::neg#4 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16s::resultu#0 ] ) // (word) divr16s::resultu#0 = (word) divr16u::return#2 // register copy zp ZP_WORD:5 - //SEG145 [83] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16u::rem#10 divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 ] ) -- vbuyy_eq_0_then_la1 + //SEG138 [82] if((byte) divr16s::neg#4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@19 [ divr16s::resultu#0 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::resultu#0 ] ) -- vbuyy_eq_0_then_la1 cpy #0 - beq b19 - //SEG146 divr16s::@11 - //SEG147 [84] (signed word) rem16s#2 ← - (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::resultu#0 rem16s#2 ] ) -- vwsz1=_neg_vwsz2 - sec - lda divr16u.rem - eor #$ff - adc #0 - sta rem16s - lda divr16u.rem+1 - eor #$ff - adc #0 - sta rem16s+1 - //SEG148 [85] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 rem16s#2 divr16s::return#1 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#2 divr16s::return#1 ] ) -- vwsz1=_neg_vwsz1 + beq breturn + //SEG139 divr16s::@11 + //SEG140 [83] (signed word) divr16s::return#1 ← - (signed word)(word) divr16s::resultu#0 [ divr16s::return#1 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#1 ] ) -- vwsz1=_neg_vwsz1 sec lda return eor #$ff @@ -8329,26 +7759,18 @@ divr16s: { eor #$ff adc #0 sta return+1 - //SEG149 [86] phi from divr16s::@11 divr16s::@19 to divr16s::@return [phi:divr16s::@11/divr16s::@19->divr16s::@return] - //SEG150 [86] phi (signed word) rem16s#3 = (signed word) rem16s#2 [phi:divr16s::@11/divr16s::@19->divr16s::@return#0] -- register_copy - //SEG151 [86] phi (signed word) divr16s::return#2 = (signed word) divr16s::return#1 [phi:divr16s::@11/divr16s::@19->divr16s::@return#1] -- register_copy - //SEG152 divr16s::@return + //SEG141 [84] phi from divr16s::@11 divr16s::@19 to divr16s::@return [phi:divr16s::@11/divr16s::@19->divr16s::@return] + //SEG142 [84] phi (signed word) divr16s::return#2 = (signed word) divr16s::return#1 [phi:divr16s::@11/divr16s::@19->divr16s::@return#0] -- register_copy + //SEG143 divr16s::@return breturn: - //SEG153 [87] return [ divr16u::rem#10 rem16s#3 divr16s::return#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 rem16s#3 divr16s::return#2 ] ) + //SEG144 [85] return [ divr16s::return#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#2 ] ) rts - //SEG154 divr16s::@19 - b19: - //SEG155 [88] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16u::rem#10 divr16s::return#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 ] ) + //SEG145 divr16s::@19 + //SEG146 [86] (signed word~) divr16s::return#7 ← (signed word)(word) divr16s::resultu#0 [ divr16s::return#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::return#7 ] ) // (signed word~) divr16s::return#7 = (signed word)(word) divr16s::resultu#0 // register copy zp ZP_WORD:5 - //SEG156 [89] (signed word~) rem16s#57 ← (signed word)(word) divr16u::rem#10 [ divr16u::rem#10 divr16s::return#7 rem16s#57 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16u::rem#10 divr16s::return#7 rem16s#57 ] ) -- vwsz1=vwsz2 - lda divr16u.rem - sta rem16s - lda divr16u.rem+1 - sta rem16s+1 - jmp breturn - //SEG157 divr16s::@3 + //SEG147 divr16s::@3 b3: - //SEG158 [90] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) -- vwsz1=_neg_vwsz1 + //SEG148 [87] (signed word~) divr16s::$11 ← - (signed word) divr16s::divisor#0 [ divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#3 divr16s::dividendu#3 divr16s::remu#3 divr16s::$11 ] ) -- vwsz1=_neg_vwsz1 sec lda _11 eor #$ff @@ -8358,16 +7780,16 @@ divr16s: { eor #$ff adc #0 sta _11+1 - //SEG159 [91] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) -- vbuyy=vbuyy_bxor_vbuc1 + //SEG149 [88] (byte) divr16s::neg#2 ← (byte) divr16s::neg#3 ^ (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::neg#2 divr16s::$11 ] ) -- vbuyy=vbuyy_bxor_vbuc1 tya eor #1 tay - //SEG160 [92] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) - // (word~) divr16s::divisoru#4 = (word)(signed word~) divr16s::$11 // register copy zp ZP_WORD:11 + //SEG150 [89] (word~) divr16s::divisoru#4 ← (word)(signed word~) divr16s::$11 [ divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::dividendu#3 divr16s::remu#3 divr16s::divisoru#4 divr16s::neg#2 ] ) + // (word~) divr16s::divisoru#4 = (word)(signed word~) divr16s::$11 // register copy zp ZP_WORD:9 jmp b4 - //SEG161 divr16s::@1 + //SEG151 divr16s::@1 b1: - //SEG162 [93] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) -- vwsz1=_neg_vwsz1 + //SEG152 [90] (signed word~) divr16s::$7 ← - (signed word) divr16s::rem#0 [ divr16s::divisor#0 divr16s::$7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::$7 ] ) -- vwsz1=_neg_vwsz1 sec lda _7 eor #$ff @@ -8377,68 +7799,68 @@ divr16s: { eor #$ff adc #0 sta _7+1 - //SEG163 [94] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:59 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) - // (word~) divr16s::remu#7 = (word)(signed word~) divr16s::$7 // register copy zp ZP_WORD:9 - //SEG164 [73] phi from divr16s::@1 to divr16s::@2 [phi:divr16s::@1->divr16s::@2] - //SEG165 [73] phi (word) divr16s::remu#3 = (word~) divr16s::remu#7 [phi:divr16s::@1->divr16s::@2#0] -- register_copy - //SEG166 [73] phi (word) divr16s::dividendu#3 = ((word))-(const signed word) divr16s::dividend#0 [phi:divr16s::@1->divr16s::@2#1] -- vwuz1=vbuc1 + //SEG153 [91] (word~) divr16s::remu#7 ← (word)(signed word~) divr16s::$7 [ divr16s::divisor#0 divr16s::remu#7 ] ( main:2::point_init:20::divr16s:58 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::divisor#0 divr16s::remu#7 ] ) + // (word~) divr16s::remu#7 = (word)(signed word~) divr16s::$7 // register copy zp ZP_WORD:7 + //SEG154 [72] phi from divr16s::@1 to divr16s::@2 [phi:divr16s::@1->divr16s::@2] + //SEG155 [72] phi (word) divr16s::remu#3 = (word~) divr16s::remu#7 [phi:divr16s::@1->divr16s::@2#0] -- register_copy + //SEG156 [72] phi (word) divr16s::dividendu#3 = ((word))-(const signed word) divr16s::dividend#0 [phi:divr16s::@1->divr16s::@2#1] -- vwuz1=vbuc1 lda #<-dividend sta dividendu lda #>-dividend sta dividendu+1 - //SEG167 [73] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:divr16s::@1->divr16s::@2#2] -- vbuyy=vbuc1 + //SEG157 [72] phi (byte) divr16s::neg#3 = (byte/signed byte/word/signed word/dword/signed dword) 1 [phi:divr16s::@1->divr16s::@2#2] -- vbuyy=vbuc1 ldy #1 jmp b2 } -//SEG168 divr16u +//SEG158 divr16u divr16u: { - .label rem = 9 + .label rem = 7 .label dividend = 3 .label quotient = 5 .label return = 5 - .label divisor = $b - //SEG169 [96] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] - //SEG170 [96] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 + .label divisor = 9 + //SEG159 [93] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1] + //SEG160 [93] phi (byte) divr16u::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1 ldx #0 - //SEG171 [96] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 + //SEG161 [93] phi (word) divr16u::quotient#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:divr16u->divr16u::@1#1] -- vwuz1=vbuc1 txa sta quotient sta quotient+1 - //SEG172 [96] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy - //SEG173 [96] phi (word) divr16u::rem#4 = (word) divr16u::rem#3 [phi:divr16u->divr16u::@1#3] -- register_copy - //SEG174 [96] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] - //SEG175 [96] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy - //SEG176 [96] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy - //SEG177 [96] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG178 [96] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy - //SEG179 divr16u::@1 + //SEG162 [93] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#1 [phi:divr16u->divr16u::@1#2] -- register_copy + //SEG163 [93] phi (word) divr16u::rem#4 = (word) divr16u::rem#3 [phi:divr16u->divr16u::@1#3] -- register_copy + //SEG164 [93] phi from divr16u::@3 to divr16u::@1 [phi:divr16u::@3->divr16u::@1] + //SEG165 [93] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy + //SEG166 [93] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy + //SEG167 [93] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy + //SEG168 [93] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG169 divr16u::@1 b1: - //SEG180 [97] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 + //SEG170 [94] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 asl rem rol rem+1 - //SEG181 [98] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 + //SEG171 [95] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) -- vbuaa=_hi_vwuz1 lda dividend+1 - //SEG182 [99] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 + //SEG172 [96] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) -- vbuaa=vbuaa_band_vbuc1 and #$80 - //SEG183 [100] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuaa_eq_0_then_la1 + //SEG173 [97] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vbuaa_eq_0_then_la1 cmp #0 beq b2 - //SEG184 divr16u::@4 - //SEG185 [101] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 + //SEG174 divr16u::@4 + //SEG175 [98] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#1 ] ) -- vwuz1=vwuz1_bor_vbuc1 lda #1 ora rem sta rem - //SEG186 [102] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] - //SEG187 [102] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy - //SEG188 divr16u::@2 + //SEG176 [99] phi from divr16u::@1 divr16u::@4 to divr16u::@2 [phi:divr16u::@1/divr16u::@4->divr16u::@2] + //SEG177 [99] phi (word) divr16u::rem#5 = (word) divr16u::rem#0 [phi:divr16u::@1/divr16u::@4->divr16u::@2#0] -- register_copy + //SEG178 divr16u::@2 b2: - //SEG189 [103] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 + //SEG179 [100] (word) divr16u::dividend#0 ← (word) divr16u::dividend#2 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::quotient#3 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 ] ) -- vwuz1=vwuz1_rol_1 asl dividend rol dividend+1 - //SEG190 [104] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 + //SEG180 [101] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1=vwuz1_rol_1 asl quotient rol quotient+1 - //SEG191 [105] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 + //SEG181 [102] if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#1 ] ) -- vwuz1_lt_vwuz2_then_la1 lda rem+1 cmp divisor+1 bcc b3 @@ -8447,13 +7869,13 @@ divr16u: { cmp divisor bcc b3 !: - //SEG192 divr16u::@5 - //SEG193 [106] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 + //SEG182 divr16u::@5 + //SEG183 [103] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::rem#5 divr16u::quotient#2 ] ) -- vwuz1=_inc_vwuz1 inc quotient bne !+ inc quotient+1 !: - //SEG194 [107] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 + //SEG184 [104] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (word) divr16u::divisor#0 [ divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) -- vwuz1=vwuz1_minus_vwuz2 lda rem sec sbc divisor @@ -8461,195 +7883,195 @@ divr16u: { lda rem+1 sbc divisor+1 sta rem+1 - //SEG195 [108] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] - //SEG196 [108] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG197 [108] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy - //SEG198 divr16u::@3 + //SEG185 [105] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] + //SEG186 [105] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy + //SEG187 [105] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG188 divr16u::@3 b3: - //SEG199 [109] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG189 [106] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG200 [110] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::divisor#0 divr16u::return#0 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG190 [107] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::divisor#0 divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1 - //SEG201 divr16u::@return - //SEG202 [111] return [ divr16u::rem#10 divr16u::return#0 ] ( main:2::point_init:20::divr16s:59::divr16u:80 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::rem#10 divr16u::return#0 ] ) + //SEG191 divr16u::@return + //SEG192 [108] return [ divr16u::return#0 ] ( main:2::point_init:20::divr16s:58::divr16u:79 [ main::i#2 point_init::point_idx#0 point_init::point_idx1#0 divr16s::neg#4 divr16u::return#0 ] ) rts } -//SEG203 screen_fill +//SEG193 screen_fill screen_fill: { .const ch = $10 .label screen = 3 .label y = 2 - //SEG204 [113] phi from screen_fill to screen_fill::@1 [phi:screen_fill->screen_fill::@1] - //SEG205 [113] phi (byte) screen_fill::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill->screen_fill::@1#0] -- vbuz1=vbuc1 + //SEG194 [110] phi from screen_fill to screen_fill::@1 [phi:screen_fill->screen_fill::@1] + //SEG195 [110] phi (byte) screen_fill::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill->screen_fill::@1#0] -- vbuz1=vbuc1 lda #0 sta y - //SEG206 [113] phi (byte*) screen_fill::screen#3 = (const byte*) SCREEN#0 [phi:screen_fill->screen_fill::@1#1] -- pbuz1=pbuc1 + //SEG196 [110] phi (byte*) screen_fill::screen#3 = (const byte*) SCREEN#0 [phi:screen_fill->screen_fill::@1#1] -- pbuz1=pbuc1 lda #SCREEN sta screen+1 - //SEG207 [113] phi from screen_fill::@3 to screen_fill::@1 [phi:screen_fill::@3->screen_fill::@1] - //SEG208 [113] phi (byte) screen_fill::y#4 = (byte) screen_fill::y#1 [phi:screen_fill::@3->screen_fill::@1#0] -- register_copy - //SEG209 [113] phi (byte*) screen_fill::screen#3 = (byte*) screen_fill::screen#1 [phi:screen_fill::@3->screen_fill::@1#1] -- register_copy - //SEG210 screen_fill::@1 + //SEG197 [110] phi from screen_fill::@3 to screen_fill::@1 [phi:screen_fill::@3->screen_fill::@1] + //SEG198 [110] phi (byte) screen_fill::y#4 = (byte) screen_fill::y#1 [phi:screen_fill::@3->screen_fill::@1#0] -- register_copy + //SEG199 [110] phi (byte*) screen_fill::screen#3 = (byte*) screen_fill::screen#1 [phi:screen_fill::@3->screen_fill::@1#1] -- register_copy + //SEG200 screen_fill::@1 b1: - //SEG211 [114] phi from screen_fill::@1 to screen_fill::@2 [phi:screen_fill::@1->screen_fill::@2] - //SEG212 [114] phi (byte) screen_fill::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill::@1->screen_fill::@2#0] -- vbuxx=vbuc1 + //SEG201 [111] phi from screen_fill::@1 to screen_fill::@2 [phi:screen_fill::@1->screen_fill::@2] + //SEG202 [111] phi (byte) screen_fill::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:screen_fill::@1->screen_fill::@2#0] -- vbuxx=vbuc1 ldx #0 - //SEG213 [114] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#3 [phi:screen_fill::@1->screen_fill::@2#1] -- register_copy - //SEG214 [114] phi from screen_fill::@2 to screen_fill::@2 [phi:screen_fill::@2->screen_fill::@2] - //SEG215 [114] phi (byte) screen_fill::x#2 = (byte) screen_fill::x#1 [phi:screen_fill::@2->screen_fill::@2#0] -- register_copy - //SEG216 [114] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#1 [phi:screen_fill::@2->screen_fill::@2#1] -- register_copy - //SEG217 screen_fill::@2 + //SEG203 [111] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#3 [phi:screen_fill::@1->screen_fill::@2#1] -- register_copy + //SEG204 [111] phi from screen_fill::@2 to screen_fill::@2 [phi:screen_fill::@2->screen_fill::@2] + //SEG205 [111] phi (byte) screen_fill::x#2 = (byte) screen_fill::x#1 [phi:screen_fill::@2->screen_fill::@2#0] -- register_copy + //SEG206 [111] phi (byte*) screen_fill::screen#2 = (byte*) screen_fill::screen#1 [phi:screen_fill::@2->screen_fill::@2#1] -- register_copy + //SEG207 screen_fill::@2 b2: - //SEG218 [115] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) -- _deref_pbuz1=vbuc1 + //SEG208 [112] *((byte*) screen_fill::screen#2) ← (const byte) screen_fill::ch#0 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#2 screen_fill::x#2 ] ) -- _deref_pbuz1=vbuc1 lda #ch ldy #0 sta (screen),y - //SEG219 [116] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) -- pbuz1=_inc_pbuz1 + //SEG209 [113] (byte*) screen_fill::screen#1 ← ++ (byte*) screen_fill::screen#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#2 ] ) -- pbuz1=_inc_pbuz1 inc screen bne !+ inc screen+1 !: - //SEG220 [117] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuxx=_inc_vbuxx + //SEG210 [114] (byte) screen_fill::x#1 ← ++ (byte) screen_fill::x#2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG221 [118] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG211 [115] if((byte) screen_fill::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto screen_fill::@2 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ( main:2::screen_fill:17 [ screen_fill::y#4 screen_fill::screen#1 screen_fill::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$28 bne b2 - //SEG222 screen_fill::@3 - //SEG223 [119] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG212 screen_fill::@3 + //SEG213 [116] (byte) screen_fill::y#1 ← ++ (byte) screen_fill::y#4 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1=_inc_vbuz1 inc y - //SEG224 [120] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG214 [117] if((byte) screen_fill::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto screen_fill::@1 [ screen_fill::screen#1 screen_fill::y#1 ] ( main:2::screen_fill:17 [ screen_fill::screen#1 screen_fill::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda y cmp #$19 bne b1 - //SEG225 screen_fill::@return - //SEG226 [121] return [ ] ( main:2::screen_fill:17 [ ] ) + //SEG215 screen_fill::@return + //SEG216 [118] return [ ] ( main:2::screen_fill:17 [ ] ) rts } -//SEG227 bitmap_clear +//SEG217 bitmap_clear bitmap_clear: { .label bitmap = 3 .label y = 2 .label _3 = 3 - //SEG228 [122] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 + //SEG218 [119] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0+(byte/signed byte/word/signed word/dword/signed dword) 0) w= *((const byte[256]) bitmap_plot_ylo#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ bitmap_clear::$3 ] ( main:2::bitmap_clear:15 [ bitmap_clear::$3 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 lda bitmap_plot_ylo+0 sta _3 lda bitmap_plot_yhi+0 sta _3+1 - //SEG229 [123] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) + //SEG219 [120] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3 [ bitmap_clear::bitmap#5 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#5 ] ) // (byte*~) bitmap_clear::bitmap#5 = (byte*)(word~) bitmap_clear::$3 // register copy zp ZP_WORD:3 - //SEG230 [124] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] - //SEG231 [124] phi (byte) bitmap_clear::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear->bitmap_clear::@1#0] -- vbuz1=vbuc1 + //SEG220 [121] phi from bitmap_clear to bitmap_clear::@1 [phi:bitmap_clear->bitmap_clear::@1] + //SEG221 [121] phi (byte) bitmap_clear::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear->bitmap_clear::@1#0] -- vbuz1=vbuc1 lda #0 sta y - //SEG232 [124] phi (byte*) bitmap_clear::bitmap#3 = (byte*~) bitmap_clear::bitmap#5 [phi:bitmap_clear->bitmap_clear::@1#1] -- register_copy - //SEG233 [124] phi from bitmap_clear::@3 to bitmap_clear::@1 [phi:bitmap_clear::@3->bitmap_clear::@1] - //SEG234 [124] phi (byte) bitmap_clear::y#4 = (byte) bitmap_clear::y#1 [phi:bitmap_clear::@3->bitmap_clear::@1#0] -- register_copy - //SEG235 [124] phi (byte*) bitmap_clear::bitmap#3 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@3->bitmap_clear::@1#1] -- register_copy - //SEG236 bitmap_clear::@1 + //SEG222 [121] phi (byte*) bitmap_clear::bitmap#3 = (byte*~) bitmap_clear::bitmap#5 [phi:bitmap_clear->bitmap_clear::@1#1] -- register_copy + //SEG223 [121] phi from bitmap_clear::@3 to bitmap_clear::@1 [phi:bitmap_clear::@3->bitmap_clear::@1] + //SEG224 [121] phi (byte) bitmap_clear::y#4 = (byte) bitmap_clear::y#1 [phi:bitmap_clear::@3->bitmap_clear::@1#0] -- register_copy + //SEG225 [121] phi (byte*) bitmap_clear::bitmap#3 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@3->bitmap_clear::@1#1] -- register_copy + //SEG226 bitmap_clear::@1 b1: - //SEG237 [125] phi from bitmap_clear::@1 to bitmap_clear::@2 [phi:bitmap_clear::@1->bitmap_clear::@2] - //SEG238 [125] phi (byte) bitmap_clear::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear::@1->bitmap_clear::@2#0] -- vbuxx=vbuc1 + //SEG227 [122] phi from bitmap_clear::@1 to bitmap_clear::@2 [phi:bitmap_clear::@1->bitmap_clear::@2] + //SEG228 [122] phi (byte) bitmap_clear::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_clear::@1->bitmap_clear::@2#0] -- vbuxx=vbuc1 ldx #0 - //SEG239 [125] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#3 [phi:bitmap_clear::@1->bitmap_clear::@2#1] -- register_copy - //SEG240 [125] phi from bitmap_clear::@2 to bitmap_clear::@2 [phi:bitmap_clear::@2->bitmap_clear::@2] - //SEG241 [125] phi (byte) bitmap_clear::x#2 = (byte) bitmap_clear::x#1 [phi:bitmap_clear::@2->bitmap_clear::@2#0] -- register_copy - //SEG242 [125] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@2->bitmap_clear::@2#1] -- register_copy - //SEG243 bitmap_clear::@2 + //SEG229 [122] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#3 [phi:bitmap_clear::@1->bitmap_clear::@2#1] -- register_copy + //SEG230 [122] phi from bitmap_clear::@2 to bitmap_clear::@2 [phi:bitmap_clear::@2->bitmap_clear::@2] + //SEG231 [122] phi (byte) bitmap_clear::x#2 = (byte) bitmap_clear::x#1 [phi:bitmap_clear::@2->bitmap_clear::@2#0] -- register_copy + //SEG232 [122] phi (byte*) bitmap_clear::bitmap#2 = (byte*) bitmap_clear::bitmap#1 [phi:bitmap_clear::@2->bitmap_clear::@2#1] -- register_copy + //SEG233 bitmap_clear::@2 b2: - //SEG244 [126] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) -- _deref_pbuz1=vbuc1 + //SEG234 [123] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#2 bitmap_clear::x#2 ] ) -- _deref_pbuz1=vbuc1 lda #0 tay sta (bitmap),y - //SEG245 [127] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) -- pbuz1=_inc_pbuz1 + //SEG235 [124] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#2 ] ) -- pbuz1=_inc_pbuz1 inc bitmap bne !+ inc bitmap+1 !: - //SEG246 [128] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuxx=_inc_vbuxx + //SEG236 [125] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG247 [129] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG237 [126] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::y#4 bitmap_clear::bitmap#1 bitmap_clear::x#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$c8 bne b2 - //SEG248 bitmap_clear::@3 - //SEG249 [130] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG238 bitmap_clear::@3 + //SEG239 [127] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1=_inc_vbuz1 inc y - //SEG250 [131] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG240 [128] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ( main:2::bitmap_clear:15 [ bitmap_clear::bitmap#1 bitmap_clear::y#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda y cmp #$28 bne b1 - //SEG251 bitmap_clear::@return - //SEG252 [132] return [ ] ( main:2::bitmap_clear:15 [ ] ) + //SEG241 bitmap_clear::@return + //SEG242 [129] return [ ] ( main:2::bitmap_clear:15 [ ] ) rts } -//SEG253 bitmap_init +//SEG243 bitmap_init bitmap_init: { .label _3 = 2 .label yoffs = 3 - //SEG254 [134] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] - //SEG255 [134] phi (byte) bitmap_init::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 + //SEG244 [131] phi from bitmap_init to bitmap_init::@1 [phi:bitmap_init->bitmap_init::@1] + //SEG245 [131] phi (byte) bitmap_init::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init->bitmap_init::@1#0] -- vbuxx=vbuc1 ldx #0 - //SEG256 [134] phi (byte) bitmap_init::bits#3 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 + //SEG246 [131] phi (byte) bitmap_init::bits#3 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init->bitmap_init::@1#1] -- vbuaa=vbuc1 lda #$80 - //SEG257 [134] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] - //SEG258 [134] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy - //SEG259 [134] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy - //SEG260 bitmap_init::@1 + //SEG247 [131] phi from bitmap_init::@2 to bitmap_init::@1 [phi:bitmap_init::@2->bitmap_init::@1] + //SEG248 [131] phi (byte) bitmap_init::x#2 = (byte) bitmap_init::x#1 [phi:bitmap_init::@2->bitmap_init::@1#0] -- register_copy + //SEG249 [131] phi (byte) bitmap_init::bits#3 = (byte) bitmap_init::bits#4 [phi:bitmap_init::@2->bitmap_init::@1#1] -- register_copy + //SEG250 bitmap_init::@1 b1: - //SEG261 [135] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG251 [132] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3 [ bitmap_init::bits#3 bitmap_init::x#2 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#3 bitmap_init::x#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_bit,x - //SEG262 [136] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuaa=vbuaa_ror_1 + //SEG252 [133] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuaa=vbuaa_ror_1 lsr - //SEG263 [137] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuaa_neq_0_then_la1 + //SEG253 [134] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10 [ bitmap_init::x#2 bitmap_init::bits#1 ] ( main:2::bitmap_init:13 [ bitmap_init::x#2 bitmap_init::bits#1 ] ) -- vbuaa_neq_0_then_la1 cmp #0 bne b2 - //SEG264 [138] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] - //SEG265 [138] phi (byte) bitmap_init::bits#4 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 + //SEG254 [135] phi from bitmap_init::@1 to bitmap_init::@2 [phi:bitmap_init::@1->bitmap_init::@2] + //SEG255 [135] phi (byte) bitmap_init::bits#4 = (byte/word/signed word/dword/signed dword) 128 [phi:bitmap_init::@1->bitmap_init::@2#0] -- vbuaa=vbuc1 lda #$80 - //SEG266 bitmap_init::@2 + //SEG256 bitmap_init::@2 b2: - //SEG267 [139] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuxx=_inc_vbuxx + //SEG257 [136] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG268 [140] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuxx_neq_0_then_la1 + //SEG258 [137] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1 [ bitmap_init::bits#4 bitmap_init::x#1 ] ( main:2::bitmap_init:13 [ bitmap_init::bits#4 bitmap_init::x#1 ] ) -- vbuxx_neq_0_then_la1 cpx #0 bne b1 - //SEG269 [141] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] - //SEG270 [141] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP#0 [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 + //SEG259 [138] phi from bitmap_init::@2 to bitmap_init::@3 [phi:bitmap_init::@2->bitmap_init::@3] + //SEG260 [138] phi (byte*) bitmap_init::yoffs#2 = (const byte*) BITMAP#0 [phi:bitmap_init::@2->bitmap_init::@3#0] -- pbuz1=pbuc1 lda #BITMAP sta yoffs+1 - //SEG271 [141] phi (byte) bitmap_init::y#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 + //SEG261 [138] phi (byte) bitmap_init::y#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:bitmap_init::@2->bitmap_init::@3#1] -- vbuxx=vbuc1 ldx #0 - //SEG272 [141] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] - //SEG273 [141] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy - //SEG274 [141] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy - //SEG275 bitmap_init::@3 + //SEG262 [138] phi from bitmap_init::@4 to bitmap_init::@3 [phi:bitmap_init::@4->bitmap_init::@3] + //SEG263 [138] phi (byte*) bitmap_init::yoffs#2 = (byte*) bitmap_init::yoffs#4 [phi:bitmap_init::@4->bitmap_init::@3#0] -- register_copy + //SEG264 [138] phi (byte) bitmap_init::y#2 = (byte) bitmap_init::y#1 [phi:bitmap_init::@4->bitmap_init::@3#1] -- register_copy + //SEG265 bitmap_init::@3 b3: - //SEG276 [142] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) -- vbuz1=vbuxx_band_vbuc1 + //SEG266 [139] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 ] ) -- vbuz1=vbuxx_band_vbuc1 txa and #7 sta _3 - //SEG277 [143] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) -- vbuaa=_lo_pbuz1 + //SEG267 [140] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$3 bitmap_init::$4 ] ) -- vbuaa=_lo_pbuz1 lda yoffs - //SEG278 [144] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) -- vbuaa=vbuz1_bor_vbuaa + //SEG268 [141] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$5 ] ) -- vbuaa=vbuz1_bor_vbuaa ora _3 - //SEG279 [145] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG269 [142] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_ylo,x - //SEG280 [146] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) -- vbuaa=_hi_pbuz1 + //SEG270 [143] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$6 ] ) -- vbuaa=_hi_pbuz1 lda yoffs+1 - //SEG281 [147] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa + //SEG271 [144] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa sta bitmap_plot_yhi,x - //SEG282 [148] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) -- vbuaa=vbuxx_band_vbuc1 + //SEG272 [145] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 bitmap_init::$7 ] ) -- vbuaa=vbuxx_band_vbuc1 txa and #7 - //SEG283 [149] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- vbuaa_neq_vbuc1_then_la1 + //SEG273 [146] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#2 ] ) -- vbuaa_neq_vbuc1_then_la1 cmp #7 bne b4 - //SEG284 bitmap_init::@7 - //SEG285 [150] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1 + //SEG274 bitmap_init::@7 + //SEG275 [147] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ( main:2::bitmap_init:13 [ bitmap_init::y#2 bitmap_init::yoffs#1 ] ) -- pbuz1=pbuz1_plus_vwuc1 clc lda yoffs adc #<$28*8 @@ -8657,22 +8079,22 @@ bitmap_init: { lda yoffs+1 adc #>$28*8 sta yoffs+1 - //SEG286 [151] phi from bitmap_init::@3 bitmap_init::@7 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4] - //SEG287 [151] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4#0] -- register_copy - //SEG288 bitmap_init::@4 + //SEG276 [148] phi from bitmap_init::@3 bitmap_init::@7 to bitmap_init::@4 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4] + //SEG277 [148] phi (byte*) bitmap_init::yoffs#4 = (byte*) bitmap_init::yoffs#2 [phi:bitmap_init::@3/bitmap_init::@7->bitmap_init::@4#0] -- register_copy + //SEG278 bitmap_init::@4 b4: - //SEG289 [152] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuxx=_inc_vbuxx + //SEG279 [149] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuxx=_inc_vbuxx inx - //SEG290 [153] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuxx_neq_0_then_la1 + //SEG280 [150] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ( main:2::bitmap_init:13 [ bitmap_init::y#1 bitmap_init::yoffs#4 ] ) -- vbuxx_neq_0_then_la1 cpx #0 bne b3 - //SEG291 bitmap_init::@return - //SEG292 [154] return [ ] ( main:2::bitmap_init:13 [ ] ) + //SEG281 bitmap_init::@return + //SEG282 [151] return [ ] ( main:2::bitmap_init:13 [ ] ) rts - //SEG293 [155] phi from bitmap_init::@1 to bitmap_init::@10 [phi:bitmap_init::@1->bitmap_init::@10] - //SEG294 bitmap_init::@10 - //SEG295 [138] phi from bitmap_init::@10 to bitmap_init::@2 [phi:bitmap_init::@10->bitmap_init::@2] - //SEG296 [138] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@10->bitmap_init::@2#0] -- register_copy + //SEG283 [152] phi from bitmap_init::@1 to bitmap_init::@10 [phi:bitmap_init::@1->bitmap_init::@10] + //SEG284 bitmap_init::@10 + //SEG285 [135] phi from bitmap_init::@10 to bitmap_init::@2 [phi:bitmap_init::@10->bitmap_init::@2] + //SEG286 [135] phi (byte) bitmap_init::bits#4 = (byte) bitmap_init::bits#1 [phi:bitmap_init::@10->bitmap_init::@2#0] -- register_copy } x_start: .word $a, $14, $1e, $1e y_start: .byte $a, $a, $a, $14 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/line-anim.sym b/src/test/java/dk/camelot64/kickc/test/ref/line-anim.sym index 7b8bd62a4..692490052 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/line-anim.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/line-anim.sym @@ -79,14 +79,14 @@ (byte*) bitmap_init::yoffs#2 yoffs zp ZP_WORD:3 6.111111111111112 (byte*) bitmap_init::yoffs#4 yoffs zp ZP_WORD:3 11.0 (void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y) -(word~) bitmap_plot::$1 $1 zp ZP_WORD:11 4.0 +(word~) bitmap_plot::$1 $1 zp ZP_WORD:7 4.0 (byte~) bitmap_plot::$2 reg byte a 4.0 -(word~) bitmap_plot::$3 $3 zp ZP_WORD:7 1.0 +(word~) bitmap_plot::$3 $3 zp ZP_WORD:5 1.0 (label) bitmap_plot::@return (byte*) bitmap_plot::plotter -(byte*) bitmap_plot::plotter#1 plotter zp ZP_WORD:7 3.0 +(byte*) bitmap_plot::plotter#1 plotter zp ZP_WORD:5 3.0 (word) bitmap_plot::x -(word) bitmap_plot::x#0 x zp ZP_WORD:5 3.0 +(word) bitmap_plot::x#0 x zp ZP_WORD:3 3.0 (byte) bitmap_plot::y (byte) bitmap_plot::y#0 reg byte y 15.0 (byte[256]) bitmap_plot_bit @@ -98,8 +98,8 @@ (byte[4]) delay (const byte[4]) delay#0 delay = { fill( 4, 0) } (signed word()) divr16s((signed word) divr16s::dividend , (signed word) divr16s::divisor , (signed word) divr16s::rem) -(signed word~) divr16s::$11 $11 zp ZP_WORD:11 1.0 -(signed word~) divr16s::$7 $7 zp ZP_WORD:9 2.0 +(signed word~) divr16s::$11 $11 zp ZP_WORD:9 1.0 +(signed word~) divr16s::$7 $7 zp ZP_WORD:7 2.0 (label) divr16s::@1 (label) divr16s::@11 (label) divr16s::@15 @@ -116,28 +116,28 @@ (word) divr16s::dividendu (word) divr16s::dividendu#3 dividendu zp ZP_WORD:3 0.2857142857142857 (signed word) divr16s::divisor -(signed word) divr16s::divisor#0 divisor zp ZP_WORD:11 0.6666666666666666 +(signed word) divr16s::divisor#0 divisor zp ZP_WORD:9 0.6666666666666666 (word) divr16s::divisoru -(word) divr16s::divisoru#3 divisoru zp ZP_WORD:11 3.0 -(word~) divr16s::divisoru#4 divisoru zp ZP_WORD:11 4.0 -(word~) divr16s::divisoru#5 divisoru zp ZP_WORD:11 4.0 +(word) divr16s::divisoru#3 divisoru zp ZP_WORD:9 3.0 +(word~) divr16s::divisoru#4 divisoru zp ZP_WORD:9 4.0 +(word~) divr16s::divisoru#5 divisoru zp ZP_WORD:9 4.0 (byte) divr16s::neg (byte) divr16s::neg#2 reg byte y 2.0 (byte) divr16s::neg#3 reg byte y 1.0 (byte) divr16s::neg#4 reg byte y 0.8571428571428571 (signed word) divr16s::rem -(signed word) divr16s::rem#0 rem zp ZP_WORD:9 2.0 +(signed word) divr16s::rem#0 rem zp ZP_WORD:7 2.0 (word) divr16s::remu -(word) divr16s::remu#3 remu zp ZP_WORD:9 0.6666666666666666 -(word~) divr16s::remu#7 remu zp ZP_WORD:9 4.0 -(word~) divr16s::remu#8 remu zp ZP_WORD:9 4.0 +(word) divr16s::remu#3 remu zp ZP_WORD:7 0.6666666666666666 +(word~) divr16s::remu#7 remu zp ZP_WORD:7 4.0 +(word~) divr16s::remu#8 remu zp ZP_WORD:7 4.0 (word) divr16s::resultu -(word) divr16s::resultu#0 resultu zp ZP_WORD:5 0.6666666666666666 +(word) divr16s::resultu#0 resultu zp ZP_WORD:5 1.0 (signed word) divr16s::return (signed word) divr16s::return#1 return zp ZP_WORD:5 4.0 (signed word) divr16s::return#2 return zp ZP_WORD:5 2.0 (signed word) divr16s::return#3 return zp ZP_WORD:5 4.0 -(signed word~) divr16s::return#7 return zp ZP_WORD:5 2.0 +(signed word~) divr16s::return#7 return zp ZP_WORD:5 4.0 (word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem) (byte~) divr16u::$1 reg byte a 202.0 (byte~) divr16u::$2 reg byte a 202.0 @@ -152,7 +152,7 @@ (word) divr16u::dividend#1 dividend zp ZP_WORD:3 1.0 (word) divr16u::dividend#2 dividend zp ZP_WORD:3 43.57142857142858 (word) divr16u::divisor -(word) divr16u::divisor#0 divisor zp ZP_WORD:11 11.333333333333332 +(word) divr16u::divisor#0 divisor zp ZP_WORD:9 11.333333333333332 (byte) divr16u::i (byte) divr16u::i#1 reg byte x 151.5 (byte) divr16u::i#2 reg byte x 15.538461538461538 @@ -161,13 +161,13 @@ (word) divr16u::quotient#2 quotient zp ZP_WORD:5 101.0 (word) divr16u::quotient#3 quotient zp ZP_WORD:5 25.25 (word) divr16u::rem -(word) divr16u::rem#0 rem zp ZP_WORD:9 75.75 -(word) divr16u::rem#1 rem zp ZP_WORD:9 202.0 -(word) divr16u::rem#10 rem zp ZP_WORD:9 15.25 -(word) divr16u::rem#2 rem zp ZP_WORD:9 202.0 -(word) divr16u::rem#3 rem zp ZP_WORD:9 2.0 -(word) divr16u::rem#4 rem zp ZP_WORD:9 204.0 -(word) divr16u::rem#5 rem zp ZP_WORD:9 101.0 +(word) divr16u::rem#0 rem zp ZP_WORD:7 75.75 +(word) divr16u::rem#1 rem zp ZP_WORD:7 202.0 +(word) divr16u::rem#2 rem zp ZP_WORD:7 202.0 +(word) divr16u::rem#3 rem zp ZP_WORD:7 2.0 +(word) divr16u::rem#4 rem zp ZP_WORD:7 204.0 +(word) divr16u::rem#5 rem zp ZP_WORD:7 101.0 +(word) divr16u::rem#9 rem zp ZP_WORD:7 101.0 (word) divr16u::return (word) divr16u::return#0 return zp ZP_WORD:5 61.0 (word) divr16u::return#2 return zp ZP_WORD:5 4.0 @@ -213,11 +213,11 @@ (void()) point_init((byte) point_init::point_idx) (byte~) point_init::$13 reg byte a 4.0 (byte~) point_init::$14 reg byte a 2.0 -(word~) point_init::$16 $16 zp ZP_WORD:5 4.0 -(word~) point_init::$17 $17 zp ZP_WORD:5 4.0 -(word~) point_init::$18 $18 zp ZP_WORD:5 4.0 -(signed word~) point_init::$4 $4 zp ZP_WORD:14 2.0 -(signed word~) point_init::$5 $5 zp ZP_WORD:5 4.0 +(word~) point_init::$16 $16 zp ZP_WORD:3 4.0 +(word~) point_init::$17 $17 zp ZP_WORD:3 4.0 +(word~) point_init::$18 $18 zp ZP_WORD:3 4.0 +(signed word~) point_init::$4 $4 zp ZP_WORD:7 2.0 +(signed word~) point_init::$5 $5 zp ZP_WORD:3 4.0 (label) point_init::@1 (label) point_init::@10 (label) point_init::@11 @@ -232,47 +232,38 @@ (bool~) point_init::abs16s1_$0 (word~) point_init::abs16s1_$1 (signed word~) point_init::abs16s1_$2 -(signed word) point_init::abs16s1_$2#0 abs16s1_$2 zp ZP_WORD:5 2.0 +(signed word) point_init::abs16s1_$2#0 abs16s1_$2 zp ZP_WORD:3 2.0 (word~) point_init::abs16s1_$3 (label) point_init::abs16s1_@1 (label) point_init::abs16s1_@return (word) point_init::abs16s1_return -(word) point_init::abs16s1_return#2 abs16s1_return zp ZP_WORD:5 1.0 -(word~) point_init::abs16s1_return#5 abs16s1_return zp ZP_WORD:5 4.0 -(word~) point_init::abs16s1_return#6 abs16s1_return zp ZP_WORD:5 4.0 +(word) point_init::abs16s1_return#2 abs16s1_return zp ZP_WORD:3 1.0 +(word~) point_init::abs16s1_return#5 abs16s1_return zp ZP_WORD:3 4.0 +(word~) point_init::abs16s1_return#6 abs16s1_return zp ZP_WORD:3 4.0 (signed word) point_init::abs16s1_w (label) point_init::abs16s2 (bool~) point_init::abs16s2_$0 (word~) point_init::abs16s2_$1 (signed word~) point_init::abs16s2_$2 -(signed word) point_init::abs16s2_$2#0 abs16s2_$2 zp ZP_WORD:7 2.0 +(signed word) point_init::abs16s2_$2#0 abs16s2_$2 zp ZP_WORD:5 2.0 (word~) point_init::abs16s2_$3 (label) point_init::abs16s2_@1 (label) point_init::abs16s2_@return (word) point_init::abs16s2_return -(word) point_init::abs16s2_return#2 abs16s2_return zp ZP_WORD:7 6.0 -(word~) point_init::abs16s2_return#5 abs16s2_return zp ZP_WORD:7 4.0 -(word~) point_init::abs16s2_return#6 abs16s2_return zp ZP_WORD:7 4.0 +(word) point_init::abs16s2_return#2 abs16s2_return zp ZP_WORD:5 6.0 +(word~) point_init::abs16s2_return#5 abs16s2_return zp ZP_WORD:5 4.0 +(word~) point_init::abs16s2_return#6 abs16s2_return zp ZP_WORD:5 4.0 (signed word) point_init::abs16s2_w (byte) point_init::point_idx -(byte) point_init::point_idx#0 point_idx zp ZP_BYTE:2 0.6969696969696968 +(byte) point_init::point_idx#0 point_idx zp ZP_BYTE:2 0.71875 (byte) point_init::point_idx1 -(byte) point_init::point_idx1#0 point_idx1 zp ZP_BYTE:13 0.36363636363636365 +(byte) point_init::point_idx1#0 point_idx1 zp ZP_BYTE:11 0.375 (signed word) point_init::x_diff -(signed word) point_init::x_diff#1 x_diff zp ZP_WORD:11 0.5555555555555556 +(signed word) point_init::x_diff#1 x_diff zp ZP_WORD:9 0.5555555555555556 (signed word) point_init::x_stepf (signed word) point_init::x_stepf#0 x_stepf zp ZP_WORD:5 4.0 (signed word) point_init::y_diff -(signed word) point_init::y_diff#0 y_diff zp ZP_WORD:14 0.5 -(signed word) rem16s -(signed word) rem16s#13 rem16s zp ZP_WORD:3 0.9999999999999999 -(signed word) rem16s#15 rem16s zp ZP_WORD:3 0.7222222222222223 -(signed word) rem16s#2 rem16s zp ZP_WORD:3 2.0 -(signed word) rem16s#3 rem16s zp ZP_WORD:3 0.75 -(signed word~) rem16s#57 rem16s zp ZP_WORD:3 4.0 -(word) rem16u -(word) rem16u#18 rem16u zp ZP_WORD:9 0.9999999999999999 -(word) rem16u#21 rem16u zp ZP_WORD:9 0.7222222222222223 +(signed word) point_init::y_diff#0 y_diff zp ZP_WORD:7 0.5 (void()) screen_fill((byte*) screen_fill::screen , (byte) screen_fill::ch) (label) screen_fill::@1 (label) screen_fill::@2 @@ -308,11 +299,10 @@ (const byte[4]) y_start#0 y_start = { (byte/signed byte/word/signed word/dword/signed dword) 10, (byte/signed byte/word/signed word/dword/signed dword) 10, (byte/signed byte/word/signed word/dword/signed dword) 10, (byte/signed byte/word/signed word/dword/signed dword) 20 } zp ZP_BYTE:2 [ main::i#2 main::i#1 point_init::point_idx#0 screen_fill::y#4 screen_fill::y#1 bitmap_clear::y#4 bitmap_clear::y#1 bitmap_init::$3 ] -zp ZP_WORD:3 [ rem16s#15 rem16s#13 rem16s#3 rem16s#2 rem16s#57 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#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 ] -zp ZP_WORD:5 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 bitmap_plot::x#0 point_init::$5 point_init::$16 point_init::$17 point_init::$18 ] -zp ZP_WORD:7 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_$2#0 bitmap_plot::$3 bitmap_plot::plotter#1 ] -zp ZP_WORD:9 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 rem16u#21 rem16u#18 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::$7 ] -zp ZP_WORD:11 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::$11 point_init::x_diff#1 bitmap_plot::$1 ] +zp ZP_WORD:3 [ point_init::abs16s1_return#2 point_init::abs16s1_return#5 point_init::abs16s1_return#6 point_init::abs16s1_$2#0 divr16s::dividendu#3 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 screen_fill::screen#2 screen_fill::screen#3 screen_fill::screen#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 bitmap_plot::x#0 point_init::$5 point_init::$16 point_init::$17 point_init::$18 ] +zp ZP_WORD:5 [ point_init::abs16s2_return#2 point_init::abs16s2_return#5 point_init::abs16s2_return#6 point_init::abs16s2_$2#0 divr16s::return#2 divr16s::return#1 divr16s::return#7 divr16s::resultu#0 divr16s::return#3 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 point_init::x_stepf#0 bitmap_plot::$3 bitmap_plot::plotter#1 ] +zp ZP_WORD:7 [ divr16s::remu#3 divr16s::remu#7 divr16s::remu#8 divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 divr16s::rem#0 divr16s::$7 point_init::$4 point_init::y_diff#0 bitmap_plot::$1 ] +zp ZP_WORD:9 [ divr16s::divisoru#3 divr16s::divisoru#4 divr16s::divisoru#5 divr16s::divisor#0 divr16u::divisor#0 divr16s::$11 point_init::x_diff#1 ] reg byte y [ divr16s::neg#4 divr16s::neg#2 divr16s::neg#3 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] reg byte x [ screen_fill::x#2 screen_fill::x#1 ] @@ -323,8 +313,7 @@ reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ] reg byte x [ main::$9 ] reg byte y [ bitmap_plot::y#0 ] reg byte a [ bitmap_plot::$2 ] -zp ZP_BYTE:13 [ point_init::point_idx1#0 ] -zp ZP_WORD:14 [ point_init::$4 point_init::y_diff#0 ] +zp ZP_BYTE:11 [ point_init::point_idx1#0 ] reg byte a [ point_init::$13 ] reg byte a [ point_init::$14 ] reg byte a [ divr16u::$1 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.asm b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.asm index aec4b65fb..4248b15a1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.asm @@ -1,33 +1,17 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - .label w1 = 4 - .label w2 = 2 jsr main main: { - lda #<0 - sta w1 - sta w1+1 jsr incw1 - lda #<0 - sta w2 - sta w2+1 jsr incw2 jsr incw1 jsr incw2 rts } incw2: { - inc w2 - bne !+ - inc w2+1 - !: rts } incw1: { - inc w1 - bne !+ - inc w1+1 - !: rts } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.cfg b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.cfg index c70d126de..d3845c0c1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.cfg @@ -9,34 +9,32 @@ [3] phi() [ ] ( ) main: scope:[main] from @3 [4] phi() [ ] ( main:2 [ ] ) - [5] call incw1 [ w1#11 ] ( main:2 [ w1#11 ] ) + [5] call incw1 [ ] ( main:2 [ ] ) to:main::@1 main::@1: scope:[main] from main - [6] phi() [ w1#11 ] ( main:2 [ w1#11 ] ) - [7] call incw2 [ w2#11 w1#11 ] ( main:2 [ w2#11 w1#11 ] ) + [6] phi() [ ] ( main:2 [ ] ) + [7] call incw2 [ ] ( main:2 [ ] ) to:main::@2 main::@2: scope:[main] from main::@1 - [8] phi() [ w2#11 w1#11 ] ( main:2 [ w2#11 w1#11 ] ) - [9] call incw1 [ w2#11 ] ( main:2 [ w2#11 ] ) + [8] phi() [ ] ( main:2 [ ] ) + [9] call incw1 [ ] ( main:2 [ ] ) to:main::@3 main::@3: scope:[main] from main::@2 - [10] phi() [ w2#11 ] ( main:2 [ w2#11 ] ) + [10] phi() [ ] ( main:2 [ ] ) [11] call incw2 [ ] ( main:2 [ ] ) to:main::@return main::@return: scope:[main] from main::@3 [12] return [ ] ( main:2 [ ] ) to:@return incw2: scope:[incw2] from main::@1 main::@3 - [13] (word) w2#10 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@3/(word) w2#11 ) [ w2#10 ] ( main:2::incw2:7 [ w1#11 w2#10 ] main:2::incw2:11 [ w2#10 ] ) - [14] (word) w2#11 ← ++ (word) w2#10 [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) + [13] phi() [ ] ( main:2::incw2:7 [ ] main:2::incw2:11 [ ] ) to:incw2::@return incw2::@return: scope:[incw2] from incw2 - [15] return [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) + [14] return [ ] ( main:2::incw2:7 [ ] main:2::incw2:11 [ ] ) to:@return incw1: scope:[incw1] from main main::@2 - [16] (word) w1#10 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(word) w1#11 ) [ w1#10 ] ( main:2::incw1:5 [ w1#10 ] main:2::incw1:9 [ w2#11 w1#10 ] ) - [17] (word) w1#11 ← ++ (word) w1#10 [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) + [15] phi() [ ] ( main:2::incw1:5 [ ] main:2::incw1:9 [ ] ) to:incw1::@return incw1::@return: scope:[incw1] from incw1 - [18] return [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) + [16] return [ ] ( main:2::incw1:5 [ ] main:2::incw1:9 [ ] ) to:@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.log index 8ecb95cc1..7b5bd3854 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.log @@ -76,90 +76,54 @@ incw2::@return: scope:[incw2] from incw2 to:@end @end: scope:[] from @3 +Eliminating unused variable (word) w1 and assignment [0] (word) w1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (word) w2 and assignment [1] (word) w2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating unused variable - keeping the call (void~) main::$0 Eliminating unused variable - keeping the call (void~) main::$1 Eliminating unused variable - keeping the call (void~) main::$2 Eliminating unused variable - keeping the call (void~) main::$3 +Eliminating unused variable w1(null) and assignment [7] w1(null) ← ++ w1(null) +Eliminating unused variable w2(null) and assignment [9] w2(null) ← ++ w2(null) Removing empty block @1 Removing empty block @2 PROCEDURE MODIFY VARIABLE ANALYSIS -main modifies w1 -main modifies w2 -incw1 modifies w1 -incw2 modifies w2 -Completing Phi functions... -Completing Phi functions... Completing Phi functions... CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN @begin: scope:[] from - (word) w1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (word) w2#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@3 main: scope:[main] from @3 - (word) w2#16 ← phi( @3/(word) w2#15 ) - (word) w1#13 ← phi( @3/(word) w1#16 ) call incw1 to:main::@1 main::@1: scope:[main] from main - (word) w2#13 ← phi( main/(word) w2#16 ) - (word) w1#7 ← phi( main/(word) w1#5 ) - (word) w1#1 ← (word) w1#7 call incw2 to:main::@2 main::@2: scope:[main] from main::@1 - (word) w1#14 ← phi( main::@1/(word) w1#1 ) - (word) w2#7 ← phi( main::@1/(word) w2#5 ) - (word) w2#1 ← (word) w2#7 call incw1 to:main::@3 main::@3: scope:[main] from main::@2 - (word) w2#14 ← phi( main::@2/(word) w2#1 ) - (word) w1#8 ← phi( main::@2/(word) w1#5 ) - (word) w1#2 ← (word) w1#8 call incw2 to:main::@4 main::@4: scope:[main] from main::@3 - (word) w1#15 ← phi( main::@3/(word) w1#2 ) - (word) w2#8 ← phi( main::@3/(word) w2#5 ) - (word) w2#2 ← (word) w2#8 to:main::@return main::@return: scope:[main] from main::@4 - (word) w2#9 ← phi( main::@4/(word) w2#2 ) - (word) w1#9 ← phi( main::@4/(word) w1#15 ) - (word) w1#3 ← (word) w1#9 - (word) w2#3 ← (word) w2#9 return to:@return incw1: scope:[incw1] from main main::@2 - (word) w1#10 ← phi( main/(word) w1#13 main::@2/(word) w1#14 ) - (word) w1#4 ← ++ (word) w1#10 to:incw1::@return incw1::@return: scope:[incw1] from incw1 - (word) w1#11 ← phi( incw1/(word) w1#4 ) - (word) w1#5 ← (word) w1#11 return to:@return incw2: scope:[incw2] from main::@1 main::@3 - (word) w2#10 ← phi( main::@1/(word) w2#13 main::@3/(word) w2#14 ) - (word) w2#4 ← ++ (word) w2#10 to:incw2::@return incw2::@return: scope:[incw2] from incw2 - (word) w2#11 ← phi( incw2/(word) w2#4 ) - (word) w2#5 ← (word) w2#11 return to:@return @3: scope:[] from @begin - (word) w2#15 ← phi( @begin/(word) w2#0 ) - (word) w1#16 ← phi( @begin/(word) w1#0 ) call main to:@4 @4: scope:[] from @3 - (word) w2#12 ← phi( @3/(word) w2#3 ) - (word) w1#12 ← phi( @3/(word) w1#3 ) - (word) w1#6 ← (word) w1#12 - (word) w2#6 ← (word) w2#12 to:@end @end: scope:[] from @4 @@ -178,99 +142,12 @@ SYMBOL TABLE SSA (label) main::@3 (label) main::@4 (label) main::@return -(word) w1 -(word) w1#0 -(word) w1#1 -(word) w1#10 -(word) w1#11 -(word) w1#12 -(word) w1#13 -(word) w1#14 -(word) w1#15 -(word) w1#16 -(word) w1#2 -(word) w1#3 -(word) w1#4 -(word) w1#5 -(word) w1#6 -(word) w1#7 -(word) w1#8 -(word) w1#9 -(word) w2 -(word) w2#0 -(word) w2#1 -(word) w2#10 -(word) w2#11 -(word) w2#12 -(word) w2#13 -(word) w2#14 -(word) w2#15 -(word) w2#16 -(word) w2#2 -(word) w2#3 -(word) w2#4 -(word) w2#5 -(word) w2#6 -(word) w2#7 -(word) w2#8 -(word) w2#9 OPTIMIZING CONTROL FLOW GRAPH -Not aliassing across scopes: w1#13 w1#16 -Not aliassing across scopes: w2#16 w2#15 -Not aliassing across scopes: w1#7 w1#5 -Not aliassing across scopes: w2#7 w2#5 -Not aliassing across scopes: w1#8 w1#5 -Not aliassing across scopes: w2#8 w2#5 -Not aliassing across scopes: w1#10 w1#13 -Not aliassing across scopes: w2#10 w2#13 -Not aliassing across scopes: w1#12 w1#3 -Not aliassing across scopes: w2#12 w2#3 -Alias (word) w2#13 = (word) w2#16 -Alias (word) w1#1 = (word) w1#7 (word) w1#14 -Alias (word) w2#1 = (word) w2#7 (word) w2#14 -Alias (word) w1#15 = (word) w1#2 (word) w1#8 (word) w1#9 (word) w1#3 -Alias (word) w2#2 = (word) w2#8 (word) w2#9 (word) w2#3 -Alias (word) w1#11 = (word) w1#4 (word) w1#5 -Alias (word) w2#11 = (word) w2#4 (word) w2#5 -Alias (word) w1#0 = (word) w1#16 -Alias (word) w2#0 = (word) w2#15 -Alias (word) w1#12 = (word) w1#6 -Alias (word) w2#12 = (word) w2#6 -Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: w1#13 w1#0 -Not aliassing across scopes: w2#13 w2#0 -Not aliassing across scopes: w1#1 w1#11 -Not aliassing across scopes: w2#1 w2#11 -Not aliassing across scopes: w1#15 w1#11 -Not aliassing across scopes: w2#2 w2#11 -Not aliassing across scopes: w1#10 w1#13 -Not aliassing across scopes: w2#10 w2#13 -Not aliassing across scopes: w1#12 w1#15 -Not aliassing across scopes: w2#12 w2#2 -Redundant Phi (word) w1#13 (word) w1#0 -Redundant Phi (word) w2#13 (word) w2#0 -Redundant Phi (word) w1#1 (word) w1#11 -Redundant Phi (word) w2#1 (word) w2#11 -Redundant Phi (word) w1#15 (word) w1#11 -Redundant Phi (word) w2#2 (word) w2#11 -Redundant Phi (word) w1#12 (word) w1#15 -Redundant Phi (word) w2#12 (word) w2#2 -Succesful SSA optimization Pass2RedundantPhiElimination -Constant (const word) w1#0 = 0 -Constant (const word) w2#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) main::@4 Culled Empty Block (label) @4 Succesful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH -Inlining constant with var siblings (const word) w1#0 -Inlining constant with var siblings (const word) w1#0 -Inlining constant with var siblings (const word) w2#0 -Inlining constant with var siblings (const word) w2#0 -Constant inlined w1#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined w2#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@3 main::@return incw2 incw2::@return incw1 incw1::@return Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@3 main::@return incw2 incw2::@return incw1 incw1::@return Adding NOP phi() at start of @begin @@ -278,32 +155,27 @@ Adding NOP phi() at start of @3 Adding NOP phi() at start of @end Adding NOP phi() at start of main Adding NOP phi() at start of main::@1 -CALL GRAPH -Calls in [] to main:2 -Calls in [main] to incw1:5 incw2:7 incw1:9 incw2:11 - -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Created 2 initial phi equivalence classes -Coalesced [8] w1#17 ← w1#11 -Coalesced [10] w2#17 ← w2#11 -Coalesced down to 2 phi equivalence classes -Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@3 main::@return incw2 incw2::@return incw1 incw1::@return -Adding NOP phi() at start of @begin -Adding NOP phi() at start of @3 -Adding NOP phi() at start of @end -Adding NOP phi() at start of main -Adding NOP phi() at start of main::@1 Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of incw2 +Adding NOP phi() at start of incw1 +CALL GRAPH +Calls in [] to main:2 +Calls in [main] to incw1:5 incw2:7 incw1:9 incw2:11 + Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@3 main::@return incw2 incw2::@return incw1 incw1::@return +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @3 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@1 +Adding NOP phi() at start of main::@2 +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of incw2 +Adding NOP phi() at start of incw1 Propagating live ranges... FINAL CONTROL FLOW GRAPH @@ -318,36 +190,34 @@ FINAL CONTROL FLOW GRAPH [3] phi() [ ] ( ) main: scope:[main] from @3 [4] phi() [ ] ( main:2 [ ] ) - [5] call incw1 [ w1#11 ] ( main:2 [ w1#11 ] ) + [5] call incw1 [ ] ( main:2 [ ] ) to:main::@1 main::@1: scope:[main] from main - [6] phi() [ w1#11 ] ( main:2 [ w1#11 ] ) - [7] call incw2 [ w2#11 w1#11 ] ( main:2 [ w2#11 w1#11 ] ) + [6] phi() [ ] ( main:2 [ ] ) + [7] call incw2 [ ] ( main:2 [ ] ) to:main::@2 main::@2: scope:[main] from main::@1 - [8] phi() [ w2#11 w1#11 ] ( main:2 [ w2#11 w1#11 ] ) - [9] call incw1 [ w2#11 ] ( main:2 [ w2#11 ] ) + [8] phi() [ ] ( main:2 [ ] ) + [9] call incw1 [ ] ( main:2 [ ] ) to:main::@3 main::@3: scope:[main] from main::@2 - [10] phi() [ w2#11 ] ( main:2 [ w2#11 ] ) + [10] phi() [ ] ( main:2 [ ] ) [11] call incw2 [ ] ( main:2 [ ] ) to:main::@return main::@return: scope:[main] from main::@3 [12] return [ ] ( main:2 [ ] ) to:@return incw2: scope:[incw2] from main::@1 main::@3 - [13] (word) w2#10 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@3/(word) w2#11 ) [ w2#10 ] ( main:2::incw2:7 [ w1#11 w2#10 ] main:2::incw2:11 [ w2#10 ] ) - [14] (word) w2#11 ← ++ (word) w2#10 [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) + [13] phi() [ ] ( main:2::incw2:7 [ ] main:2::incw2:11 [ ] ) to:incw2::@return incw2::@return: scope:[incw2] from incw2 - [15] return [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) + [14] return [ ] ( main:2::incw2:7 [ ] main:2::incw2:11 [ ] ) to:@return incw1: scope:[incw1] from main main::@2 - [16] (word) w1#10 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(word) w1#11 ) [ w1#10 ] ( main:2::incw1:5 [ w1#10 ] main:2::incw1:9 [ w2#11 w1#10 ] ) - [17] (word) w1#11 ← ++ (word) w1#10 [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) + [15] phi() [ ] ( main:2::incw1:5 [ ] main:2::incw1:9 [ ] ) to:incw1::@return incw1::@return: scope:[incw1] from incw1 - [18] return [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) + [16] return [ ] ( main:2::incw1:5 [ ] main:2::incw1:9 [ ] ) to:@return DOMINATORS @@ -377,21 +247,9 @@ VARIABLE REGISTER WEIGHTS (void()) incw1() (void()) incw2() (void()) main() -(word) w1 -(word) w1#10 4.0 -(word) w1#11 0.6666666666666666 -(word) w2 -(word) w2#10 4.0 -(word) w2#11 0.6666666666666666 Initial phi equivalence classes -[ w2#10 w2#11 ] -[ w1#10 w1#11 ] Complete equivalence classes -[ w2#10 w2#11 ] -[ w1#10 w1#11 ] -Allocated zp ZP_WORD:2 [ w2#10 w2#11 ] -Allocated zp ZP_WORD:4 [ w1#10 w1#11 ] INITIAL ASM //SEG0 Basic Upstart @@ -399,8 +257,6 @@ INITIAL ASM :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .label w1 = 4 - .label w2 = 2 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -419,96 +275,72 @@ bend_from_b3: bend: //SEG9 main main: { - //SEG10 [5] call incw1 [ w1#11 ] ( main:2 [ w1#11 ] ) - //SEG11 [16] phi from main to incw1 [phi:main->incw1] + //SEG10 [5] call incw1 [ ] ( main:2 [ ] ) + //SEG11 [15] phi from main to incw1 [phi:main->incw1] incw1_from_main: - //SEG12 [16] phi (word) w1#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->incw1#0] -- vwuz1=vbuc1 - lda #<0 - sta w1 - lda #>0 - sta w1+1 jsr incw1 - //SEG13 [6] phi from main to main::@1 [phi:main->main::@1] + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] b1_from_main: jmp b1 - //SEG14 main::@1 + //SEG13 main::@1 b1: - //SEG15 [7] call incw2 [ w2#11 w1#11 ] ( main:2 [ w2#11 w1#11 ] ) - //SEG16 [13] phi from main::@1 to incw2 [phi:main::@1->incw2] + //SEG14 [7] call incw2 [ ] ( main:2 [ ] ) + //SEG15 [13] phi from main::@1 to incw2 [phi:main::@1->incw2] incw2_from_b1: - //SEG17 [13] phi (word) w2#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->incw2#0] -- vwuz1=vbuc1 - lda #<0 - sta w2 - lda #>0 - sta w2+1 jsr incw2 - //SEG18 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: jmp b2 - //SEG19 main::@2 + //SEG17 main::@2 b2: - //SEG20 [9] call incw1 [ w2#11 ] ( main:2 [ w2#11 ] ) - //SEG21 [16] phi from main::@2 to incw1 [phi:main::@2->incw1] + //SEG18 [9] call incw1 [ ] ( main:2 [ ] ) + //SEG19 [15] phi from main::@2 to incw1 [phi:main::@2->incw1] incw1_from_b2: - //SEG22 [16] phi (word) w1#10 = (word) w1#11 [phi:main::@2->incw1#0] -- register_copy jsr incw1 - //SEG23 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + //SEG20 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: jmp b3 - //SEG24 main::@3 + //SEG21 main::@3 b3: - //SEG25 [11] call incw2 [ ] ( main:2 [ ] ) - //SEG26 [13] phi from main::@3 to incw2 [phi:main::@3->incw2] + //SEG22 [11] call incw2 [ ] ( main:2 [ ] ) + //SEG23 [13] phi from main::@3 to incw2 [phi:main::@3->incw2] incw2_from_b3: - //SEG27 [13] phi (word) w2#10 = (word) w2#11 [phi:main::@3->incw2#0] -- register_copy jsr incw2 jmp breturn - //SEG28 main::@return + //SEG24 main::@return breturn: - //SEG29 [12] return [ ] ( main:2 [ ] ) + //SEG25 [12] return [ ] ( main:2 [ ] ) rts } -//SEG30 incw2 +//SEG26 incw2 incw2: { - //SEG31 [14] (word) w2#11 ← ++ (word) w2#10 [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) -- vwuz1=_inc_vwuz1 - inc w2 - bne !+ - inc w2+1 - !: jmp breturn - //SEG32 incw2::@return + //SEG27 incw2::@return breturn: - //SEG33 [15] return [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) + //SEG28 [14] return [ ] ( main:2::incw2:7 [ ] main:2::incw2:11 [ ] ) rts } -//SEG34 incw1 +//SEG29 incw1 incw1: { - //SEG35 [17] (word) w1#11 ← ++ (word) w1#10 [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) -- vwuz1=_inc_vwuz1 - inc w1 - bne !+ - inc w1+1 - !: jmp breturn - //SEG36 incw1::@return + //SEG30 incw1::@return breturn: - //SEG37 [18] return [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) + //SEG31 [16] return [ ] ( main:2::incw1:5 [ ] main:2::incw1:9 [ ] ) rts } REGISTER UPLIFT POTENTIAL REGISTERS -Potential registers zp ZP_WORD:2 [ w2#10 w2#11 ] : zp ZP_WORD:2 , -Potential registers zp ZP_WORD:4 [ w1#10 w1#11 ] : zp ZP_WORD:4 , REGISTER UPLIFT SCOPES -Uplift Scope [] 4.67: zp ZP_WORD:2 [ w2#10 w2#11 ] 4.67: zp ZP_WORD:4 [ w1#10 w1#11 ] Uplift Scope [main] Uplift Scope [incw1] Uplift Scope [incw2] +Uplift Scope [] -Uplifting [] best 116 combination zp ZP_WORD:2 [ w2#10 w2#11 ] zp ZP_WORD:4 [ w1#10 w1#11 ] -Uplifting [main] best 116 combination -Uplifting [incw1] best 116 combination -Uplifting [incw2] best 116 combination +Uplifting [main] best 126 combination +Uplifting [incw1] best 126 combination +Uplifting [incw2] best 126 combination +Uplifting [] best 126 combination ASSEMBLER BEFORE OPTIMIZATION //SEG0 Basic Upstart @@ -516,8 +348,6 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .label w1 = 4 - .label w2 = 2 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] @@ -536,79 +366,57 @@ bend_from_b3: bend: //SEG9 main main: { - //SEG10 [5] call incw1 [ w1#11 ] ( main:2 [ w1#11 ] ) - //SEG11 [16] phi from main to incw1 [phi:main->incw1] + //SEG10 [5] call incw1 [ ] ( main:2 [ ] ) + //SEG11 [15] phi from main to incw1 [phi:main->incw1] incw1_from_main: - //SEG12 [16] phi (word) w1#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->incw1#0] -- vwuz1=vbuc1 - lda #<0 - sta w1 - lda #>0 - sta w1+1 jsr incw1 - //SEG13 [6] phi from main to main::@1 [phi:main->main::@1] + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] b1_from_main: jmp b1 - //SEG14 main::@1 + //SEG13 main::@1 b1: - //SEG15 [7] call incw2 [ w2#11 w1#11 ] ( main:2 [ w2#11 w1#11 ] ) - //SEG16 [13] phi from main::@1 to incw2 [phi:main::@1->incw2] + //SEG14 [7] call incw2 [ ] ( main:2 [ ] ) + //SEG15 [13] phi from main::@1 to incw2 [phi:main::@1->incw2] incw2_from_b1: - //SEG17 [13] phi (word) w2#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->incw2#0] -- vwuz1=vbuc1 - lda #<0 - sta w2 - lda #>0 - sta w2+1 jsr incw2 - //SEG18 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] b2_from_b1: jmp b2 - //SEG19 main::@2 + //SEG17 main::@2 b2: - //SEG20 [9] call incw1 [ w2#11 ] ( main:2 [ w2#11 ] ) - //SEG21 [16] phi from main::@2 to incw1 [phi:main::@2->incw1] + //SEG18 [9] call incw1 [ ] ( main:2 [ ] ) + //SEG19 [15] phi from main::@2 to incw1 [phi:main::@2->incw1] incw1_from_b2: - //SEG22 [16] phi (word) w1#10 = (word) w1#11 [phi:main::@2->incw1#0] -- register_copy jsr incw1 - //SEG23 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + //SEG20 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] b3_from_b2: jmp b3 - //SEG24 main::@3 + //SEG21 main::@3 b3: - //SEG25 [11] call incw2 [ ] ( main:2 [ ] ) - //SEG26 [13] phi from main::@3 to incw2 [phi:main::@3->incw2] + //SEG22 [11] call incw2 [ ] ( main:2 [ ] ) + //SEG23 [13] phi from main::@3 to incw2 [phi:main::@3->incw2] incw2_from_b3: - //SEG27 [13] phi (word) w2#10 = (word) w2#11 [phi:main::@3->incw2#0] -- register_copy jsr incw2 jmp breturn - //SEG28 main::@return + //SEG24 main::@return breturn: - //SEG29 [12] return [ ] ( main:2 [ ] ) + //SEG25 [12] return [ ] ( main:2 [ ] ) rts } -//SEG30 incw2 +//SEG26 incw2 incw2: { - //SEG31 [14] (word) w2#11 ← ++ (word) w2#10 [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) -- vwuz1=_inc_vwuz1 - inc w2 - bne !+ - inc w2+1 - !: jmp breturn - //SEG32 incw2::@return + //SEG27 incw2::@return breturn: - //SEG33 [15] return [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) + //SEG28 [14] return [ ] ( main:2::incw2:7 [ ] main:2::incw2:11 [ ] ) rts } -//SEG34 incw1 +//SEG29 incw1 incw1: { - //SEG35 [17] (word) w1#11 ← ++ (word) w1#10 [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) -- vwuz1=_inc_vwuz1 - inc w1 - bne !+ - inc w1+1 - !: jmp breturn - //SEG36 incw1::@return + //SEG30 incw1::@return breturn: - //SEG37 [18] return [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) + //SEG31 [16] return [ ] ( main:2::incw1:5 [ ] main:2::incw1:9 [ ] ) rts } @@ -622,9 +430,6 @@ Removing instruction jmp breturn Removing instruction jmp breturn Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #>0 -Removing instruction lda #>0 -Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction bbegin: Removing instruction b3_from_bbegin: Removing instruction main_from_b3: @@ -660,27 +465,17 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@3 (label) main::@return -(word) w1 -(word) w1#10 w1 zp ZP_WORD:4 4.0 -(word) w1#11 w1 zp ZP_WORD:4 0.6666666666666666 -(word) w2 -(word) w2#10 w2 zp ZP_WORD:2 4.0 -(word) w2#11 w2 zp ZP_WORD:2 0.6666666666666666 -zp ZP_WORD:2 [ w2#10 w2#11 ] -zp ZP_WORD:4 [ w1#10 w1#11 ] FINAL ASSEMBLER -Score: 88 +Score: 48 //SEG0 Basic Upstart .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" //SEG1 Global Constants & labels - .label w1 = 4 - .label w2 = 2 //SEG2 @begin //SEG3 [1] phi from @begin to @3 [phi:@begin->@3] //SEG4 @3 @@ -691,58 +486,38 @@ Score: 88 //SEG8 @end //SEG9 main main: { - //SEG10 [5] call incw1 [ w1#11 ] ( main:2 [ w1#11 ] ) - //SEG11 [16] phi from main to incw1 [phi:main->incw1] - //SEG12 [16] phi (word) w1#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->incw1#0] -- vwuz1=vbuc1 - lda #<0 - sta w1 - sta w1+1 + //SEG10 [5] call incw1 [ ] ( main:2 [ ] ) + //SEG11 [15] phi from main to incw1 [phi:main->incw1] jsr incw1 - //SEG13 [6] phi from main to main::@1 [phi:main->main::@1] - //SEG14 main::@1 - //SEG15 [7] call incw2 [ w2#11 w1#11 ] ( main:2 [ w2#11 w1#11 ] ) - //SEG16 [13] phi from main::@1 to incw2 [phi:main::@1->incw2] - //SEG17 [13] phi (word) w2#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->incw2#0] -- vwuz1=vbuc1 - lda #<0 - sta w2 - sta w2+1 + //SEG12 [6] phi from main to main::@1 [phi:main->main::@1] + //SEG13 main::@1 + //SEG14 [7] call incw2 [ ] ( main:2 [ ] ) + //SEG15 [13] phi from main::@1 to incw2 [phi:main::@1->incw2] jsr incw2 - //SEG18 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] - //SEG19 main::@2 - //SEG20 [9] call incw1 [ w2#11 ] ( main:2 [ w2#11 ] ) - //SEG21 [16] phi from main::@2 to incw1 [phi:main::@2->incw1] - //SEG22 [16] phi (word) w1#10 = (word) w1#11 [phi:main::@2->incw1#0] -- register_copy + //SEG16 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG17 main::@2 + //SEG18 [9] call incw1 [ ] ( main:2 [ ] ) + //SEG19 [15] phi from main::@2 to incw1 [phi:main::@2->incw1] jsr incw1 - //SEG23 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] - //SEG24 main::@3 - //SEG25 [11] call incw2 [ ] ( main:2 [ ] ) - //SEG26 [13] phi from main::@3 to incw2 [phi:main::@3->incw2] - //SEG27 [13] phi (word) w2#10 = (word) w2#11 [phi:main::@3->incw2#0] -- register_copy + //SEG20 [10] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + //SEG21 main::@3 + //SEG22 [11] call incw2 [ ] ( main:2 [ ] ) + //SEG23 [13] phi from main::@3 to incw2 [phi:main::@3->incw2] jsr incw2 - //SEG28 main::@return - //SEG29 [12] return [ ] ( main:2 [ ] ) + //SEG24 main::@return + //SEG25 [12] return [ ] ( main:2 [ ] ) rts } -//SEG30 incw2 +//SEG26 incw2 incw2: { - //SEG31 [14] (word) w2#11 ← ++ (word) w2#10 [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) -- vwuz1=_inc_vwuz1 - inc w2 - bne !+ - inc w2+1 - !: - //SEG32 incw2::@return - //SEG33 [15] return [ w2#11 ] ( main:2::incw2:7 [ w1#11 w2#11 ] main:2::incw2:11 [ w2#11 ] ) + //SEG27 incw2::@return + //SEG28 [14] return [ ] ( main:2::incw2:7 [ ] main:2::incw2:11 [ ] ) rts } -//SEG34 incw1 +//SEG29 incw1 incw1: { - //SEG35 [17] (word) w1#11 ← ++ (word) w1#10 [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) -- vwuz1=_inc_vwuz1 - inc w1 - bne !+ - inc w1+1 - !: - //SEG36 incw1::@return - //SEG37 [18] return [ w1#11 ] ( main:2::incw1:5 [ w1#11 ] main:2::incw1:9 [ w2#11 w1#11 ] ) + //SEG30 incw1::@return + //SEG31 [16] return [ ] ( main:2::incw1:5 [ ] main:2::incw1:9 [ ] ) rts } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.sym b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.sym index 0348e9c0e..4aa75c4eb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.sym @@ -10,12 +10,4 @@ (label) main::@2 (label) main::@3 (label) main::@return -(word) w1 -(word) w1#10 w1 zp ZP_WORD:4 4.0 -(word) w1#11 w1 zp ZP_WORD:4 0.6666666666666666 -(word) w2 -(word) w2#10 w2 zp ZP_WORD:2 4.0 -(word) w2#11 w2 zp ZP_WORD:2 0.6666666666666666 -zp ZP_WORD:2 [ w2#10 w2#11 ] -zp ZP_WORD:4 [ w1#10 w1#11 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.asm b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.asm index 6b3267e0b..eaf34c26f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.asm @@ -3,7 +3,6 @@ .pc = $80d "Program" jsr main main: { - ldx #0 lda #$64 b1: sec @@ -14,11 +13,6 @@ main: { b2: cmp #$32 beq !+ - bcs b4 !: - dex - jmp b1 - b4: - inx jmp b1 } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.cfg b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.cfg index 5b92ff720..c4edd0860 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.cfg @@ -10,21 +10,17 @@ main: scope:[main] from @1 [4] phi() [ ] ( main:2 [ ] ) to:main::@1 -main::@1: scope:[main] from main main::@4 main::@8 - [5] (byte) main::s#3 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(byte) main::s#1 main::@8/(byte) main::s#2 ) [ main::i#2 main::s#3 ] ( main:2 [ main::i#2 main::s#3 ] ) - [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 100 main::@4/(byte) main::i#1 main::@8/(byte) main::i#1 ) [ main::i#2 main::s#3 ] ( main:2 [ main::i#2 main::s#3 ] ) - [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) - [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) +main::@1: scope:[main] from main main::@2 main::@4 + [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 100 main::@2/(byte) main::i#1 main::@4/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) + [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) + [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@return main::@return: scope:[main] from main::@1 [8] return [ ] ( main:2 [ ] ) to:@return main::@2: scope:[main] from main::@1 - [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) - to:main::@8 -main::@8: scope:[main] from main::@2 - [10] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] ( main:2 [ main::i#1 main::s#2 ] ) + [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@1 main::@4: scope:[main] from main::@2 - [11] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] ( main:2 [ main::i#1 main::s#1 ] ) + [10] phi() [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.log b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.log index a637b461b..f435d7fb7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.log @@ -77,15 +77,18 @@ main::@return: scope:[main] from main::@3 to:@end @end: scope:[] from @1 +Eliminating unused variable (byte) main::s and assignment [1] (byte) main::s ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable main::s(null) and assignment [7] main::s(null) ← ++ main::s(null) +Eliminating unused variable main::s(null) and assignment [8] main::s(null) ← -- main::s(null) Removing empty block main::@6 Removing empty block main::@3 Removing empty block main::@7 +Removing empty block main::@8 Removing empty block main::@5 Removing empty block main::@9 Removing empty block main::@10 PROCEDURE MODIFY VARIABLE ANALYSIS -Completing Phi functions... Completing Phi functions... Completing Phi functions... @@ -94,30 +97,20 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN to:@1 main: scope:[main] from @1 (byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 100 - (byte) main::s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:main::@1 -main::@1: scope:[main] from main main::@4 main::@8 - (byte) main::s#6 ← phi( main/(byte) main::s#0 main::@4/(byte) main::s#1 main::@8/(byte) main::s#2 ) - (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@4/(byte) main::i#4 main::@8/(byte) main::i#5 ) +main::@1: scope:[main] from main main::@2 main::@4 + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#3 main::@4/(byte) main::i#4 ) (byte) main::i#1 ← -- (byte) main::i#2 (bool~) main::$0 ← (byte) main::i#1 > (byte/signed byte/word/signed word/dword/signed dword) 0 if((bool~) main::$0) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 - (byte) main::s#5 ← phi( main::@1/(byte) main::s#6 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#1 ) (bool~) main::$1 ← (byte) main::i#3 > (byte/signed byte/word/signed word/dword/signed dword) 50 if((bool~) main::$1) goto main::@4 - to:main::@8 + to:main::@1 main::@4: scope:[main] from main::@2 (byte) main::i#4 ← phi( main::@2/(byte) main::i#3 ) - (byte) main::s#3 ← phi( main::@2/(byte) main::s#5 ) - (byte) main::s#1 ← ++ (byte) main::s#3 - to:main::@1 -main::@8: scope:[main] from main::@2 - (byte) main::i#5 ← phi( main::@2/(byte) main::i#3 ) - (byte) main::s#4 ← phi( main::@2/(byte) main::s#5 ) - (byte) main::s#2 ← -- (byte) main::s#4 to:main::@1 main::@return: scope:[main] from main::@1 return @@ -140,7 +133,6 @@ SYMBOL TABLE SSA (label) main::@1 (label) main::@2 (label) main::@4 -(label) main::@8 (label) main::@return (byte) main::i (byte) main::i#0 @@ -148,39 +140,26 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 (byte) main::i#4 -(byte) main::i#5 -(byte) main::s -(byte) main::s#0 -(byte) main::s#1 -(byte) main::s#2 -(byte) main::s#3 -(byte) main::s#4 -(byte) main::s#5 -(byte) main::s#6 OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks -Alias (byte) main::i#1 = (byte) main::i#3 (byte) main::i#4 (byte) main::i#5 -Alias (byte) main::s#3 = (byte) main::s#5 (byte) main::s#6 (byte) main::s#4 +Alias (byte) main::i#1 = (byte) main::i#3 (byte) main::i#4 Succesful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$0 if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$1 if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 Succesful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::i#0 = 100 -Constant (const byte) main::s#0 = 0 Succesful SSA optimization Pass2ConstantIdentification +Not culling empty block because it shares successor with its predecessor. (label) main::@4 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::i#0 -Inlining constant with var siblings (const byte) main::s#0 -Inlining constant with var siblings (const byte) main::s#0 -Inlining constant with var siblings (const byte) main::s#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 100 -Constant inlined main::s#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 main::@8 main::@4 -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 main::@8 main::@4 +Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 main::@4 +Added new block during phi lifting main::@11(between main::@2 and main::@1) +Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 main::@11 main::@4 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -190,23 +169,18 @@ Calls in [] to main:2 Propagating live ranges... Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Created 2 initial phi equivalence classes -Coalesced [11] main::i#7 ← main::i#1 -Coalesced [12] main::s#8 ← main::s#2 -Coalesced (already) [14] main::i#6 ← main::i#1 -Coalesced [15] main::s#7 ← main::s#1 -Coalesced down to 2 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 main::@8 main::@4 +Created 1 initial phi equivalence classes +Coalesced [10] main::i#5 ← main::i#1 +Coalesced (already) [11] main::i#6 ← main::i#1 +Coalesced down to 1 phi equivalence classes +Culled Empty Block (label) main::@11 +Not culling empty block because it shares successor with its predecessor. (label) main::@4 +Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 main::@4 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end Adding NOP phi() at start of main -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... +Adding NOP phi() at start of main::@4 Propagating live ranges... Propagating live ranges... @@ -223,23 +197,19 @@ FINAL CONTROL FLOW GRAPH main: scope:[main] from @1 [4] phi() [ ] ( main:2 [ ] ) to:main::@1 -main::@1: scope:[main] from main main::@4 main::@8 - [5] (byte) main::s#3 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@4/(byte) main::s#1 main::@8/(byte) main::s#2 ) [ main::i#2 main::s#3 ] ( main:2 [ main::i#2 main::s#3 ] ) - [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 100 main::@4/(byte) main::i#1 main::@8/(byte) main::i#1 ) [ main::i#2 main::s#3 ] ( main:2 [ main::i#2 main::s#3 ] ) - [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) - [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) +main::@1: scope:[main] from main main::@2 main::@4 + [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 100 main::@2/(byte) main::i#1 main::@4/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) + [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) + [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@return main::@return: scope:[main] from main::@1 [8] return [ ] ( main:2 [ ] ) to:@return main::@2: scope:[main] from main::@1 - [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) - to:main::@8 -main::@8: scope:[main] from main::@2 - [10] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] ( main:2 [ main::i#1 main::s#2 ] ) + [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@1 main::@4: scope:[main] from main::@2 - [11] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] ( main:2 [ main::i#1 main::s#1 ] ) + [10] phi() [ main::i#1 ] ( main:2 [ main::i#1 ] ) to:main::@1 DOMINATORS @@ -250,42 +220,36 @@ main dominated by @1 @begin main main::@1 dominated by @1 @begin main::@1 main main::@return dominated by main::@return @1 @begin main::@1 main main::@2 dominated by @1 @begin main::@1 main::@2 main -main::@8 dominated by @1 @begin main::@8 main::@1 main::@2 main main::@4 dominated by @1 @begin main::@1 main::@2 main main::@4 NATURAL LOOPS -Found back edge: Loop head: main::@1 tails: main::@8 blocks: null +Found back edge: Loop head: main::@1 tails: main::@2 blocks: null Found back edge: Loop head: main::@1 tails: main::@4 blocks: null -Populated: Loop head: main::@1 tails: main::@8 blocks: main::@8 main::@2 main::@1 +Populated: Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 Populated: Loop head: main::@1 tails: main::@4 blocks: main::@4 main::@2 main::@1 -Coalesced: Loop head: main::@1 tails: main::@8 main::@4 blocks: main::@8 main::@2 main::@1 main::@4 -Loop head: main::@1 tails: main::@8 main::@4 blocks: main::@8 main::@2 main::@1 main::@4 +Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 +Loop head: main::@1 tails: main::@4 blocks: main::@4 main::@2 main::@1 NATURAL LOOPS WITH DEPTH Found 0 loops in scope [] -Found 1 loops in scope [main] - Loop head: main::@1 tails: main::@8 main::@4 blocks: main::@8 main::@2 main::@1 main::@4 -Loop head: main::@1 tails: main::@8 main::@4 blocks: main::@8 main::@2 main::@1 main::@4 depth: 1 +Found 2 loops in scope [main] + Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 + Loop head: main::@1 tails: main::@4 blocks: main::@4 main::@2 main::@1 +Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 depth: 2 +Loop head: main::@1 tails: main::@4 blocks: main::@4 main::@2 main::@1 depth: 1 VARIABLE REGISTER WEIGHTS (void()) main() (byte) main::i -(byte) main::i#1 11.0 -(byte) main::i#2 33.0 -(byte) main::s -(byte) main::s#1 22.0 -(byte) main::s#2 22.0 -(byte) main::s#3 11.0 +(byte) main::i#1 103.75 +(byte) main::i#2 213.0 Initial phi equivalence classes [ main::i#2 main::i#1 ] -[ main::s#3 main::s#1 main::s#2 ] Complete equivalence classes [ main::i#2 main::i#1 ] -[ main::s#3 main::s#1 main::s#2 ] Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] -Allocated zp ZP_BYTE:3 [ main::s#3 main::s#1 main::s#2 ] INITIAL ASM //SEG0 Basic Upstart @@ -312,64 +276,54 @@ bend: //SEG9 main main: { .label i = 2 - .label s = 3 //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: - //SEG11 [5] phi (byte) main::s#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 - lda #0 - sta s - //SEG12 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@1#1] -- vbuz1=vbuc1 + //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #$64 sta i jmp b1 - //SEG13 main::@1 + //SEG12 main::@1 b1: - //SEG14 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) -- vbuz1=_dec_vbuz1 + //SEG13 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1=_dec_vbuz1 dec i - //SEG15 [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) -- vbuz1_gt_0_then_la1 + //SEG14 [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_gt_0_then_la1 lda i bne b2 jmp breturn - //SEG16 main::@return + //SEG15 main::@return breturn: - //SEG17 [8] return [ ] ( main:2 [ ] ) + //SEG16 [8] return [ ] ( main:2 [ ] ) rts - //SEG18 main::@2 + //SEG17 main::@2 b2: - //SEG19 [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) -- vbuz1_gt_vbuc1_then_la1 + //SEG18 [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuz1_gt_vbuc1_then_la1 lda i cmp #$32 beq !+ - bcs b4 + bcs b4_from_b2 !: - jmp b8 - //SEG20 main::@8 - b8: - //SEG21 [10] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] ( main:2 [ main::i#1 main::s#2 ] ) -- vbuz1=_dec_vbuz1 - dec s - //SEG22 [5] phi from main::@4 main::@8 to main::@1 [phi:main::@4/main::@8->main::@1] + //SEG19 [5] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] + b1_from_b2: b1_from_b4: - b1_from_b8: - //SEG23 [5] phi (byte) main::s#3 = (byte) main::s#1 [phi:main::@4/main::@8->main::@1#0] -- register_copy - //SEG24 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4/main::@8->main::@1#1] -- register_copy + //SEG20 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2/main::@4->main::@1#0] -- register_copy jmp b1 - //SEG25 main::@4 + //SEG21 [10] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + jmp b4 + //SEG22 main::@4 b4: - //SEG26 [11] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] ( main:2 [ main::i#1 main::s#1 ] ) -- vbuz1=_inc_vbuz1 - inc s jmp b1_from_b4 } REGISTER UPLIFT POTENTIAL REGISTERS Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ main::s#3 main::s#1 main::s#2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [main] 55: zp ZP_BYTE:3 [ main::s#3 main::s#1 main::s#2 ] 44: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [main] 316.75: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Uplift Scope [] -Uplifting [main] best 403 combination reg byte x [ main::s#3 main::s#1 main::s#2 ] reg byte a [ main::i#2 main::i#1 ] -Uplifting [] best 403 combination +Uplifting [main] best 2728 combination reg byte a [ main::i#2 main::i#1 ] +Uplifting [] best 2728 combination ASSEMBLER BEFORE OPTIMIZATION //SEG0 Basic Upstart @@ -397,46 +351,39 @@ bend: main: { //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: - //SEG11 [5] phi (byte) main::s#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 - //SEG12 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@1#1] -- vbuaa=vbuc1 + //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@1#0] -- vbuaa=vbuc1 lda #$64 jmp b1 - //SEG13 main::@1 + //SEG12 main::@1 b1: - //SEG14 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) -- vbuaa=_dec_vbuaa + //SEG13 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa=_dec_vbuaa sec sbc #1 - //SEG15 [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) -- vbuaa_gt_0_then_la1 + //SEG14 [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa_gt_0_then_la1 cmp #0 bne b2 jmp breturn - //SEG16 main::@return + //SEG15 main::@return breturn: - //SEG17 [8] return [ ] ( main:2 [ ] ) + //SEG16 [8] return [ ] ( main:2 [ ] ) rts - //SEG18 main::@2 + //SEG17 main::@2 b2: - //SEG19 [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) -- vbuaa_gt_vbuc1_then_la1 + //SEG18 [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa_gt_vbuc1_then_la1 cmp #$32 beq !+ - bcs b4 + bcs b4_from_b2 !: - jmp b8 - //SEG20 main::@8 - b8: - //SEG21 [10] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] ( main:2 [ main::i#1 main::s#2 ] ) -- vbuxx=_dec_vbuxx - dex - //SEG22 [5] phi from main::@4 main::@8 to main::@1 [phi:main::@4/main::@8->main::@1] + //SEG19 [5] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] + b1_from_b2: b1_from_b4: - b1_from_b8: - //SEG23 [5] phi (byte) main::s#3 = (byte) main::s#1 [phi:main::@4/main::@8->main::@1#0] -- register_copy - //SEG24 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4/main::@8->main::@1#1] -- register_copy + //SEG20 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2/main::@4->main::@1#0] -- register_copy jmp b1 - //SEG25 main::@4 + //SEG21 [10] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + b4_from_b2: + jmp b4 + //SEG22 main::@4 b4: - //SEG26 [11] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] ( main:2 [ main::i#1 main::s#1 ] ) -- vbuxx=_inc_vbuxx - inx jmp b1_from_b4 } @@ -445,27 +392,33 @@ Removing instruction jmp b1 Removing instruction jmp bend Removing instruction jmp b1 Removing instruction jmp breturn -Removing instruction jmp b8 +Removing instruction jmp b4 Succesful ASM optimization Pass5NextJumpElimination -Replacing label b1_from_b4 with b1_from_b8 +Replacing label b4_from_b2 with b4 Removing instruction bbegin: Removing instruction b1_from_bbegin: Removing instruction main_from_b1: Removing instruction bend_from_b1: -Removing instruction b1_from_b4: +Removing instruction b1_from_b2: +Removing instruction b4_from_b2: Succesful ASM optimization Pass5RedundantLabelElimination Removing instruction b1: Removing instruction bend: Removing instruction b1_from_main: Removing instruction breturn: -Removing instruction b8: Succesful ASM optimization Pass5UnusedLabelElimination -Skipping double jump to b1 in jmp b1_from_b8 +Skipping double jump to b1_from_b4 in bcs b4 +Skipping double jump to b1 in jmp b1_from_b4 Succesful ASM optimization Pass5DoubleJumpElimination -Relabelling long label b1_from_b8 to b3 +Relabelling long label b1_from_b4 to b3 Succesful ASM optimization Pass5RelabelLongLabels +Removing instruction bcs b3 +Succesful ASM optimization Pass5NextJumpElimination Removing instruction b3: +Removing instruction b4: Succesful ASM optimization Pass5UnusedLabelElimination +Removing unreachable instruction jmp b1 +Succesful ASM optimization Pass5UnreachableCodeElimination FINAL SYMBOL TABLE (label) @1 @@ -475,22 +428,16 @@ FINAL SYMBOL TABLE (label) main::@1 (label) main::@2 (label) main::@4 -(label) main::@8 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte a 11.0 -(byte) main::i#2 reg byte a 33.0 -(byte) main::s -(byte) main::s#1 reg byte x 22.0 -(byte) main::s#2 reg byte x 22.0 -(byte) main::s#3 reg byte x 11.0 +(byte) main::i#1 reg byte a 103.75 +(byte) main::i#2 reg byte a 213.0 reg byte a [ main::i#2 main::i#1 ] -reg byte x [ main::s#3 main::s#1 main::s#2 ] FINAL ASSEMBLER -Score: 307 +Score: 1812 //SEG0 Basic Upstart .pc = $801 "Basic" @@ -508,39 +455,29 @@ Score: 307 //SEG9 main main: { //SEG10 [5] phi from main to main::@1 [phi:main->main::@1] - //SEG11 [5] phi (byte) main::s#3 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 - ldx #0 - //SEG12 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@1#1] -- vbuaa=vbuc1 + //SEG11 [5] phi (byte) main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 100 [phi:main->main::@1#0] -- vbuaa=vbuc1 lda #$64 - //SEG13 main::@1 + //SEG12 main::@1 b1: - //SEG14 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) -- vbuaa=_dec_vbuaa + //SEG13 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa=_dec_vbuaa sec sbc #1 - //SEG15 [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) -- vbuaa_gt_0_then_la1 + //SEG14 [7] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa_gt_0_then_la1 cmp #0 bne b2 - //SEG16 main::@return - //SEG17 [8] return [ ] ( main:2 [ ] ) + //SEG15 main::@return + //SEG16 [8] return [ ] ( main:2 [ ] ) rts - //SEG18 main::@2 + //SEG17 main::@2 b2: - //SEG19 [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::s#3 main::i#1 ] ( main:2 [ main::s#3 main::i#1 ] ) -- vbuaa_gt_vbuc1_then_la1 + //SEG18 [9] if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuaa_gt_vbuc1_then_la1 cmp #$32 beq !+ - bcs b4 !: - //SEG20 main::@8 - //SEG21 [10] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] ( main:2 [ main::i#1 main::s#2 ] ) -- vbuxx=_dec_vbuxx - dex - //SEG22 [5] phi from main::@4 main::@8 to main::@1 [phi:main::@4/main::@8->main::@1] - //SEG23 [5] phi (byte) main::s#3 = (byte) main::s#1 [phi:main::@4/main::@8->main::@1#0] -- register_copy - //SEG24 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4/main::@8->main::@1#1] -- register_copy - jmp b1 - //SEG25 main::@4 - b4: - //SEG26 [11] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] ( main:2 [ main::i#1 main::s#1 ] ) -- vbuxx=_inc_vbuxx - inx + //SEG19 [5] phi from main::@2 main::@4 to main::@1 [phi:main::@2/main::@4->main::@1] + //SEG20 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2/main::@4->main::@1#0] -- register_copy jmp b1 + //SEG21 [10] phi from main::@2 to main::@4 [phi:main::@2->main::@4] + //SEG22 main::@4 } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.sym b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.sym index ced3b13db..5bfad23c0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.sym @@ -5,15 +5,9 @@ (label) main::@1 (label) main::@2 (label) main::@4 -(label) main::@8 (label) main::@return (byte) main::i -(byte) main::i#1 reg byte a 11.0 -(byte) main::i#2 reg byte a 33.0 -(byte) main::s -(byte) main::s#1 reg byte x 22.0 -(byte) main::s#2 reg byte x 22.0 -(byte) main::s#3 reg byte x 11.0 +(byte) main::i#1 reg byte a 103.75 +(byte) main::i#2 reg byte a 213.0 reg byte a [ main::i#2 main::i#1 ] -reg byte x [ main::s#3 main::s#1 main::s#2 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.asm b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.asm index e3a31ff52..b264d29f1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.asm @@ -2,26 +2,18 @@ :BasicUpstart(main) .pc = $80d "Program" .label SCREEN = $400 - .label cnt = 2 jsr main main: { ldx #0 - ldy #0 - txa jsr inccnt sta SCREEN+0 - lda cnt - clc - adc #1 + inx jsr inccnt sta SCREEN+1 rts } inccnt: { - clc - adc #1 - sta cnt - iny inx + txa rts } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.cfg b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.cfg index 0a8561819..5e959122c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.cfg @@ -9,13 +9,13 @@ [3] phi() [ ] ( ) main: scope:[main] from @2 [4] phi() [ ] ( main:2 [ ] ) - [5] call inccnt [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) - [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ) + [5] call inccnt [ inccnt::return#2 cnt#12 ] ( main:2 [ inccnt::return#2 cnt#12 ] ) + [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 ] ( main:2 [ inccnt::return#0 cnt#12 ] ) to:main::@1 main::@1: scope:[main] from main - [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ) - [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ cnt#12 cnt2#11 cnt3#11 ] ) - [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 cnt2#11 cnt3#11 ] ( main:2 [ cnt#2 cnt2#11 cnt3#11 ] ) + [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 ] ( main:2 [ main::$0 cnt#12 ] ) + [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 ] ( main:2 [ cnt#12 ] ) + [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 ] ( main:2 [ cnt#2 ] ) [10] call inccnt [ inccnt::return#2 ] ( main:2 [ inccnt::return#2 ] ) [11] (byte) inccnt::return#1 ← (byte) inccnt::return#2 [ inccnt::return#1 ] ( main:2 [ inccnt::return#1 ] ) to:main::@2 @@ -27,14 +27,10 @@ main::@return: scope:[main] from main::@2 [14] return [ ] ( main:2 [ ] ) to:@return inccnt: scope:[inccnt] from main main::@1 - [15] (byte) cnt3#10 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) cnt3#11 ) [ cnt#11 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#11 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#11 cnt2#10 cnt3#10 ] ) - [15] (byte) cnt2#10 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) cnt2#11 ) [ cnt#11 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#11 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#11 cnt2#10 cnt3#10 ] ) - [15] (byte) cnt#11 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) cnt#2 ) [ cnt#11 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#11 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#11 cnt2#10 cnt3#10 ] ) - [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#12 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#12 cnt2#10 cnt3#10 ] ) - [17] (byte) cnt2#11 ← ++ (byte) cnt2#10 [ cnt#12 cnt3#10 cnt2#11 ] ( main:2::inccnt:5 [ cnt#12 cnt3#10 cnt2#11 ] main:2::inccnt:10 [ cnt#12 cnt3#10 cnt2#11 ] ) - [18] (byte) cnt3#11 ← ++ (byte) cnt3#10 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ cnt#12 cnt2#11 cnt3#11 ] ) - [19] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + [15] (byte) cnt#11 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) cnt#2 ) [ cnt#11 ] ( main:2::inccnt:5 [ cnt#11 ] main:2::inccnt:10 [ cnt#11 ] ) + [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 ] ( main:2::inccnt:5 [ cnt#12 ] main:2::inccnt:10 [ cnt#12 ] ) + [17] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) to:inccnt::@return inccnt::@return: scope:[inccnt] from inccnt - [20] return [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + [18] return [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) to:@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log index 64855dfb4..553cafc29 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log @@ -79,15 +79,15 @@ inccnt::@1: scope:[inccnt] from to:@end @end: scope:[] from @2 +Eliminating unused variable (byte) cnt2 and assignment [1] (byte) cnt2 ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (byte) cnt3 and assignment [2] (byte) cnt3 ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable cnt2(null) and assignment [11] cnt2(null) ← ++ cnt2(null) +Eliminating unused variable cnt3(null) and assignment [12] cnt3(null) ← ++ cnt3(null) Removing empty block @1 Removing empty block inccnt::@1 PROCEDURE MODIFY VARIABLE ANALYSIS main modifies cnt -main modifies cnt2 -main modifies cnt3 inccnt modifies cnt -inccnt modifies cnt2 -inccnt modifies cnt3 Completing Phi functions... Completing Phi functions... @@ -95,84 +95,54 @@ Completing Phi functions... CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN @begin: scope:[] from (byte) cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte) cnt2#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 - (byte) cnt3#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte[256]) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 to:@2 main: scope:[main] from @2 - (byte) cnt3#13 ← phi( @2/(byte) cnt3#14 ) - (byte) cnt2#13 ← phi( @2/(byte) cnt2#14 ) (byte) cnt#14 ← phi( @2/(byte) cnt#15 ) call inccnt (byte) inccnt::return#0 ← (byte) inccnt::return#3 to:main::@1 main::@1: scope:[main] from main - (byte) cnt3#7 ← phi( main/(byte) cnt3#5 ) - (byte) cnt2#7 ← phi( main/(byte) cnt2#5 ) (byte) cnt#8 ← phi( main/(byte) cnt#6 ) (byte) inccnt::return#4 ← phi( main/(byte) inccnt::return#0 ) (byte~) main::$0 ← (byte) inccnt::return#4 (byte) cnt#1 ← (byte) cnt#8 - (byte) cnt2#1 ← (byte) cnt2#7 - (byte) cnt3#1 ← (byte) cnt3#7 *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 (byte) cnt#2 ← ++ (byte) cnt#1 call inccnt (byte) inccnt::return#1 ← (byte) inccnt::return#3 to:main::@2 main::@2: scope:[main] from main::@1 - (byte) cnt3#8 ← phi( main::@1/(byte) cnt3#5 ) - (byte) cnt2#8 ← phi( main::@1/(byte) cnt2#5 ) (byte) cnt#9 ← phi( main::@1/(byte) cnt#6 ) (byte) inccnt::return#5 ← phi( main::@1/(byte) inccnt::return#1 ) (byte~) main::$1 ← (byte) inccnt::return#5 (byte) cnt#3 ← (byte) cnt#9 - (byte) cnt2#2 ← (byte) cnt2#8 - (byte) cnt3#2 ← (byte) cnt3#8 *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 to:main::@return main::@return: scope:[main] from main::@2 - (byte) cnt3#9 ← phi( main::@2/(byte) cnt3#2 ) - (byte) cnt2#9 ← phi( main::@2/(byte) cnt2#2 ) (byte) cnt#10 ← phi( main::@2/(byte) cnt#3 ) (byte) cnt#4 ← (byte) cnt#10 - (byte) cnt2#3 ← (byte) cnt2#9 - (byte) cnt3#3 ← (byte) cnt3#9 return to:@return inccnt: scope:[inccnt] from main main::@1 - (byte) cnt3#10 ← phi( main/(byte) cnt3#13 main::@1/(byte) cnt3#1 ) - (byte) cnt2#10 ← phi( main/(byte) cnt2#13 main::@1/(byte) cnt2#1 ) (byte) cnt#11 ← phi( main/(byte) cnt#14 main::@1/(byte) cnt#2 ) (byte) cnt#5 ← ++ (byte) cnt#11 - (byte) cnt2#4 ← ++ (byte) cnt2#10 - (byte) cnt3#4 ← ++ (byte) cnt3#10 (byte) inccnt::return#2 ← (byte) cnt#5 to:inccnt::@return inccnt::@return: scope:[inccnt] from inccnt - (byte) cnt3#11 ← phi( inccnt/(byte) cnt3#4 ) - (byte) cnt2#11 ← phi( inccnt/(byte) cnt2#4 ) (byte) cnt#12 ← phi( inccnt/(byte) cnt#5 ) (byte) inccnt::return#6 ← phi( inccnt/(byte) inccnt::return#2 ) (byte) inccnt::return#3 ← (byte) inccnt::return#6 (byte) cnt#6 ← (byte) cnt#12 - (byte) cnt2#5 ← (byte) cnt2#11 - (byte) cnt3#5 ← (byte) cnt3#11 return to:@return @2: scope:[] from @begin - (byte) cnt3#14 ← phi( @begin/(byte) cnt3#0 ) - (byte) cnt2#14 ← phi( @begin/(byte) cnt2#0 ) (byte) cnt#15 ← phi( @begin/(byte) cnt#0 ) call main to:@3 @3: scope:[] from @2 - (byte) cnt3#12 ← phi( @2/(byte) cnt3#3 ) - (byte) cnt2#12 ← phi( @2/(byte) cnt2#3 ) (byte) cnt#13 ← phi( @2/(byte) cnt#4 ) (byte) cnt#7 ← (byte) cnt#13 - (byte) cnt2#6 ← (byte) cnt2#12 - (byte) cnt3#6 ← (byte) cnt3#12 to:@end @end: scope:[] from @3 @@ -200,38 +170,6 @@ SYMBOL TABLE SSA (byte) cnt#7 (byte) cnt#8 (byte) cnt#9 -(byte) cnt2 -(byte) cnt2#0 -(byte) cnt2#1 -(byte) cnt2#10 -(byte) cnt2#11 -(byte) cnt2#12 -(byte) cnt2#13 -(byte) cnt2#14 -(byte) cnt2#2 -(byte) cnt2#3 -(byte) cnt2#4 -(byte) cnt2#5 -(byte) cnt2#6 -(byte) cnt2#7 -(byte) cnt2#8 -(byte) cnt2#9 -(byte) cnt3 -(byte) cnt3#0 -(byte) cnt3#1 -(byte) cnt3#10 -(byte) cnt3#11 -(byte) cnt3#12 -(byte) cnt3#13 -(byte) cnt3#14 -(byte) cnt3#2 -(byte) cnt3#3 -(byte) cnt3#4 -(byte) cnt3#5 -(byte) cnt3#6 -(byte) cnt3#7 -(byte) cnt3#8 -(byte) cnt3#9 (byte()) inccnt() (label) inccnt::@return (byte) inccnt::return @@ -251,80 +189,40 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Not aliassing across scopes: cnt#14 cnt#15 -Not aliassing across scopes: cnt2#13 cnt2#14 -Not aliassing across scopes: cnt3#13 cnt3#14 Not aliassing across scopes: inccnt::return#0 inccnt::return#3 Not aliassing across scopes: cnt#8 cnt#6 -Not aliassing across scopes: cnt2#7 cnt2#5 -Not aliassing across scopes: cnt3#7 cnt3#5 Not aliassing across scopes: main::$0 inccnt::return#4 Not aliassing across scopes: inccnt::return#1 inccnt::return#3 Not aliassing across scopes: cnt#9 cnt#6 -Not aliassing across scopes: cnt2#8 cnt2#5 -Not aliassing across scopes: cnt3#8 cnt3#5 Not aliassing across scopes: main::$1 inccnt::return#5 Not aliassing across scopes: cnt#11 cnt#14 -Not aliassing across scopes: cnt2#10 cnt2#13 -Not aliassing across scopes: cnt3#10 cnt3#13 Not aliassing across scopes: inccnt::return#2 cnt#5 Not aliassing across scopes: cnt#13 cnt#4 -Not aliassing across scopes: cnt2#12 cnt2#3 -Not aliassing across scopes: cnt3#12 cnt3#3 Alias (byte) inccnt::return#0 = (byte) inccnt::return#4 Alias (byte) cnt#1 = (byte) cnt#8 -Alias (byte) cnt2#1 = (byte) cnt2#7 -Alias (byte) cnt3#1 = (byte) cnt3#7 Alias (byte) inccnt::return#1 = (byte) inccnt::return#5 Alias (byte) cnt#10 = (byte) cnt#3 (byte) cnt#9 (byte) cnt#4 -Alias (byte) cnt2#2 = (byte) cnt2#8 (byte) cnt2#9 (byte) cnt2#3 -Alias (byte) cnt3#2 = (byte) cnt3#8 (byte) cnt3#9 (byte) cnt3#3 Alias (byte) inccnt::return#2 = (byte) inccnt::return#6 (byte) inccnt::return#3 Alias (byte) cnt#12 = (byte) cnt#5 (byte) cnt#6 -Alias (byte) cnt2#11 = (byte) cnt2#4 (byte) cnt2#5 -Alias (byte) cnt3#11 = (byte) cnt3#4 (byte) cnt3#5 Alias (byte) cnt#0 = (byte) cnt#15 -Alias (byte) cnt2#0 = (byte) cnt2#14 -Alias (byte) cnt3#0 = (byte) cnt3#14 Alias (byte) cnt#13 = (byte) cnt#7 -Alias (byte) cnt2#12 = (byte) cnt2#6 -Alias (byte) cnt3#12 = (byte) cnt3#6 Succesful SSA optimization Pass2AliasElimination Not aliassing across scopes: cnt#14 cnt#0 -Not aliassing across scopes: cnt2#13 cnt2#0 -Not aliassing across scopes: cnt3#13 cnt3#0 Not aliassing across scopes: inccnt::return#0 inccnt::return#2 Not aliassing across scopes: cnt#1 cnt#12 -Not aliassing across scopes: cnt2#1 cnt2#11 -Not aliassing across scopes: cnt3#1 cnt3#11 Not aliassing across scopes: main::$0 inccnt::return#0 Not aliassing across scopes: inccnt::return#1 inccnt::return#2 Not aliassing across scopes: cnt#10 cnt#12 -Not aliassing across scopes: cnt2#2 cnt2#11 -Not aliassing across scopes: cnt3#2 cnt3#11 Not aliassing across scopes: main::$1 inccnt::return#1 Not aliassing across scopes: cnt#11 cnt#14 -Not aliassing across scopes: cnt2#10 cnt2#13 -Not aliassing across scopes: cnt3#10 cnt3#13 Not aliassing across scopes: inccnt::return#2 cnt#12 Not aliassing across scopes: cnt#13 cnt#10 -Not aliassing across scopes: cnt2#12 cnt2#2 -Not aliassing across scopes: cnt3#12 cnt3#2 Redundant Phi (byte) cnt#14 (byte) cnt#0 -Redundant Phi (byte) cnt2#13 (byte) cnt2#0 -Redundant Phi (byte) cnt3#13 (byte) cnt3#0 Redundant Phi (byte) cnt#1 (byte) cnt#12 -Redundant Phi (byte) cnt2#1 (byte) cnt2#11 -Redundant Phi (byte) cnt3#1 (byte) cnt3#11 Redundant Phi (byte) cnt#10 (byte) cnt#12 -Redundant Phi (byte) cnt2#2 (byte) cnt2#11 -Redundant Phi (byte) cnt3#2 (byte) cnt3#11 Redundant Phi (byte) cnt#13 (byte) cnt#10 -Redundant Phi (byte) cnt2#12 (byte) cnt2#2 -Redundant Phi (byte) cnt3#12 (byte) cnt3#2 Succesful SSA optimization Pass2RedundantPhiElimination Constant (const byte) cnt#0 = 0 -Constant (const byte) cnt2#0 = 0 -Constant (const byte) cnt3#0 = 0 Constant (const byte[256]) SCREEN#0 = ((byte*))1024 Succesful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(SCREEN#0+0) @@ -346,13 +244,7 @@ OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) cnt#0 Inlining constant with var siblings (const byte) cnt#0 Inlining constant with var siblings (const byte) cnt#0 -Inlining constant with var siblings (const byte) cnt2#0 -Inlining constant with var siblings (const byte) cnt2#0 -Inlining constant with var siblings (const byte) cnt3#0 -Inlining constant with var siblings (const byte) cnt3#0 Constant inlined cnt#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined cnt3#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Constant inlined cnt2#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Succesful SSA optimization Pass2ConstantInlining Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inccnt inccnt::@return Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inccnt inccnt::@return @@ -362,7 +254,7 @@ Adding NOP phi() at start of @end Adding NOP phi() at start of main CALL GRAPH Calls in [] to main:2 -Calls in [main] to inccnt:5 inccnt:13 +Calls in [main] to inccnt:5 inccnt:11 Propagating live ranges... Propagating live ranges... @@ -370,15 +262,9 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Created 3 initial phi equivalence classes +Created 1 initial phi equivalence classes Coalesced [10] cnt#16 ← cnt#2 -Coalesced [11] cnt2#15 ← cnt2#11 -Coalesced [12] cnt3#15 ← cnt3#11 -Coalesced down to 3 phi equivalence classes +Coalesced down to 1 phi equivalence classes Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inccnt inccnt::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 @@ -390,9 +276,6 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... -Propagating live ranges... -Propagating live ranges... -Propagating live ranges... FINAL CONTROL FLOW GRAPH @begin: scope:[] from @@ -406,13 +289,13 @@ FINAL CONTROL FLOW GRAPH [3] phi() [ ] ( ) main: scope:[main] from @2 [4] phi() [ ] ( main:2 [ ] ) - [5] call inccnt [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) - [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ) + [5] call inccnt [ inccnt::return#2 cnt#12 ] ( main:2 [ inccnt::return#2 cnt#12 ] ) + [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 ] ( main:2 [ inccnt::return#0 cnt#12 ] ) to:main::@1 main::@1: scope:[main] from main - [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ) - [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ cnt#12 cnt2#11 cnt3#11 ] ) - [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 cnt2#11 cnt3#11 ] ( main:2 [ cnt#2 cnt2#11 cnt3#11 ] ) + [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 ] ( main:2 [ main::$0 cnt#12 ] ) + [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 ] ( main:2 [ cnt#12 ] ) + [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 ] ( main:2 [ cnt#2 ] ) [10] call inccnt [ inccnt::return#2 ] ( main:2 [ inccnt::return#2 ] ) [11] (byte) inccnt::return#1 ← (byte) inccnt::return#2 [ inccnt::return#1 ] ( main:2 [ inccnt::return#1 ] ) to:main::@2 @@ -424,16 +307,12 @@ main::@return: scope:[main] from main::@2 [14] return [ ] ( main:2 [ ] ) to:@return inccnt: scope:[inccnt] from main main::@1 - [15] (byte) cnt3#10 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) cnt3#11 ) [ cnt#11 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#11 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#11 cnt2#10 cnt3#10 ] ) - [15] (byte) cnt2#10 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) cnt2#11 ) [ cnt#11 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#11 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#11 cnt2#10 cnt3#10 ] ) - [15] (byte) cnt#11 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) cnt#2 ) [ cnt#11 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#11 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#11 cnt2#10 cnt3#10 ] ) - [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#12 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#12 cnt2#10 cnt3#10 ] ) - [17] (byte) cnt2#11 ← ++ (byte) cnt2#10 [ cnt#12 cnt3#10 cnt2#11 ] ( main:2::inccnt:5 [ cnt#12 cnt3#10 cnt2#11 ] main:2::inccnt:10 [ cnt#12 cnt3#10 cnt2#11 ] ) - [18] (byte) cnt3#11 ← ++ (byte) cnt3#10 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ cnt#12 cnt2#11 cnt3#11 ] ) - [19] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + [15] (byte) cnt#11 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) cnt#2 ) [ cnt#11 ] ( main:2::inccnt:5 [ cnt#11 ] main:2::inccnt:10 [ cnt#11 ] ) + [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 ] ( main:2::inccnt:5 [ cnt#12 ] main:2::inccnt:10 [ cnt#12 ] ) + [17] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) to:inccnt::@return inccnt::@return: scope:[inccnt] from inccnt - [20] return [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + [18] return [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) to:@return DOMINATORS @@ -459,14 +338,8 @@ VARIABLE REGISTER WEIGHTS (byte[256]) SCREEN (byte) cnt (byte) cnt#11 4.0 -(byte) cnt#12 0.6666666666666666 +(byte) cnt#12 0.8571428571428571 (byte) cnt#2 4.0 -(byte) cnt2 -(byte) cnt2#10 2.0 -(byte) cnt2#11 0.4444444444444444 -(byte) cnt3 -(byte) cnt3#10 1.3333333333333333 -(byte) cnt3#11 0.5 (byte()) inccnt() (byte) inccnt::return (byte) inccnt::return#0 4.0 @@ -478,8 +351,6 @@ VARIABLE REGISTER WEIGHTS Initial phi equivalence classes [ cnt#11 cnt#2 ] -[ cnt2#10 cnt2#11 ] -[ cnt3#10 cnt3#11 ] Added variable inccnt::return#0 to zero page equivalence class [ inccnt::return#0 ] Added variable main::$0 to zero page equivalence class [ main::$0 ] Added variable inccnt::return#1 to zero page equivalence class [ inccnt::return#1 ] @@ -488,8 +359,6 @@ Added variable cnt#12 to zero page equivalence class [ cnt#12 ] Added variable inccnt::return#2 to zero page equivalence class [ inccnt::return#2 ] Complete equivalence classes [ cnt#11 cnt#2 ] -[ cnt2#10 cnt2#11 ] -[ cnt3#10 cnt3#11 ] [ inccnt::return#0 ] [ main::$0 ] [ inccnt::return#1 ] @@ -497,14 +366,12 @@ Complete equivalence classes [ cnt#12 ] [ inccnt::return#2 ] Allocated zp ZP_BYTE:2 [ cnt#11 cnt#2 ] -Allocated zp ZP_BYTE:3 [ cnt2#10 cnt2#11 ] -Allocated zp ZP_BYTE:4 [ cnt3#10 cnt3#11 ] -Allocated zp ZP_BYTE:5 [ inccnt::return#0 ] -Allocated zp ZP_BYTE:6 [ main::$0 ] -Allocated zp ZP_BYTE:7 [ inccnt::return#1 ] -Allocated zp ZP_BYTE:8 [ main::$1 ] -Allocated zp ZP_BYTE:9 [ cnt#12 ] -Allocated zp ZP_BYTE:10 [ inccnt::return#2 ] +Allocated zp ZP_BYTE:3 [ inccnt::return#0 ] +Allocated zp ZP_BYTE:4 [ main::$0 ] +Allocated zp ZP_BYTE:5 [ inccnt::return#1 ] +Allocated zp ZP_BYTE:6 [ main::$1 ] +Allocated zp ZP_BYTE:7 [ cnt#12 ] +Allocated zp ZP_BYTE:8 [ inccnt::return#2 ] INITIAL ASM //SEG0 Basic Upstart @@ -514,9 +381,7 @@ INITIAL ASM //SEG1 Global Constants & labels .label SCREEN = $400 .label cnt = 2 - .label cnt2 = 3 - .label cnt3 = 4 - .label cnt_12 = 9 + .label cnt_12 = 7 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -535,108 +400,90 @@ bend_from_b2: bend: //SEG9 main main: { - .label _0 = 6 - .label _1 = 8 - //SEG10 [5] call inccnt [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + .label _0 = 4 + .label _1 = 6 + //SEG10 [5] call inccnt [ inccnt::return#2 cnt#12 ] ( main:2 [ inccnt::return#2 cnt#12 ] ) //SEG11 [15] phi from main to inccnt [phi:main->inccnt] inccnt_from_main: - //SEG12 [15] phi (byte) cnt3#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#0] -- vbuz1=vbuc1 - lda #0 - sta cnt3 - //SEG13 [15] phi (byte) cnt2#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#1] -- vbuz1=vbuc1 - lda #0 - sta cnt2 - //SEG14 [15] phi (byte) cnt#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#2] -- vbuz1=vbuc1 + //SEG12 [15] phi (byte) cnt#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#0] -- vbuz1=vbuc1 lda #0 sta cnt jsr inccnt - //SEG15 [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ) -- vbuz1=vbuz2 + //SEG13 [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 ] ( main:2 [ inccnt::return#0 cnt#12 ] ) -- vbuz1=vbuz2 lda inccnt.return_2 sta inccnt.return jmp b1 - //SEG16 main::@1 + //SEG14 main::@1 b1: - //SEG17 [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ) -- vbuz1=vbuz2 + //SEG15 [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 ] ( main:2 [ main::$0 cnt#12 ] ) -- vbuz1=vbuz2 lda inccnt.return sta _0 - //SEG18 [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ cnt#12 cnt2#11 cnt3#11 ] ) -- _deref_pbuc1=vbuz1 + //SEG16 [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 ] ( main:2 [ cnt#12 ] ) -- _deref_pbuc1=vbuz1 lda _0 sta SCREEN+0 - //SEG19 [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 cnt2#11 cnt3#11 ] ( main:2 [ cnt#2 cnt2#11 cnt3#11 ] ) -- vbuz1=_inc_vbuz2 + //SEG17 [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 ] ( main:2 [ cnt#2 ] ) -- vbuz1=_inc_vbuz2 ldy cnt_12 iny sty cnt - //SEG20 [10] call inccnt [ inccnt::return#2 ] ( main:2 [ inccnt::return#2 ] ) - //SEG21 [15] phi from main::@1 to inccnt [phi:main::@1->inccnt] + //SEG18 [10] call inccnt [ inccnt::return#2 ] ( main:2 [ inccnt::return#2 ] ) + //SEG19 [15] phi from main::@1 to inccnt [phi:main::@1->inccnt] inccnt_from_b1: - //SEG22 [15] phi (byte) cnt3#10 = (byte) cnt3#11 [phi:main::@1->inccnt#0] -- register_copy - //SEG23 [15] phi (byte) cnt2#10 = (byte) cnt2#11 [phi:main::@1->inccnt#1] -- register_copy - //SEG24 [15] phi (byte) cnt#11 = (byte) cnt#2 [phi:main::@1->inccnt#2] -- register_copy + //SEG20 [15] phi (byte) cnt#11 = (byte) cnt#2 [phi:main::@1->inccnt#0] -- register_copy jsr inccnt - //SEG25 [11] (byte) inccnt::return#1 ← (byte) inccnt::return#2 [ inccnt::return#1 ] ( main:2 [ inccnt::return#1 ] ) -- vbuz1=vbuz2 + //SEG21 [11] (byte) inccnt::return#1 ← (byte) inccnt::return#2 [ inccnt::return#1 ] ( main:2 [ inccnt::return#1 ] ) -- vbuz1=vbuz2 lda inccnt.return_2 sta inccnt.return_1 jmp b2 - //SEG26 main::@2 + //SEG22 main::@2 b2: - //SEG27 [12] (byte~) main::$1 ← (byte) inccnt::return#1 [ main::$1 ] ( main:2 [ main::$1 ] ) -- vbuz1=vbuz2 + //SEG23 [12] (byte~) main::$1 ← (byte) inccnt::return#1 [ main::$1 ] ( main:2 [ main::$1 ] ) -- vbuz1=vbuz2 lda inccnt.return_1 sta _1 - //SEG28 [13] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuz1 + //SEG24 [13] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuz1 lda _1 sta SCREEN+1 jmp breturn - //SEG29 main::@return + //SEG25 main::@return breturn: - //SEG30 [14] return [ ] ( main:2 [ ] ) + //SEG26 [14] return [ ] ( main:2 [ ] ) rts } -//SEG31 inccnt +//SEG27 inccnt inccnt: { - .label return = 5 - .label return_1 = 7 - .label return_2 = $a - //SEG32 [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#12 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#12 cnt2#10 cnt3#10 ] ) -- vbuz1=_inc_vbuz2 + .label return = 3 + .label return_1 = 5 + .label return_2 = 8 + //SEG28 [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 ] ( main:2::inccnt:5 [ cnt#12 ] main:2::inccnt:10 [ cnt#12 ] ) -- vbuz1=_inc_vbuz2 ldy cnt iny sty cnt_12 - //SEG33 [17] (byte) cnt2#11 ← ++ (byte) cnt2#10 [ cnt#12 cnt3#10 cnt2#11 ] ( main:2::inccnt:5 [ cnt#12 cnt3#10 cnt2#11 ] main:2::inccnt:10 [ cnt#12 cnt3#10 cnt2#11 ] ) -- vbuz1=_inc_vbuz1 - inc cnt2 - //SEG34 [18] (byte) cnt3#11 ← ++ (byte) cnt3#10 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ cnt#12 cnt2#11 cnt3#11 ] ) -- vbuz1=_inc_vbuz1 - inc cnt3 - //SEG35 [19] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) -- vbuz1=vbuz2 + //SEG29 [17] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) -- vbuz1=vbuz2 lda cnt_12 sta return_2 jmp breturn - //SEG36 inccnt::@return + //SEG30 inccnt::@return breturn: - //SEG37 [20] return [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + //SEG31 [18] return [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) rts } REGISTER UPLIFT POTENTIAL REGISTERS Potential registers zp ZP_BYTE:2 [ cnt#11 cnt#2 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:3 [ cnt2#10 cnt2#11 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:4 [ cnt3#10 cnt3#11 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:5 [ inccnt::return#0 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:6 [ main::$0 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:7 [ inccnt::return#1 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:8 [ main::$1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 [ cnt#12 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:10 [ inccnt::return#2 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ inccnt::return#0 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::$0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ inccnt::return#1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ main::$1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ cnt#12 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ inccnt::return#2 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [] 8: zp ZP_BYTE:2 [ cnt#11 cnt#2 ] 2.44: zp ZP_BYTE:3 [ cnt2#10 cnt2#11 ] 1.83: zp ZP_BYTE:4 [ cnt3#10 cnt3#11 ] 0.67: zp ZP_BYTE:9 [ cnt#12 ] -Uplift Scope [inccnt] 4: zp ZP_BYTE:5 [ inccnt::return#0 ] 4: zp ZP_BYTE:7 [ inccnt::return#1 ] 1.5: zp ZP_BYTE:10 [ inccnt::return#2 ] -Uplift Scope [main] 4: zp ZP_BYTE:6 [ main::$0 ] 4: zp ZP_BYTE:8 [ main::$1 ] +Uplift Scope [inccnt] 4: zp ZP_BYTE:3 [ inccnt::return#0 ] 4: zp ZP_BYTE:5 [ inccnt::return#1 ] 1.5: zp ZP_BYTE:8 [ inccnt::return#2 ] +Uplift Scope [] 8: zp ZP_BYTE:2 [ cnt#11 cnt#2 ] 0.86: zp ZP_BYTE:7 [ cnt#12 ] +Uplift Scope [main] 4: zp ZP_BYTE:4 [ main::$0 ] 4: zp ZP_BYTE:6 [ main::$1 ] -Uplifting [] best 116 combination reg byte a [ cnt#11 cnt#2 ] reg byte y [ cnt2#10 cnt2#11 ] reg byte x [ cnt3#10 cnt3#11 ] zp ZP_BYTE:9 [ cnt#12 ] -Limited combination testing to 100 combinations of 256 possible. -Uplifting [inccnt] best 95 combination reg byte a [ inccnt::return#0 ] reg byte a [ inccnt::return#1 ] reg byte a [ inccnt::return#2 ] -Uplifting [main] best 83 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] -Attempting to uplift remaining variables inzp ZP_BYTE:9 [ cnt#12 ] -Uplifting [] best 83 combination zp ZP_BYTE:9 [ cnt#12 ] -Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:2 [ cnt#12 ] +Uplifting [inccnt] best 92 combination reg byte a [ inccnt::return#0 ] reg byte a [ inccnt::return#1 ] reg byte a [ inccnt::return#2 ] +Uplifting [] best 76 combination reg byte x [ cnt#11 cnt#2 ] reg byte x [ cnt#12 ] +Uplifting [main] best 64 combination reg byte a [ main::$0 ] reg byte a [ main::$1 ] ASSEMBLER BEFORE OPTIMIZATION //SEG0 Basic Upstart @@ -645,7 +492,6 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" //SEG1 Global Constants & labels .label SCREEN = $400 - .label cnt = 2 //SEG2 @begin bbegin: //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] @@ -664,67 +510,53 @@ bend_from_b2: bend: //SEG9 main main: { - //SEG10 [5] call inccnt [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + //SEG10 [5] call inccnt [ inccnt::return#2 cnt#12 ] ( main:2 [ inccnt::return#2 cnt#12 ] ) //SEG11 [15] phi from main to inccnt [phi:main->inccnt] inccnt_from_main: - //SEG12 [15] phi (byte) cnt3#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 + //SEG12 [15] phi (byte) cnt#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 ldx #0 - //SEG13 [15] phi (byte) cnt2#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 - ldy #0 - //SEG14 [15] phi (byte) cnt#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 - lda #0 jsr inccnt - //SEG15 [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ) + //SEG13 [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 ] ( main:2 [ inccnt::return#0 cnt#12 ] ) // (byte) inccnt::return#0 = (byte) inccnt::return#2 // register copy reg byte a jmp b1 - //SEG16 main::@1 + //SEG14 main::@1 b1: - //SEG17 [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ) + //SEG15 [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 ] ( main:2 [ main::$0 cnt#12 ] ) // (byte~) main::$0 = (byte) inccnt::return#0 // register copy reg byte a - //SEG18 [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ cnt#12 cnt2#11 cnt3#11 ] ) -- _deref_pbuc1=vbuaa + //SEG16 [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 ] ( main:2 [ cnt#12 ] ) -- _deref_pbuc1=vbuaa sta SCREEN+0 - //SEG19 [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 cnt2#11 cnt3#11 ] ( main:2 [ cnt#2 cnt2#11 cnt3#11 ] ) -- vbuaa=_inc_vbuz1 - lda cnt - clc - adc #1 - //SEG20 [10] call inccnt [ inccnt::return#2 ] ( main:2 [ inccnt::return#2 ] ) - //SEG21 [15] phi from main::@1 to inccnt [phi:main::@1->inccnt] + //SEG17 [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 ] ( main:2 [ cnt#2 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG18 [10] call inccnt [ inccnt::return#2 ] ( main:2 [ inccnt::return#2 ] ) + //SEG19 [15] phi from main::@1 to inccnt [phi:main::@1->inccnt] inccnt_from_b1: - //SEG22 [15] phi (byte) cnt3#10 = (byte) cnt3#11 [phi:main::@1->inccnt#0] -- register_copy - //SEG23 [15] phi (byte) cnt2#10 = (byte) cnt2#11 [phi:main::@1->inccnt#1] -- register_copy - //SEG24 [15] phi (byte) cnt#11 = (byte) cnt#2 [phi:main::@1->inccnt#2] -- register_copy + //SEG20 [15] phi (byte) cnt#11 = (byte) cnt#2 [phi:main::@1->inccnt#0] -- register_copy jsr inccnt - //SEG25 [11] (byte) inccnt::return#1 ← (byte) inccnt::return#2 [ inccnt::return#1 ] ( main:2 [ inccnt::return#1 ] ) + //SEG21 [11] (byte) inccnt::return#1 ← (byte) inccnt::return#2 [ inccnt::return#1 ] ( main:2 [ inccnt::return#1 ] ) // (byte) inccnt::return#1 = (byte) inccnt::return#2 // register copy reg byte a jmp b2 - //SEG26 main::@2 + //SEG22 main::@2 b2: - //SEG27 [12] (byte~) main::$1 ← (byte) inccnt::return#1 [ main::$1 ] ( main:2 [ main::$1 ] ) + //SEG23 [12] (byte~) main::$1 ← (byte) inccnt::return#1 [ main::$1 ] ( main:2 [ main::$1 ] ) // (byte~) main::$1 = (byte) inccnt::return#1 // register copy reg byte a - //SEG28 [13] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuaa + //SEG24 [13] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuaa sta SCREEN+1 jmp breturn - //SEG29 main::@return + //SEG25 main::@return breturn: - //SEG30 [14] return [ ] ( main:2 [ ] ) + //SEG26 [14] return [ ] ( main:2 [ ] ) rts } -//SEG31 inccnt +//SEG27 inccnt inccnt: { - //SEG32 [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#12 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#12 cnt2#10 cnt3#10 ] ) -- vbuz1=_inc_vbuaa - clc - adc #1 - sta cnt - //SEG33 [17] (byte) cnt2#11 ← ++ (byte) cnt2#10 [ cnt#12 cnt3#10 cnt2#11 ] ( main:2::inccnt:5 [ cnt#12 cnt3#10 cnt2#11 ] main:2::inccnt:10 [ cnt#12 cnt3#10 cnt2#11 ] ) -- vbuyy=_inc_vbuyy - iny - //SEG34 [18] (byte) cnt3#11 ← ++ (byte) cnt3#10 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ cnt#12 cnt2#11 cnt3#11 ] ) -- vbuxx=_inc_vbuxx + //SEG28 [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 ] ( main:2::inccnt:5 [ cnt#12 ] main:2::inccnt:10 [ cnt#12 ] ) -- vbuxx=_inc_vbuxx inx - //SEG35 [19] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) -- vbuaa=vbuz1 - lda cnt + //SEG29 [17] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) -- vbuaa=vbuxx + txa jmp breturn - //SEG36 inccnt::@return + //SEG30 inccnt::@return breturn: - //SEG37 [20] return [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + //SEG31 [18] return [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) rts } @@ -736,9 +568,6 @@ Removing instruction jmp b2 Removing instruction jmp breturn Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination -Replacing instruction lda #0 with TXA -Removing instruction lda cnt -Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction bbegin: Removing instruction b2_from_bbegin: Removing instruction main_from_b2: @@ -761,15 +590,9 @@ FINAL SYMBOL TABLE (byte[256]) SCREEN (const byte[256]) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (byte) cnt -(byte) cnt#11 reg byte a 4.0 -(byte) cnt#12 cnt zp ZP_BYTE:2 0.6666666666666666 -(byte) cnt#2 reg byte a 4.0 -(byte) cnt2 -(byte) cnt2#10 reg byte y 2.0 -(byte) cnt2#11 reg byte y 0.4444444444444444 -(byte) cnt3 -(byte) cnt3#10 reg byte x 1.3333333333333333 -(byte) cnt3#11 reg byte x 0.5 +(byte) cnt#11 reg byte x 4.0 +(byte) cnt#12 reg byte x 0.8571428571428571 +(byte) cnt#2 reg byte x 4.0 (byte()) inccnt() (label) inccnt::@return (byte) inccnt::return @@ -783,19 +606,17 @@ FINAL SYMBOL TABLE (label) main::@2 (label) main::@return -reg byte a [ cnt#11 cnt#2 ] -reg byte y [ cnt2#10 cnt2#11 ] -reg byte x [ cnt3#10 cnt3#11 ] +reg byte x [ cnt#11 cnt#2 ] reg byte a [ inccnt::return#0 ] reg byte a [ main::$0 ] reg byte a [ inccnt::return#1 ] reg byte a [ main::$1 ] -zp ZP_BYTE:2 [ cnt#12 ] +reg byte x [ cnt#12 ] reg byte a [ inccnt::return#2 ] FINAL ASSEMBLER -Score: 62 +Score: 46 //SEG0 Basic Upstart .pc = $801 "Basic" @@ -803,7 +624,6 @@ Score: 62 .pc = $80d "Program" //SEG1 Global Constants & labels .label SCREEN = $400 - .label cnt = 2 //SEG2 @begin //SEG3 [1] phi from @begin to @2 [phi:@begin->@2] //SEG4 @2 @@ -814,56 +634,43 @@ Score: 62 //SEG8 @end //SEG9 main main: { - //SEG10 [5] call inccnt [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + //SEG10 [5] call inccnt [ inccnt::return#2 cnt#12 ] ( main:2 [ inccnt::return#2 cnt#12 ] ) //SEG11 [15] phi from main to inccnt [phi:main->inccnt] - //SEG12 [15] phi (byte) cnt3#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 + //SEG12 [15] phi (byte) cnt#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#0] -- vbuxx=vbuc1 ldx #0 - //SEG13 [15] phi (byte) cnt2#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#1] -- vbuyy=vbuc1 - ldy #0 - //SEG14 [15] phi (byte) cnt#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->inccnt#2] -- vbuaa=vbuc1 - txa jsr inccnt - //SEG15 [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ inccnt::return#0 cnt#12 cnt2#11 cnt3#11 ] ) + //SEG13 [6] (byte) inccnt::return#0 ← (byte) inccnt::return#2 [ inccnt::return#0 cnt#12 ] ( main:2 [ inccnt::return#0 cnt#12 ] ) // (byte) inccnt::return#0 = (byte) inccnt::return#2 // register copy reg byte a - //SEG16 main::@1 - //SEG17 [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ main::$0 cnt#12 cnt2#11 cnt3#11 ] ) + //SEG14 main::@1 + //SEG15 [7] (byte~) main::$0 ← (byte) inccnt::return#0 [ main::$0 cnt#12 ] ( main:2 [ main::$0 cnt#12 ] ) // (byte~) main::$0 = (byte) inccnt::return#0 // register copy reg byte a - //SEG18 [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2 [ cnt#12 cnt2#11 cnt3#11 ] ) -- _deref_pbuc1=vbuaa + //SEG16 [8] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ cnt#12 ] ( main:2 [ cnt#12 ] ) -- _deref_pbuc1=vbuaa sta SCREEN+0 - //SEG19 [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 cnt2#11 cnt3#11 ] ( main:2 [ cnt#2 cnt2#11 cnt3#11 ] ) -- vbuaa=_inc_vbuz1 - lda cnt - clc - adc #1 - //SEG20 [10] call inccnt [ inccnt::return#2 ] ( main:2 [ inccnt::return#2 ] ) - //SEG21 [15] phi from main::@1 to inccnt [phi:main::@1->inccnt] - //SEG22 [15] phi (byte) cnt3#10 = (byte) cnt3#11 [phi:main::@1->inccnt#0] -- register_copy - //SEG23 [15] phi (byte) cnt2#10 = (byte) cnt2#11 [phi:main::@1->inccnt#1] -- register_copy - //SEG24 [15] phi (byte) cnt#11 = (byte) cnt#2 [phi:main::@1->inccnt#2] -- register_copy + //SEG17 [9] (byte) cnt#2 ← ++ (byte) cnt#12 [ cnt#2 ] ( main:2 [ cnt#2 ] ) -- vbuxx=_inc_vbuxx + inx + //SEG18 [10] call inccnt [ inccnt::return#2 ] ( main:2 [ inccnt::return#2 ] ) + //SEG19 [15] phi from main::@1 to inccnt [phi:main::@1->inccnt] + //SEG20 [15] phi (byte) cnt#11 = (byte) cnt#2 [phi:main::@1->inccnt#0] -- register_copy jsr inccnt - //SEG25 [11] (byte) inccnt::return#1 ← (byte) inccnt::return#2 [ inccnt::return#1 ] ( main:2 [ inccnt::return#1 ] ) + //SEG21 [11] (byte) inccnt::return#1 ← (byte) inccnt::return#2 [ inccnt::return#1 ] ( main:2 [ inccnt::return#1 ] ) // (byte) inccnt::return#1 = (byte) inccnt::return#2 // register copy reg byte a - //SEG26 main::@2 - //SEG27 [12] (byte~) main::$1 ← (byte) inccnt::return#1 [ main::$1 ] ( main:2 [ main::$1 ] ) + //SEG22 main::@2 + //SEG23 [12] (byte~) main::$1 ← (byte) inccnt::return#1 [ main::$1 ] ( main:2 [ main::$1 ] ) // (byte~) main::$1 = (byte) inccnt::return#1 // register copy reg byte a - //SEG28 [13] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuaa + //SEG24 [13] *((const byte[256]) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuaa sta SCREEN+1 - //SEG29 main::@return - //SEG30 [14] return [ ] ( main:2 [ ] ) + //SEG25 main::@return + //SEG26 [14] return [ ] ( main:2 [ ] ) rts } -//SEG31 inccnt +//SEG27 inccnt inccnt: { - //SEG32 [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 cnt2#10 cnt3#10 ] ( main:2::inccnt:5 [ cnt#12 cnt2#10 cnt3#10 ] main:2::inccnt:10 [ cnt#12 cnt2#10 cnt3#10 ] ) -- vbuz1=_inc_vbuaa - clc - adc #1 - sta cnt - //SEG33 [17] (byte) cnt2#11 ← ++ (byte) cnt2#10 [ cnt#12 cnt3#10 cnt2#11 ] ( main:2::inccnt:5 [ cnt#12 cnt3#10 cnt2#11 ] main:2::inccnt:10 [ cnt#12 cnt3#10 cnt2#11 ] ) -- vbuyy=_inc_vbuyy - iny - //SEG34 [18] (byte) cnt3#11 ← ++ (byte) cnt3#10 [ cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ cnt#12 cnt2#11 cnt3#11 ] ) -- vbuxx=_inc_vbuxx + //SEG28 [16] (byte) cnt#12 ← ++ (byte) cnt#11 [ cnt#12 ] ( main:2::inccnt:5 [ cnt#12 ] main:2::inccnt:10 [ cnt#12 ] ) -- vbuxx=_inc_vbuxx inx - //SEG35 [19] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) -- vbuaa=vbuz1 - //SEG36 inccnt::@return - //SEG37 [20] return [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 cnt2#11 cnt3#11 ] ) + //SEG29 [17] (byte) inccnt::return#2 ← (byte) cnt#12 [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) -- vbuaa=vbuxx + txa + //SEG30 inccnt::@return + //SEG31 [18] return [ inccnt::return#2 cnt#12 ] ( main:2::inccnt:5 [ inccnt::return#2 cnt#12 ] main:2::inccnt:10 [ inccnt::return#2 cnt#12 ] ) rts } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.sym b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.sym index 41454f6dd..d3f24d405 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.sym @@ -4,15 +4,9 @@ (byte[256]) SCREEN (const byte[256]) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (byte) cnt -(byte) cnt#11 reg byte a 4.0 -(byte) cnt#12 cnt zp ZP_BYTE:2 0.6666666666666666 -(byte) cnt#2 reg byte a 4.0 -(byte) cnt2 -(byte) cnt2#10 reg byte y 2.0 -(byte) cnt2#11 reg byte y 0.4444444444444444 -(byte) cnt3 -(byte) cnt3#10 reg byte x 1.3333333333333333 -(byte) cnt3#11 reg byte x 0.5 +(byte) cnt#11 reg byte x 4.0 +(byte) cnt#12 reg byte x 0.8571428571428571 +(byte) cnt#2 reg byte x 4.0 (byte()) inccnt() (label) inccnt::@return (byte) inccnt::return @@ -26,12 +20,10 @@ (label) main::@2 (label) main::@return -reg byte a [ cnt#11 cnt#2 ] -reg byte y [ cnt2#10 cnt2#11 ] -reg byte x [ cnt3#10 cnt3#11 ] +reg byte x [ cnt#11 cnt#2 ] reg byte a [ inccnt::return#0 ] reg byte a [ main::$0 ] reg byte a [ inccnt::return#1 ] reg byte a [ main::$1 ] -zp ZP_BYTE:2 [ cnt#12 ] +reg byte x [ cnt#12 ] reg byte a [ inccnt::return#2 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.asm b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.asm index d150f1cf5..60e68fc75 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.asm +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.asm @@ -33,21 +33,12 @@ lvaluevar: { jmp b1 } rvaluevar: { - .label screen = 2 - lda #<$400 - sta screen - lda #>$400 - sta screen+1 ldx #2 b1: cpx #$a bcc b2 rts b2: - inc screen - bne !+ - inc screen+1 - !: inx jmp b1 } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.cfg b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.cfg index 3cf664c10..58efa991b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.cfg @@ -46,42 +46,40 @@ rvaluevar: scope:[rvaluevar] from main::@2 [20] phi() [ ] ( main:2::rvaluevar:9 [ ] ) to:rvaluevar::@1 rvaluevar::@1: scope:[rvaluevar] from rvaluevar rvaluevar::@2 - [21] (byte*) rvaluevar::screen#2 ← phi( rvaluevar/((byte*))(word/signed word/dword/signed dword) 1024 rvaluevar::@2/(byte*) rvaluevar::screen#1 ) [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) - [21] (byte) rvaluevar::i#2 ← phi( rvaluevar/(byte/signed byte/word/signed word/dword/signed dword) 2 rvaluevar::@2/(byte) rvaluevar::i#1 ) [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) - [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) + [21] (byte) rvaluevar::i#2 ← phi( rvaluevar/(byte/signed byte/word/signed word/dword/signed dword) 2 rvaluevar::@2/(byte) rvaluevar::i#1 ) [ rvaluevar::i#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 ] ) + [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 ] ) to:rvaluevar::@return rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1 [23] return [ ] ( main:2::rvaluevar:9 [ ] ) to:@return rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1 - [24] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#1 ] ) - [25] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 rvaluevar::screen#1 ] ) + [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 ] ) to:rvaluevar::@1 rvalue: scope:[rvalue] from main::@1 - [26] phi() [ ] ( main:2::rvalue:7 [ ] ) + [25] phi() [ ] ( main:2::rvalue:7 [ ] ) to:rvalue::@1 rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 - [27] (byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word/dword/signed dword) 2 rvalue::@2/(byte) rvalue::i#1 ) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) - [28] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) + [26] (byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word/dword/signed dword) 2 rvalue::@2/(byte) rvalue::i#1 ) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) + [27] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) to:rvalue::@return rvalue::@return: scope:[rvalue] from rvalue::@1 - [29] return [ ] ( main:2::rvalue:7 [ ] ) + [28] return [ ] ( main:2::rvalue:7 [ ] ) to:@return rvalue::@2: scope:[rvalue] from rvalue::@1 - [30] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) + [29] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) to:rvalue::@1 lvalue: scope:[lvalue] from main - [31] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) - [32] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) + [30] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) + [31] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) to:lvalue::@1 lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 - [33] (byte) lvalue::i#2 ← phi( lvalue/(byte/signed byte/word/signed word/dword/signed dword) 2 lvalue::@2/(byte) lvalue::i#1 ) [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) - [34] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) + [32] (byte) lvalue::i#2 ← phi( lvalue/(byte/signed byte/word/signed word/dword/signed dword) 2 lvalue::@2/(byte) lvalue::i#1 ) [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) + [33] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) to:lvalue::@return lvalue::@return: scope:[lvalue] from lvalue::@1 - [35] return [ ] ( main:2::lvalue:5 [ ] ) + [34] return [ ] ( main:2::lvalue:5 [ ] ) to:@return lvalue::@2: scope:[lvalue] from lvalue::@1 - [36] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) - [37] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) + [35] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) + [36] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) to:lvalue::@1 diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log index 77efb03e4..4f8148de7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log @@ -273,7 +273,13 @@ Eliminating unused variable - keeping the call (void~) main::$0 Eliminating unused variable - keeping the call (void~) main::$1 Eliminating unused variable - keeping the call (void~) main::$2 Eliminating unused variable - keeping the call (void~) main::$3 +Eliminating unused variable (byte) rvalue::b and assignment [15] (byte) rvalue::b ← *((byte[1024]) rvalue::SCREEN) +Eliminating unused variable rvalue::b(null) and assignment [16] rvalue::b(null) ← *((byte[1024]) rvalue::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1) +Eliminating unused variable rvalue::b(null) and assignment [20] rvalue::b(null) ← *((byte[1024]) rvalue::SCREEN + (byte) rvalue::i) Eliminating unused variable (byte) rvaluevar::b and assignment [36] (byte) rvaluevar::b ← *((byte*) rvaluevar::screen) +Eliminating unused variable (byte[1024]) rvalue::SCREEN and assignment [14] (byte[1024]) rvalue::SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 +Eliminating unused variable (byte*) rvaluevar::screen and assignment [29] (byte*) rvaluevar::screen ← ((byte*)) (word/signed word/dword/signed dword) 1024 +Eliminating unused variable rvaluevar::screen(null) and assignment [33] rvaluevar::screen(null) ← ++ rvaluevar::screen(null) Removing empty block @1 Removing empty block lvalue::@4 Removing empty block lvalue::@3 @@ -339,9 +345,6 @@ lvalue::@return: scope:[lvalue] from lvalue::@1 return to:@return rvalue: scope:[rvalue] from main::@1 - (byte[1024]) rvalue::SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 - (byte) rvalue::b#0 ← *((byte[1024]) rvalue::SCREEN#0) - (byte) rvalue::b#1 ← *((byte[1024]) rvalue::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) (byte) rvalue::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 to:rvalue::@1 rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 @@ -351,7 +354,6 @@ rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 to:rvalue::@return rvalue::@2: scope:[rvalue] from rvalue::@1 (byte) rvalue::i#3 ← phi( rvalue::@1/(byte) rvalue::i#2 ) - (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#3) (byte) rvalue::i#1 ← ++ (byte) rvalue::i#3 to:rvalue::@1 rvalue::@return: scope:[rvalue] from rvalue::@1 @@ -381,19 +383,15 @@ lvaluevar::@return: scope:[lvaluevar] from lvaluevar::@1 return to:@return rvaluevar: scope:[rvaluevar] from main::@2 - (byte*) rvaluevar::screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte) rvaluevar::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2 to:rvaluevar::@1 rvaluevar::@1: scope:[rvaluevar] from rvaluevar rvaluevar::@2 - (byte*) rvaluevar::screen#3 ← phi( rvaluevar/(byte*) rvaluevar::screen#0 rvaluevar::@2/(byte*) rvaluevar::screen#1 ) (byte) rvaluevar::i#2 ← phi( rvaluevar/(byte) rvaluevar::i#0 rvaluevar::@2/(byte) rvaluevar::i#1 ) (bool~) rvaluevar::$0 ← (byte) rvaluevar::i#2 < (byte/signed byte/word/signed word/dword/signed dword) 10 if((bool~) rvaluevar::$0) goto rvaluevar::@2 to:rvaluevar::@return rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1 (byte) rvaluevar::i#3 ← phi( rvaluevar::@1/(byte) rvaluevar::i#2 ) - (byte*) rvaluevar::screen#2 ← phi( rvaluevar::@1/(byte*) rvaluevar::screen#3 ) - (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#3 to:rvaluevar::@1 rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1 @@ -453,12 +451,6 @@ SYMBOL TABLE SSA (label) rvalue::@1 (label) rvalue::@2 (label) rvalue::@return -(byte[1024]) rvalue::SCREEN -(byte[1024]) rvalue::SCREEN#0 -(byte) rvalue::b -(byte) rvalue::b#0 -(byte) rvalue::b#1 -(byte) rvalue::b#2 (byte) rvalue::i (byte) rvalue::i#0 (byte) rvalue::i#1 @@ -474,11 +466,6 @@ SYMBOL TABLE SSA (byte) rvaluevar::i#1 (byte) rvaluevar::i#2 (byte) rvaluevar::i#3 -(byte*) rvaluevar::screen -(byte*) rvaluevar::screen#0 -(byte*) rvaluevar::screen#1 -(byte*) rvaluevar::screen#2 -(byte*) rvaluevar::screen#3 OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@4 @@ -489,7 +476,6 @@ Alias (byte) rvalue::i#2 = (byte) rvalue::i#3 Alias (byte) lvaluevar::b#1 = (byte) lvaluevar::b#2 Alias (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#3 Alias (byte) lvaluevar::i#2 = (byte) lvaluevar::i#3 -Alias (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#3 Alias (byte) rvaluevar::i#2 = (byte) rvaluevar::i#3 Succesful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) lvaluevar::b#1 @@ -503,23 +489,14 @@ Simple Condition (bool~) rvaluevar::$0 if((byte) rvaluevar::i#2<(byte/signed byt Succesful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[1024]) lvalue::SCREEN#0 = ((byte*))1024 Constant (const byte) lvalue::i#0 = 2 -Constant (const byte[1024]) rvalue::SCREEN#0 = ((byte*))1024 Constant (const byte) rvalue::i#0 = 2 Constant (const byte*) lvaluevar::screen#0 = ((byte*))1024 Constant (const byte) lvaluevar::b#0 = 4 Constant (const byte) lvaluevar::i#0 = 2 -Constant (const byte*) rvaluevar::screen#0 = ((byte*))1024 Constant (const byte) rvaluevar::i#0 = 2 Succesful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(lvalue::SCREEN#0+1) -Consolidated array index constant in *(rvalue::SCREEN#0+1) Succesful SSA optimization Pass2ConstantAdditionElimination -Eliminating unused variable (byte) rvalue::b#0 and assignment [12] (byte) rvalue::b#0 ← *((const byte[1024]) rvalue::SCREEN#0) -Eliminating unused variable (byte) rvalue::b#1 and assignment [13] (byte) rvalue::b#1 ← *((const byte[1024]) rvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) -Eliminating unused variable (byte) rvalue::b#2 and assignment [16] (byte) rvalue::b#2 ← *((const byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) -Succesful SSA optimization PassNEliminateUnusedVars -Eliminating unused constant (const byte[1024]) rvalue::SCREEN#0 -Succesful SSA optimization PassNEliminateUnusedVars OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) lvalue::i#0 Inlining constant with var siblings (const byte) lvalue::i#0 @@ -529,14 +506,11 @@ Inlining constant with var siblings (const byte*) lvaluevar::screen#0 Inlining constant with var siblings (const byte*) lvaluevar::screen#0 Inlining constant with var siblings (const byte) lvaluevar::i#0 Inlining constant with var siblings (const byte) lvaluevar::i#0 -Inlining constant with var siblings (const byte*) rvaluevar::screen#0 -Inlining constant with var siblings (const byte*) rvaluevar::screen#0 Inlining constant with var siblings (const byte) rvaluevar::i#0 Inlining constant with var siblings (const byte) rvaluevar::i#0 -Constant inlined lvalue::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 2 -Constant inlined rvaluevar::screen#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined rvalue::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined lvaluevar::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 2 +Constant inlined lvalue::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined lvaluevar::screen#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined rvaluevar::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 2 Succesful SSA optimization Pass2ConstantInlining @@ -560,14 +534,13 @@ Propagating live ranges... Propagating live ranges... Propagating live ranges... Propagating live ranges... -Created 6 initial phi equivalence classes +Created 5 initial phi equivalence classes Coalesced [20] lvaluevar::i#4 ← lvaluevar::i#1 Coalesced [21] lvaluevar::screen#4 ← lvaluevar::screen#1 -Coalesced [28] rvaluevar::i#4 ← rvaluevar::i#1 -Coalesced [29] rvaluevar::screen#4 ← rvaluevar::screen#1 -Coalesced [35] rvalue::i#4 ← rvalue::i#1 -Coalesced [43] lvalue::i#4 ← lvalue::i#1 -Coalesced down to 6 phi equivalence classes +Coalesced [27] rvaluevar::i#4 ← rvaluevar::i#1 +Coalesced [33] rvalue::i#4 ← rvalue::i#1 +Coalesced [41] lvalue::i#4 ← lvalue::i#1 +Coalesced down to 5 phi equivalence classes Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return lvaluevar lvaluevar::@1 lvaluevar::@return lvaluevar::@2 rvaluevar rvaluevar::@1 rvaluevar::@return rvaluevar::@2 rvalue rvalue::@1 rvalue::@return rvalue::@2 lvalue lvalue::@1 lvalue::@return lvalue::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 @@ -633,44 +606,42 @@ rvaluevar: scope:[rvaluevar] from main::@2 [20] phi() [ ] ( main:2::rvaluevar:9 [ ] ) to:rvaluevar::@1 rvaluevar::@1: scope:[rvaluevar] from rvaluevar rvaluevar::@2 - [21] (byte*) rvaluevar::screen#2 ← phi( rvaluevar/((byte*))(word/signed word/dword/signed dword) 1024 rvaluevar::@2/(byte*) rvaluevar::screen#1 ) [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) - [21] (byte) rvaluevar::i#2 ← phi( rvaluevar/(byte/signed byte/word/signed word/dword/signed dword) 2 rvaluevar::@2/(byte) rvaluevar::i#1 ) [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) - [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) + [21] (byte) rvaluevar::i#2 ← phi( rvaluevar/(byte/signed byte/word/signed word/dword/signed dword) 2 rvaluevar::@2/(byte) rvaluevar::i#1 ) [ rvaluevar::i#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 ] ) + [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 ] ) to:rvaluevar::@return rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1 [23] return [ ] ( main:2::rvaluevar:9 [ ] ) to:@return rvaluevar::@2: scope:[rvaluevar] from rvaluevar::@1 - [24] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#1 ] ) - [25] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 rvaluevar::screen#1 ] ) + [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 ] ) to:rvaluevar::@1 rvalue: scope:[rvalue] from main::@1 - [26] phi() [ ] ( main:2::rvalue:7 [ ] ) + [25] phi() [ ] ( main:2::rvalue:7 [ ] ) to:rvalue::@1 rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 - [27] (byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word/dword/signed dword) 2 rvalue::@2/(byte) rvalue::i#1 ) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) - [28] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) + [26] (byte) rvalue::i#2 ← phi( rvalue/(byte/signed byte/word/signed word/dword/signed dword) 2 rvalue::@2/(byte) rvalue::i#1 ) [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) + [27] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) to:rvalue::@return rvalue::@return: scope:[rvalue] from rvalue::@1 - [29] return [ ] ( main:2::rvalue:7 [ ] ) + [28] return [ ] ( main:2::rvalue:7 [ ] ) to:@return rvalue::@2: scope:[rvalue] from rvalue::@1 - [30] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) + [29] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) to:rvalue::@1 lvalue: scope:[lvalue] from main - [31] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) - [32] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) + [30] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) + [31] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) to:lvalue::@1 lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 - [33] (byte) lvalue::i#2 ← phi( lvalue/(byte/signed byte/word/signed word/dword/signed dword) 2 lvalue::@2/(byte) lvalue::i#1 ) [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) - [34] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) + [32] (byte) lvalue::i#2 ← phi( lvalue/(byte/signed byte/word/signed word/dword/signed dword) 2 lvalue::@2/(byte) lvalue::i#1 ) [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) + [33] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) to:lvalue::@return lvalue::@return: scope:[lvalue] from lvalue::@1 - [35] return [ ] ( main:2::lvalue:5 [ ] ) + [34] return [ ] ( main:2::lvalue:5 [ ] ) to:@return lvalue::@2: scope:[lvalue] from lvalue::@1 - [36] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) - [37] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) + [35] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) + [36] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) to:lvalue::@1 DOMINATORS @@ -746,39 +717,31 @@ VARIABLE REGISTER WEIGHTS (byte*) lvaluevar::screen#2 11.0 (void()) main() (void()) rvalue() -(byte[1024]) rvalue::SCREEN -(byte) rvalue::b (byte) rvalue::i (byte) rvalue::i#1 22.0 (byte) rvalue::i#2 16.5 (void()) rvaluevar() (byte) rvaluevar::i (byte) rvaluevar::i#1 22.0 -(byte) rvaluevar::i#2 11.0 -(byte*) rvaluevar::screen -(byte*) rvaluevar::screen#1 11.0 -(byte*) rvaluevar::screen#2 11.0 +(byte) rvaluevar::i#2 16.5 Initial phi equivalence classes [ lvaluevar::i#2 lvaluevar::i#1 ] [ lvaluevar::screen#2 lvaluevar::screen#1 ] [ rvaluevar::i#2 rvaluevar::i#1 ] -[ rvaluevar::screen#2 rvaluevar::screen#1 ] [ rvalue::i#2 rvalue::i#1 ] [ lvalue::i#2 lvalue::i#1 ] Complete equivalence classes [ lvaluevar::i#2 lvaluevar::i#1 ] [ lvaluevar::screen#2 lvaluevar::screen#1 ] [ rvaluevar::i#2 rvaluevar::i#1 ] -[ rvaluevar::screen#2 rvaluevar::screen#1 ] [ rvalue::i#2 rvalue::i#1 ] [ lvalue::i#2 lvalue::i#1 ] Allocated zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] Allocated zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] Allocated zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] -Allocated zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] -Allocated zp ZP_BYTE:8 [ rvalue::i#2 rvalue::i#1 ] -Allocated zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ] +Allocated zp ZP_BYTE:6 [ rvalue::i#2 rvalue::i#1 ] +Allocated zp ZP_BYTE:7 [ lvalue::i#2 lvalue::i#1 ] INITIAL ASM //SEG0 Basic Upstart @@ -812,7 +775,7 @@ main: { //SEG12 main::@1 b1: //SEG13 [7] call rvalue [ ] ( main:2 [ ] ) - //SEG14 [26] phi from main::@1 to rvalue [phi:main::@1->rvalue] + //SEG14 [25] phi from main::@1 to rvalue [phi:main::@1->rvalue] rvalue_from_b1: jsr rvalue //SEG15 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -887,112 +850,100 @@ lvaluevar: { } //SEG40 rvaluevar rvaluevar: { - .label screen = 6 .label i = 5 //SEG41 [21] phi from rvaluevar to rvaluevar::@1 [phi:rvaluevar->rvaluevar::@1] b1_from_rvaluevar: - //SEG42 [21] phi (byte*) rvaluevar::screen#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:rvaluevar->rvaluevar::@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta screen - lda #>$400 - sta screen+1 - //SEG43 [21] phi (byte) rvaluevar::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvaluevar->rvaluevar::@1#1] -- vbuz1=vbuc1 + //SEG42 [21] phi (byte) rvaluevar::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvaluevar->rvaluevar::@1#0] -- vbuz1=vbuc1 lda #2 sta i jmp b1 - //SEG44 rvaluevar::@1 + //SEG43 rvaluevar::@1 b1: - //SEG45 [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) -- vbuz1_lt_vbuc1_then_la1 + //SEG44 [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 ] ) -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$a bcc b2 jmp breturn - //SEG46 rvaluevar::@return + //SEG45 rvaluevar::@return breturn: - //SEG47 [23] return [ ] ( main:2::rvaluevar:9 [ ] ) + //SEG46 [23] return [ ] ( main:2::rvaluevar:9 [ ] ) rts - //SEG48 rvaluevar::@2 + //SEG47 rvaluevar::@2 b2: - //SEG49 [24] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#1 ] ) -- pbuz1=_inc_pbuz1 - inc screen - bne !+ - inc screen+1 - !: - //SEG50 [25] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 rvaluevar::screen#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG48 [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG51 [21] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1] + //SEG49 [21] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1] b1_from_b2: - //SEG52 [21] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy - //SEG53 [21] phi (byte) rvaluevar::i#2 = (byte) rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#1] -- register_copy + //SEG50 [21] phi (byte) rvaluevar::i#2 = (byte) rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy jmp b1 } -//SEG54 rvalue +//SEG51 rvalue rvalue: { - .label i = 8 - //SEG55 [27] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1] + .label i = 6 + //SEG52 [26] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1] b1_from_rvalue: - //SEG56 [27] phi (byte) rvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvalue->rvalue::@1#0] -- vbuz1=vbuc1 + //SEG53 [26] phi (byte) rvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvalue->rvalue::@1#0] -- vbuz1=vbuc1 lda #2 sta i jmp b1 - //SEG57 rvalue::@1 + //SEG54 rvalue::@1 b1: - //SEG58 [28] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuz1_lt_vbuc1_then_la1 + //SEG55 [27] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$a bcc b2 jmp breturn - //SEG59 rvalue::@return + //SEG56 rvalue::@return breturn: - //SEG60 [29] return [ ] ( main:2::rvalue:7 [ ] ) + //SEG57 [28] return [ ] ( main:2::rvalue:7 [ ] ) rts - //SEG61 rvalue::@2 + //SEG58 rvalue::@2 b2: - //SEG62 [30] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG59 [29] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG63 [27] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1] + //SEG60 [26] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1] b1_from_b2: - //SEG64 [27] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 [phi:rvalue::@2->rvalue::@1#0] -- register_copy + //SEG61 [26] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 [phi:rvalue::@2->rvalue::@1#0] -- register_copy jmp b1 } -//SEG65 lvalue +//SEG62 lvalue lvalue: { .label SCREEN = $400 - .label i = 9 - //SEG66 [31] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 + .label i = 7 + //SEG63 [30] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta SCREEN - //SEG67 [32] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 + //SEG64 [31] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 lda #2 sta SCREEN+1 - //SEG68 [33] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1] + //SEG65 [32] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1] b1_from_lvalue: - //SEG69 [33] phi (byte) lvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:lvalue->lvalue::@1#0] -- vbuz1=vbuc1 + //SEG66 [32] phi (byte) lvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:lvalue->lvalue::@1#0] -- vbuz1=vbuc1 lda #2 sta i jmp b1 - //SEG70 lvalue::@1 + //SEG67 lvalue::@1 b1: - //SEG71 [34] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- vbuz1_lt_vbuc1_then_la1 + //SEG68 [33] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- vbuz1_lt_vbuc1_then_la1 lda i cmp #$a bcc b2 jmp breturn - //SEG72 lvalue::@return + //SEG69 lvalue::@return breturn: - //SEG73 [35] return [ ] ( main:2::lvalue:5 [ ] ) + //SEG70 [34] return [ ] ( main:2::lvalue:5 [ ] ) rts - //SEG74 lvalue::@2 + //SEG71 lvalue::@2 b2: - //SEG75 [36] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 + //SEG72 [35] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuc2 ldy i lda #3 sta SCREEN,y - //SEG76 [37] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG73 [36] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG77 [33] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1] + //SEG74 [32] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1] b1_from_b2: - //SEG78 [33] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy + //SEG75 [32] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy jmp b1 } @@ -1000,37 +951,35 @@ REGISTER UPLIFT POTENTIAL REGISTERS Statement [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b#0 [ lvaluevar::i#2 lvaluevar::screen#2 ] ( main:2::lvaluevar:11 [ lvaluevar::i#2 lvaluevar::screen#2 ] ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] -Statement [31] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a -Statement [32] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a -Statement [36] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ] +Statement [30] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a +Statement [31] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a +Statement [35] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ lvalue::i#2 lvalue::i#1 ] Statement [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b#0 [ lvaluevar::i#2 lvaluevar::screen#2 ] ( main:2::lvaluevar:11 [ lvaluevar::i#2 lvaluevar::screen#2 ] ) always clobbers reg byte a reg byte y -Statement [31] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a -Statement [32] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a -Statement [36] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) always clobbers reg byte a +Statement [30] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a +Statement [31] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) always clobbers reg byte a +Statement [35] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) always clobbers reg byte a Potential registers zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] : zp ZP_WORD:6 , -Potential registers zp ZP_BYTE:8 [ rvalue::i#2 rvalue::i#1 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y , -Potential registers zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ rvalue::i#2 rvalue::i#1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ lvalue::i#2 lvalue::i#1 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , REGISTER UPLIFT SCOPES -Uplift Scope [rvaluevar] 33: zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] 22: zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] Uplift Scope [lvaluevar] 30.25: zp ZP_BYTE:2 [ lvaluevar::i#2 lvaluevar::i#1 ] 22: zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] -Uplift Scope [rvalue] 38.5: zp ZP_BYTE:8 [ rvalue::i#2 rvalue::i#1 ] -Uplift Scope [lvalue] 36.67: zp ZP_BYTE:9 [ lvalue::i#2 lvalue::i#1 ] +Uplift Scope [rvalue] 38.5: zp ZP_BYTE:6 [ rvalue::i#2 rvalue::i#1 ] +Uplift Scope [rvaluevar] 38.5: zp ZP_BYTE:5 [ rvaluevar::i#2 rvaluevar::i#1 ] +Uplift Scope [lvalue] 36.67: zp ZP_BYTE:7 [ lvalue::i#2 lvalue::i#1 ] Uplift Scope [main] Uplift Scope [] -Uplifting [rvaluevar] best 1710 combination reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] -Uplifting [lvaluevar] best 1620 combination reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] -Uplifting [rvalue] best 1530 combination reg byte x [ rvalue::i#2 rvalue::i#1 ] -Uplifting [lvalue] best 1410 combination reg byte x [ lvalue::i#2 lvalue::i#1 ] -Uplifting [main] best 1410 combination -Uplifting [] best 1410 combination -Coalescing zero page register [ zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] ] with [ zp ZP_WORD:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] ] -Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ] +Uplifting [lvaluevar] best 1485 combination reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ZP_WORD:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] +Uplifting [rvalue] best 1395 combination reg byte x [ rvalue::i#2 rvalue::i#1 ] +Uplifting [rvaluevar] best 1305 combination reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] +Uplifting [lvalue] best 1185 combination reg byte x [ lvalue::i#2 lvalue::i#1 ] +Uplifting [main] best 1185 combination +Uplifting [] best 1185 combination +Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ lvaluevar::screen#2 lvaluevar::screen#1 ] ASSEMBLER BEFORE OPTIMIZATION //SEG0 Basic Upstart @@ -1064,7 +1013,7 @@ main: { //SEG12 main::@1 b1: //SEG13 [7] call rvalue [ ] ( main:2 [ ] ) - //SEG14 [26] phi from main::@1 to rvalue [phi:main::@1->rvalue] + //SEG14 [25] phi from main::@1 to rvalue [phi:main::@1->rvalue] rvalue_from_b1: jsr rvalue //SEG15 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] @@ -1136,102 +1085,90 @@ lvaluevar: { } //SEG40 rvaluevar rvaluevar: { - .label screen = 2 //SEG41 [21] phi from rvaluevar to rvaluevar::@1 [phi:rvaluevar->rvaluevar::@1] b1_from_rvaluevar: - //SEG42 [21] phi (byte*) rvaluevar::screen#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:rvaluevar->rvaluevar::@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta screen - lda #>$400 - sta screen+1 - //SEG43 [21] phi (byte) rvaluevar::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvaluevar->rvaluevar::@1#1] -- vbuxx=vbuc1 + //SEG42 [21] phi (byte) rvaluevar::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvaluevar->rvaluevar::@1#0] -- vbuxx=vbuc1 ldx #2 jmp b1 - //SEG44 rvaluevar::@1 + //SEG43 rvaluevar::@1 b1: - //SEG45 [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) -- vbuxx_lt_vbuc1_then_la1 + //SEG44 [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 jmp breturn - //SEG46 rvaluevar::@return + //SEG45 rvaluevar::@return breturn: - //SEG47 [23] return [ ] ( main:2::rvaluevar:9 [ ] ) + //SEG46 [23] return [ ] ( main:2::rvaluevar:9 [ ] ) rts - //SEG48 rvaluevar::@2 + //SEG47 rvaluevar::@2 b2: - //SEG49 [24] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#1 ] ) -- pbuz1=_inc_pbuz1 - inc screen - bne !+ - inc screen+1 - !: - //SEG50 [25] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 rvaluevar::screen#1 ] ) -- vbuxx=_inc_vbuxx + //SEG48 [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG51 [21] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1] + //SEG49 [21] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1] b1_from_b2: - //SEG52 [21] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy - //SEG53 [21] phi (byte) rvaluevar::i#2 = (byte) rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#1] -- register_copy + //SEG50 [21] phi (byte) rvaluevar::i#2 = (byte) rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy jmp b1 } -//SEG54 rvalue +//SEG51 rvalue rvalue: { - //SEG55 [27] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1] + //SEG52 [26] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1] b1_from_rvalue: - //SEG56 [27] phi (byte) rvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvalue->rvalue::@1#0] -- vbuxx=vbuc1 + //SEG53 [26] phi (byte) rvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvalue->rvalue::@1#0] -- vbuxx=vbuc1 ldx #2 jmp b1 - //SEG57 rvalue::@1 + //SEG54 rvalue::@1 b1: - //SEG58 [28] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 + //SEG55 [27] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 jmp breturn - //SEG59 rvalue::@return + //SEG56 rvalue::@return breturn: - //SEG60 [29] return [ ] ( main:2::rvalue:7 [ ] ) + //SEG57 [28] return [ ] ( main:2::rvalue:7 [ ] ) rts - //SEG61 rvalue::@2 + //SEG58 rvalue::@2 b2: - //SEG62 [30] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG59 [29] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG63 [27] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1] + //SEG60 [26] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1] b1_from_b2: - //SEG64 [27] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 [phi:rvalue::@2->rvalue::@1#0] -- register_copy + //SEG61 [26] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 [phi:rvalue::@2->rvalue::@1#0] -- register_copy jmp b1 } -//SEG65 lvalue +//SEG62 lvalue lvalue: { .label SCREEN = $400 - //SEG66 [31] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 + //SEG63 [30] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta SCREEN - //SEG67 [32] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 + //SEG64 [31] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 lda #2 sta SCREEN+1 - //SEG68 [33] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1] + //SEG65 [32] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1] b1_from_lvalue: - //SEG69 [33] phi (byte) lvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:lvalue->lvalue::@1#0] -- vbuxx=vbuc1 + //SEG66 [32] phi (byte) lvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:lvalue->lvalue::@1#0] -- vbuxx=vbuc1 ldx #2 jmp b1 - //SEG70 lvalue::@1 + //SEG67 lvalue::@1 b1: - //SEG71 [34] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 + //SEG68 [33] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 jmp breturn - //SEG72 lvalue::@return + //SEG69 lvalue::@return breturn: - //SEG73 [35] return [ ] ( main:2::lvalue:5 [ ] ) + //SEG70 [34] return [ ] ( main:2::lvalue:5 [ ] ) rts - //SEG74 lvalue::@2 + //SEG71 lvalue::@2 b2: - //SEG75 [36] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuc2 + //SEG72 [35] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuc2 lda #3 sta SCREEN,x - //SEG76 [37] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG73 [36] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG77 [33] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1] + //SEG74 [32] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1] b1_from_b2: - //SEG78 [33] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy + //SEG75 [32] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy jmp b1 } @@ -1317,8 +1254,6 @@ FINAL SYMBOL TABLE (label) rvalue::@1 (label) rvalue::@2 (label) rvalue::@return -(byte[1024]) rvalue::SCREEN -(byte) rvalue::b (byte) rvalue::i (byte) rvalue::i#1 reg byte x 22.0 (byte) rvalue::i#2 reg byte x 16.5 @@ -1328,20 +1263,17 @@ FINAL SYMBOL TABLE (label) rvaluevar::@return (byte) rvaluevar::i (byte) rvaluevar::i#1 reg byte x 22.0 -(byte) rvaluevar::i#2 reg byte x 11.0 -(byte*) rvaluevar::screen -(byte*) rvaluevar::screen#1 screen zp ZP_WORD:2 11.0 -(byte*) rvaluevar::screen#2 screen zp ZP_WORD:2 11.0 +(byte) rvaluevar::i#2 reg byte x 16.5 reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] -zp ZP_WORD:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ] +zp ZP_WORD:2 [ lvaluevar::screen#2 lvaluevar::screen#1 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] reg byte x [ rvalue::i#2 rvalue::i#1 ] reg byte x [ lvalue::i#2 lvalue::i#1 ] FINAL ASSEMBLER -Score: 1152 +Score: 927 //SEG0 Basic Upstart .pc = $801 "Basic" @@ -1363,7 +1295,7 @@ main: { //SEG11 [6] phi from main to main::@1 [phi:main->main::@1] //SEG12 main::@1 //SEG13 [7] call rvalue [ ] ( main:2 [ ] ) - //SEG14 [26] phi from main::@1 to rvalue [phi:main::@1->rvalue] + //SEG14 [25] phi from main::@1 to rvalue [phi:main::@1->rvalue] jsr rvalue //SEG15 [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2] //SEG16 main::@2 @@ -1419,87 +1351,75 @@ lvaluevar: { } //SEG40 rvaluevar rvaluevar: { - .label screen = 2 //SEG41 [21] phi from rvaluevar to rvaluevar::@1 [phi:rvaluevar->rvaluevar::@1] - //SEG42 [21] phi (byte*) rvaluevar::screen#2 = ((byte*))(word/signed word/dword/signed dword) 1024 [phi:rvaluevar->rvaluevar::@1#0] -- pbuz1=pbuc1 - lda #<$400 - sta screen - lda #>$400 - sta screen+1 - //SEG43 [21] phi (byte) rvaluevar::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvaluevar->rvaluevar::@1#1] -- vbuxx=vbuc1 + //SEG42 [21] phi (byte) rvaluevar::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvaluevar->rvaluevar::@1#0] -- vbuxx=vbuc1 ldx #2 - //SEG44 rvaluevar::@1 + //SEG43 rvaluevar::@1 b1: - //SEG45 [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#2 ] ) -- vbuxx_lt_vbuc1_then_la1 + //SEG44 [22] if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 [ rvaluevar::i#2 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 - //SEG46 rvaluevar::@return - //SEG47 [23] return [ ] ( main:2::rvaluevar:9 [ ] ) + //SEG45 rvaluevar::@return + //SEG46 [23] return [ ] ( main:2::rvaluevar:9 [ ] ) rts - //SEG48 rvaluevar::@2 + //SEG47 rvaluevar::@2 b2: - //SEG49 [24] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#2 rvaluevar::screen#1 ] ) -- pbuz1=_inc_pbuz1 - inc screen - bne !+ - inc screen+1 - !: - //SEG50 [25] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 rvaluevar::screen#1 ] ) -- vbuxx=_inc_vbuxx + //SEG48 [24] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 ] ( main:2::rvaluevar:9 [ rvaluevar::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG51 [21] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1] - //SEG52 [21] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy - //SEG53 [21] phi (byte) rvaluevar::i#2 = (byte) rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#1] -- register_copy + //SEG49 [21] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1] + //SEG50 [21] phi (byte) rvaluevar::i#2 = (byte) rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy jmp b1 } -//SEG54 rvalue +//SEG51 rvalue rvalue: { - //SEG55 [27] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1] - //SEG56 [27] phi (byte) rvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvalue->rvalue::@1#0] -- vbuxx=vbuc1 + //SEG52 [26] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1] + //SEG53 [26] phi (byte) rvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:rvalue->rvalue::@1#0] -- vbuxx=vbuc1 ldx #2 - //SEG57 rvalue::@1 + //SEG54 rvalue::@1 b1: - //SEG58 [28] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 + //SEG55 [27] if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 [ rvalue::i#2 ] ( main:2::rvalue:7 [ rvalue::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 - //SEG59 rvalue::@return - //SEG60 [29] return [ ] ( main:2::rvalue:7 [ ] ) + //SEG56 rvalue::@return + //SEG57 [28] return [ ] ( main:2::rvalue:7 [ ] ) rts - //SEG61 rvalue::@2 + //SEG58 rvalue::@2 b2: - //SEG62 [30] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG59 [29] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] ( main:2::rvalue:7 [ rvalue::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG63 [27] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1] - //SEG64 [27] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 [phi:rvalue::@2->rvalue::@1#0] -- register_copy + //SEG60 [26] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1] + //SEG61 [26] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 [phi:rvalue::@2->rvalue::@1#0] -- register_copy jmp b1 } -//SEG65 lvalue +//SEG62 lvalue lvalue: { .label SCREEN = $400 - //SEG66 [31] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 + //SEG63 [30] *((const byte[1024]) lvalue::SCREEN#0) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 lda #1 sta SCREEN - //SEG67 [32] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 + //SEG64 [31] *((const byte[1024]) lvalue::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::lvalue:5 [ ] ) -- _deref_pbuc1=vbuc2 lda #2 sta SCREEN+1 - //SEG68 [33] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1] - //SEG69 [33] phi (byte) lvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:lvalue->lvalue::@1#0] -- vbuxx=vbuc1 + //SEG65 [32] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1] + //SEG66 [32] phi (byte) lvalue::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 2 [phi:lvalue->lvalue::@1#0] -- vbuxx=vbuc1 tax - //SEG70 lvalue::@1 + //SEG67 lvalue::@1 b1: - //SEG71 [34] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 + //SEG68 [33] if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- vbuxx_lt_vbuc1_then_la1 cpx #$a bcc b2 - //SEG72 lvalue::@return - //SEG73 [35] return [ ] ( main:2::lvalue:5 [ ] ) + //SEG69 lvalue::@return + //SEG70 [34] return [ ] ( main:2::lvalue:5 [ ] ) rts - //SEG74 lvalue::@2 + //SEG71 lvalue::@2 b2: - //SEG75 [36] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuc2 + //SEG72 [35] *((const byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ lvalue::i#2 ] ( main:2::lvalue:5 [ lvalue::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuc2 lda #3 sta SCREEN,x - //SEG76 [37] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG73 [36] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] ( main:2::lvalue:5 [ lvalue::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG77 [33] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1] - //SEG78 [33] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy + //SEG74 [32] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1] + //SEG75 [32] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy jmp b1 } diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.sym b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.sym index fbbd58e90..3c86fb0cb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.sym @@ -31,8 +31,6 @@ (label) rvalue::@1 (label) rvalue::@2 (label) rvalue::@return -(byte[1024]) rvalue::SCREEN -(byte) rvalue::b (byte) rvalue::i (byte) rvalue::i#1 reg byte x 22.0 (byte) rvalue::i#2 reg byte x 16.5 @@ -42,13 +40,10 @@ (label) rvaluevar::@return (byte) rvaluevar::i (byte) rvaluevar::i#1 reg byte x 22.0 -(byte) rvaluevar::i#2 reg byte x 11.0 -(byte*) rvaluevar::screen -(byte*) rvaluevar::screen#1 screen zp ZP_WORD:2 11.0 -(byte*) rvaluevar::screen#2 screen zp ZP_WORD:2 11.0 +(byte) rvaluevar::i#2 reg byte x 16.5 reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] -zp ZP_WORD:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ] +zp ZP_WORD:2 [ lvaluevar::screen#2 lvaluevar::screen#1 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] reg byte x [ rvalue::i#2 rvalue::i#1 ] reg byte x [ lvalue::i#2 lvalue::i#1 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.cfg b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.cfg index c5677e4c5..78657626a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.cfg @@ -272,7 +272,7 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [135] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [135] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [135] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12#0 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [135] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [135] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#9 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [136] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) [137] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) [138] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) @@ -292,10 +292,10 @@ divr16u::@5: scope:[divr16u] from divr16u::@2 [146] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [147] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ) - [147] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ) - [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) - [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) + [147] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [147] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) + [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 [150] return [ divr16u::return#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log index 16f8db593..7eb24ddd1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log @@ -2247,6 +2247,8 @@ Removing unused procedure mulu16_sel Removing unused procedure print_word Removing unused procedure mul16u Eliminating unused variable (byte) rem8u and assignment [0] (byte) rem8u ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (word) rem16u and assignment [1] (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable rem16u(null) and assignment [26] rem16u(null) ← (word) divr16u::rem Eliminating unused variable (signed byte) rem8s and assignment [34] (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating unused variable (signed word) rem16s and assignment [35] (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating unused variable (dword) PI2_u4f28 and assignment [53] (dword) PI2_u4f28 ← (dword/signed dword) 1686629713 @@ -2265,6 +2267,7 @@ Creating constant string variable for inline (const string) $0 "0123456789abcdef Creating constant string variable for inline (const string) main::str " @" Creating constant string variable for inline (const string) main::str1 " @" Removing empty block @1 +Removing empty block @2 Removing empty block divr16u::@7 Removing empty block @3 Removing empty block div16u::@1 @@ -2309,16 +2312,12 @@ Removing empty block @33 Removing empty block @34 Removing empty block main::@4 PROCEDURE MODIFY VARIABLE ANALYSIS -divr16u modifies rem16u -div16u modifies rem16u -sin8s_gen modifies rem16u print_str modifies print_char_cursor print_sbyte modifies print_char_cursor print_byte modifies print_char_cursor print_char modifies print_char_cursor print_cls modifies print_line_cursor print_cls modifies print_char_cursor -main modifies rem16u main modifies print_line_cursor main modifies print_char_cursor @@ -2333,14 +2332,11 @@ Completing Phi functions... CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN @begin: scope:[] from - to:@2 -@2: scope:[] from @begin - (word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@13 divr16u: scope:[divr16u] from div16u (word) divr16u::divisor#5 ← phi( div16u/(word) divr16u::divisor#0 ) (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#1 ) - (word) divr16u::rem#9 ← phi( div16u/(word) divr16u::rem#3 ) + (word) divr16u::rem#8 ← phi( div16u/(word) divr16u::rem#3 ) (word) divr16u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) divr16u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:divr16u::@1 @@ -2349,7 +2345,7 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (word) divr16u::divisor#3 ← phi( divr16u/(word) divr16u::divisor#5 divr16u::@3/(word) divr16u::divisor#6 ) (word) divr16u::quotient#6 ← phi( divr16u/(word) divr16u::quotient#0 divr16u::@3/(word) divr16u::quotient#8 ) (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#4 divr16u::@3/(word) divr16u::dividend#5 ) - (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#9 divr16u::@3/(word) divr16u::rem#10 ) + (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#8 divr16u::@3/(word) divr16u::rem#9 ) (word~) divr16u::$0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::rem#0 ← (word~) divr16u::$0 (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 @@ -2385,7 +2381,7 @@ divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#6 ← phi( divr16u::@2/(word) divr16u::divisor#1 divr16u::@5/(word) divr16u::divisor#2 ) (word) divr16u::quotient#8 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) (word) divr16u::dividend#5 ← phi( divr16u::@2/(word) divr16u::dividend#0 divr16u::@5/(word) divr16u::dividend#7 ) - (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) + (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) (byte) divr16u::i#2 ← phi( divr16u::@2/(byte) divr16u::i#3 divr16u::@5/(byte) divr16u::i#4 ) (byte) divr16u::i#1 ← (byte) divr16u::i#2 + rangenext(0,15) (bool~) divr16u::$11 ← (byte) divr16u::i#1 != rangelast(0,15) @@ -2403,19 +2399,14 @@ divr16u::@5: scope:[divr16u] from divr16u::@2 to:divr16u::@3 divr16u::@6: scope:[divr16u] from divr16u::@3 (word) divr16u::quotient#5 ← phi( divr16u::@3/(word) divr16u::quotient#8 ) - (word) divr16u::rem#8 ← phi( divr16u::@3/(word) divr16u::rem#10 ) - (word) rem16u#1 ← (word) divr16u::rem#8 (word) divr16u::return#0 ← (word) divr16u::quotient#5 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - (word) rem16u#10 ← phi( divr16u::@6/(word) rem16u#1 ) (word) divr16u::return#3 ← phi( divr16u::@6/(word) divr16u::return#0 ) (word) divr16u::return#1 ← (word) divr16u::return#3 - (word) rem16u#2 ← (word) rem16u#10 return to:@return div16u: scope:[div16u] from sin8s_gen - (word) rem16u#18 ← phi( sin8s_gen/(word) rem16u#19 ) (word) div16u::divisor#1 ← phi( sin8s_gen/(word) div16u::divisor#0 ) (word) div16u::dividend#1 ← phi( sin8s_gen/(word) div16u::dividend#0 ) (word) divr16u::dividend#1 ← (word) div16u::dividend#1 @@ -2425,17 +2416,13 @@ div16u: scope:[div16u] from sin8s_gen (word) divr16u::return#2 ← (word) divr16u::return#1 to:div16u::@2 div16u::@2: scope:[div16u] from div16u - (word) rem16u#11 ← phi( div16u/(word) rem16u#2 ) (word) divr16u::return#4 ← phi( div16u/(word) divr16u::return#2 ) (word~) div16u::$0 ← (word) divr16u::return#4 - (word) rem16u#3 ← (word) rem16u#11 (word) div16u::return#0 ← (word~) div16u::$0 to:div16u::@return div16u::@return: scope:[div16u] from div16u::@2 - (word) rem16u#12 ← phi( div16u::@2/(word) rem16u#3 ) (word) div16u::return#3 ← phi( div16u::@2/(word) div16u::return#0 ) (word) div16u::return#1 ← (word) div16u::return#3 - (word) rem16u#4 ← (word) rem16u#12 return to:@return mul8u: scope:[mul8u] from mulu8_sel @@ -2485,15 +2472,13 @@ mul8u::@return: scope:[mul8u] from mul8u::@3 (word) mul8u::return#1 ← (word) mul8u::return#3 return to:@return -@13: scope:[] from @2 - (word) rem16u#29 ← phi( @2/(word) rem16u#0 ) +@13: scope:[] from @begin (word) PI2_u4f12#0 ← (word/signed word/dword/signed dword) 25736 (word) PI_u4f12#0 ← (word/signed word/dword/signed dword) 12868 (word) PI_HALF_u4f12#0 ← (word/signed word/dword/signed dword) 6434 to:@20 sin8s_gen: scope:[sin8s_gen] from main (signed byte*) sin8s_gen::sintab#5 ← phi( main/(signed byte*) sin8s_gen::sintab#1 ) - (word) rem16u#19 ← phi( main/(word) rem16u#21 ) (word) sin8s_gen::wavelength#1 ← phi( main/(word) sin8s_gen::wavelength#0 ) (word) div16u::dividend#0 ← (word) PI2_u4f12#0 (word) div16u::divisor#0 ← (word) sin8s_gen::wavelength#1 @@ -2503,16 +2488,13 @@ sin8s_gen: scope:[sin8s_gen] from main sin8s_gen::@3: scope:[sin8s_gen] from sin8s_gen (word) sin8s_gen::wavelength#4 ← phi( sin8s_gen/(word) sin8s_gen::wavelength#1 ) (signed byte*) sin8s_gen::sintab#4 ← phi( sin8s_gen/(signed byte*) sin8s_gen::sintab#5 ) - (word) rem16u#13 ← phi( sin8s_gen/(word) rem16u#4 ) (word) div16u::return#4 ← phi( sin8s_gen/(word) div16u::return#2 ) (word~) sin8s_gen::$0 ← (word) div16u::return#4 - (word) rem16u#5 ← (word) rem16u#13 (word) sin8s_gen::step#0 ← (word~) sin8s_gen::$0 (word) sin8s_gen::x#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (word) sin8s_gen::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:sin8s_gen::@1 sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@3 sin8s_gen::@4 - (word) rem16u#24 ← phi( sin8s_gen::@3/(word) rem16u#5 sin8s_gen::@4/(word) rem16u#20 ) (word) sin8s_gen::wavelength#3 ← phi( sin8s_gen::@3/(word) sin8s_gen::wavelength#4 sin8s_gen::@4/(word) sin8s_gen::wavelength#2 ) (word) sin8s_gen::i#3 ← phi( sin8s_gen::@3/(word) sin8s_gen::i#0 sin8s_gen::@4/(word) sin8s_gen::i#1 ) (word) sin8s_gen::step#2 ← phi( sin8s_gen::@3/(word) sin8s_gen::step#0 sin8s_gen::@4/(word) sin8s_gen::step#1 ) @@ -2523,7 +2505,6 @@ sin8s_gen::@1: scope:[sin8s_gen] from sin8s_gen::@3 sin8s_gen::@4 (signed byte) sin8s::return#0 ← (signed byte) sin8s::return#2 to:sin8s_gen::@4 sin8s_gen::@4: scope:[sin8s_gen] from sin8s_gen::@1 - (word) rem16u#20 ← phi( sin8s_gen::@1/(word) rem16u#24 ) (word) sin8s_gen::wavelength#2 ← phi( sin8s_gen::@1/(word) sin8s_gen::wavelength#3 ) (word) sin8s_gen::i#2 ← phi( sin8s_gen::@1/(word) sin8s_gen::i#3 ) (word) sin8s_gen::step#1 ← phi( sin8s_gen::@1/(word) sin8s_gen::step#2 ) @@ -2540,8 +2521,6 @@ sin8s_gen::@4: scope:[sin8s_gen] from sin8s_gen::@1 if((bool~) sin8s_gen::$3) goto sin8s_gen::@1 to:sin8s_gen::@return sin8s_gen::@return: scope:[sin8s_gen] from sin8s_gen::@4 - (word) rem16u#14 ← phi( sin8s_gen::@4/(word) rem16u#20 ) - (word) rem16u#6 ← (word) rem16u#14 return to:@return sin8s: scope:[sin8s] from sin8s_gen::@1 @@ -2701,7 +2680,6 @@ mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel::@2 return to:@return @20: scope:[] from @13 - (word) rem16u#27 ← phi( @13/(word) rem16u#29 ) (byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) print_line_cursor#0 ← (byte*) print_screen#0 (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0 @@ -2768,7 +2746,6 @@ print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@3 (byte*) print_screen#7 ← phi( @20/(byte*) print_screen#0 ) (byte*) print_char_cursor#48 ← phi( @20/(byte*) print_char_cursor#0 ) (byte*) print_line_cursor#15 ← phi( @20/(byte*) print_line_cursor#0 ) - (word) rem16u#26 ← phi( @20/(word) rem16u#27 ) (byte[]) print_hextab#0 ← (const string) $0 to:@35 print_byte: scope:[print_byte] from print_sbyte::@1 @@ -2835,7 +2812,6 @@ main: scope:[main] from @35 (byte*) print_char_cursor#46 ← phi( @35/(byte*) print_char_cursor#43 ) (byte*) print_line_cursor#13 ← phi( @35/(byte*) print_line_cursor#12 ) (byte*) print_screen#5 ← phi( @35/(byte*) print_screen#6 ) - (word) rem16u#21 ← phi( @35/(word) rem16u#23 ) (word) main::wavelength#0 ← (byte/word/signed word/dword/signed dword) 192 (signed byte[192]) main::sintab2#0 ← { fill( 192, 0) } (byte[]) main::sintabref#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 21, (byte/signed byte/word/signed word/dword/signed dword) 25, (byte/signed byte/word/signed word/dword/signed dword) 29, (byte/signed byte/word/signed word/dword/signed dword) 33, (byte/signed byte/word/signed word/dword/signed dword) 37, (byte/signed byte/word/signed word/dword/signed dword) 41, (byte/signed byte/word/signed word/dword/signed dword) 45, (byte/signed byte/word/signed word/dword/signed dword) 49, (byte/signed byte/word/signed word/dword/signed dword) 53, (byte/signed byte/word/signed word/dword/signed dword) 56, (byte/signed byte/word/signed word/dword/signed dword) 60, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/signed byte/word/signed word/dword/signed dword) 67, (byte/signed byte/word/signed word/dword/signed dword) 71, (byte/signed byte/word/signed word/dword/signed dword) 74, (byte/signed byte/word/signed word/dword/signed dword) 78, (byte/signed byte/word/signed word/dword/signed dword) 81, (byte/signed byte/word/signed word/dword/signed dword) 84, (byte/signed byte/word/signed word/dword/signed dword) 87, (byte/signed byte/word/signed word/dword/signed dword) 90, (byte/signed byte/word/signed word/dword/signed dword) 93, (byte/signed byte/word/signed word/dword/signed dword) 96, (byte/signed byte/word/signed word/dword/signed dword) 99, (byte/signed byte/word/signed word/dword/signed dword) 101, (byte/signed byte/word/signed word/dword/signed dword) 104, (byte/signed byte/word/signed word/dword/signed dword) 106, (byte/signed byte/word/signed word/dword/signed dword) 108, (byte/signed byte/word/signed word/dword/signed dword) 110, (byte/signed byte/word/signed word/dword/signed dword) 112, (byte/signed byte/word/signed word/dword/signed dword) 114, (byte/signed byte/word/signed word/dword/signed dword) 116, (byte/signed byte/word/signed word/dword/signed dword) 118, (byte/signed byte/word/signed word/dword/signed dword) 119, (byte/signed byte/word/signed word/dword/signed dword) 121, (byte/signed byte/word/signed word/dword/signed dword) 122, (byte/signed byte/word/signed word/dword/signed dword) 123, (byte/signed byte/word/signed word/dword/signed dword) 124, (byte/signed byte/word/signed word/dword/signed dword) 125, (byte/signed byte/word/signed word/dword/signed dword) 126, (byte/signed byte/word/signed word/dword/signed dword) 126, (byte/signed byte/word/signed word/dword/signed dword) 127, (byte/signed byte/word/signed word/dword/signed dword) 127, (byte/signed byte/word/signed word/dword/signed dword) 127, (byte/word/signed word/dword/signed dword) 128, (byte/signed byte/word/signed word/dword/signed dword) 127, (byte/signed byte/word/signed word/dword/signed dword) 127, (byte/signed byte/word/signed word/dword/signed dword) 127, (byte/signed byte/word/signed word/dword/signed dword) 126, (byte/signed byte/word/signed word/dword/signed dword) 126, (byte/signed byte/word/signed word/dword/signed dword) 125, (byte/signed byte/word/signed word/dword/signed dword) 124, (byte/signed byte/word/signed word/dword/signed dword) 123, (byte/signed byte/word/signed word/dword/signed dword) 122, (byte/signed byte/word/signed word/dword/signed dword) 121, (byte/signed byte/word/signed word/dword/signed dword) 119, (byte/signed byte/word/signed word/dword/signed dword) 118, (byte/signed byte/word/signed word/dword/signed dword) 116, (byte/signed byte/word/signed word/dword/signed dword) 114, (byte/signed byte/word/signed word/dword/signed dword) 112, (byte/signed byte/word/signed word/dword/signed dword) 110, (byte/signed byte/word/signed word/dword/signed dword) 108, (byte/signed byte/word/signed word/dword/signed dword) 106, (byte/signed byte/word/signed word/dword/signed dword) 104, (byte/signed byte/word/signed word/dword/signed dword) 101, (byte/signed byte/word/signed word/dword/signed dword) 99, (byte/signed byte/word/signed word/dword/signed dword) 96, (byte/signed byte/word/signed word/dword/signed dword) 93, (byte/signed byte/word/signed word/dword/signed dword) 90, (byte/signed byte/word/signed word/dword/signed dword) 87, (byte/signed byte/word/signed word/dword/signed dword) 84, (byte/signed byte/word/signed word/dword/signed dword) 81, (byte/signed byte/word/signed word/dword/signed dword) 78, (byte/signed byte/word/signed word/dword/signed dword) 74, (byte/signed byte/word/signed word/dword/signed dword) 71, (byte/signed byte/word/signed word/dword/signed dword) 67, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/signed byte/word/signed word/dword/signed dword) 60, (byte/signed byte/word/signed word/dword/signed dword) 56, (byte/signed byte/word/signed word/dword/signed dword) 53, (byte/signed byte/word/signed word/dword/signed dword) 49, (byte/signed byte/word/signed word/dword/signed dword) 45, (byte/signed byte/word/signed word/dword/signed dword) 41, (byte/signed byte/word/signed word/dword/signed dword) 37, (byte/signed byte/word/signed word/dword/signed dword) 33, (byte/signed byte/word/signed word/dword/signed dword) 29, (byte/signed byte/word/signed word/dword/signed dword) 25, (byte/signed byte/word/signed word/dword/signed dword) 21, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/word/signed word/dword/signed dword) 252, (byte/word/signed word/dword/signed dword) 248, (byte/word/signed word/dword/signed dword) 244, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 235, (byte/word/signed word/dword/signed dword) 231, (byte/word/signed word/dword/signed dword) 227, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 219, (byte/word/signed word/dword/signed dword) 215, (byte/word/signed word/dword/signed dword) 211, (byte/word/signed word/dword/signed dword) 207, (byte/word/signed word/dword/signed dword) 203, (byte/word/signed word/dword/signed dword) 200, (byte/word/signed word/dword/signed dword) 196, (byte/word/signed word/dword/signed dword) 192, (byte/word/signed word/dword/signed dword) 189, (byte/word/signed word/dword/signed dword) 185, (byte/word/signed word/dword/signed dword) 182, (byte/word/signed word/dword/signed dword) 178, (byte/word/signed word/dword/signed dword) 175, (byte/word/signed word/dword/signed dword) 172, (byte/word/signed word/dword/signed dword) 169, (byte/word/signed word/dword/signed dword) 166, (byte/word/signed word/dword/signed dword) 163, (byte/word/signed word/dword/signed dword) 160, (byte/word/signed word/dword/signed dword) 157, (byte/word/signed word/dword/signed dword) 155, (byte/word/signed word/dword/signed dword) 152, (byte/word/signed word/dword/signed dword) 150, (byte/word/signed word/dword/signed dword) 148, (byte/word/signed word/dword/signed dword) 146, (byte/word/signed word/dword/signed dword) 144, (byte/word/signed word/dword/signed dword) 142, (byte/word/signed word/dword/signed dword) 140, (byte/word/signed word/dword/signed dword) 138, (byte/word/signed word/dword/signed dword) 137, (byte/word/signed word/dword/signed dword) 135, (byte/word/signed word/dword/signed dword) 134, (byte/word/signed word/dword/signed dword) 133, (byte/word/signed word/dword/signed dword) 132, (byte/word/signed word/dword/signed dword) 131, (byte/word/signed word/dword/signed dword) 130, (byte/word/signed word/dword/signed dword) 130, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 129, (byte/word/signed word/dword/signed dword) 130, (byte/word/signed word/dword/signed dword) 130, (byte/word/signed word/dword/signed dword) 131, (byte/word/signed word/dword/signed dword) 132, (byte/word/signed word/dword/signed dword) 133, (byte/word/signed word/dword/signed dword) 134, (byte/word/signed word/dword/signed dword) 135, (byte/word/signed word/dword/signed dword) 137, (byte/word/signed word/dword/signed dword) 138, (byte/word/signed word/dword/signed dword) 140, (byte/word/signed word/dword/signed dword) 142, (byte/word/signed word/dword/signed dword) 144, (byte/word/signed word/dword/signed dword) 146, (byte/word/signed word/dword/signed dword) 148, (byte/word/signed word/dword/signed dword) 150, (byte/word/signed word/dword/signed dword) 152, (byte/word/signed word/dword/signed dword) 155, (byte/word/signed word/dword/signed dword) 157, (byte/word/signed word/dword/signed dword) 160, (byte/word/signed word/dword/signed dword) 163, (byte/word/signed word/dword/signed dword) 166, (byte/word/signed word/dword/signed dword) 169, (byte/word/signed word/dword/signed dword) 172, (byte/word/signed word/dword/signed dword) 175, (byte/word/signed word/dword/signed dword) 178, (byte/word/signed word/dword/signed dword) 182, (byte/word/signed word/dword/signed dword) 185, (byte/word/signed word/dword/signed dword) 189, (byte/word/signed word/dword/signed dword) 192, (byte/word/signed word/dword/signed dword) 196, (byte/word/signed word/dword/signed dword) 200, (byte/word/signed word/dword/signed dword) 203, (byte/word/signed word/dword/signed dword) 207, (byte/word/signed word/dword/signed dword) 211, (byte/word/signed word/dword/signed dword) 215, (byte/word/signed word/dword/signed dword) 219, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 227, (byte/word/signed word/dword/signed dword) 231, (byte/word/signed word/dword/signed dword) 235, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 244, (byte/word/signed word/dword/signed dword) 248, (byte/word/signed word/dword/signed dword) 252 } @@ -2847,12 +2823,9 @@ main::@5: scope:[main] from main (byte*) print_char_cursor#40 ← phi( main/(byte*) print_char_cursor#46 ) (byte*) print_line_cursor#10 ← phi( main/(byte*) print_line_cursor#13 ) (byte*) print_screen#4 ← phi( main/(byte*) print_screen#5 ) - (word) rem16u#15 ← phi( main/(word) rem16u#6 ) - (word) rem16u#7 ← (word) rem16u#15 call print_cls to:main::@6 main::@6: scope:[main] from main::@5 - (word) rem16u#32 ← phi( main::@5/(word) rem16u#7 ) (byte*) print_char_cursor#30 ← phi( main::@5/(byte*) print_char_cursor#12 ) (byte*) print_line_cursor#7 ← phi( main::@5/(byte*) print_line_cursor#2 ) (byte*) print_line_cursor#3 ← (byte*) print_line_cursor#7 @@ -2861,7 +2834,6 @@ main::@6: scope:[main] from main::@5 to:main::@1 main::@1: scope:[main] from main::@6 main::@8 (byte*) print_line_cursor#17 ← phi( main::@6/(byte*) print_line_cursor#3 main::@8/(byte*) print_line_cursor#11 ) - (word) rem16u#30 ← phi( main::@6/(word) rem16u#32 main::@8/(word) rem16u#22 ) (byte*) print_char_cursor#47 ← phi( main::@6/(byte*) print_char_cursor#13 main::@8/(byte*) print_char_cursor#15 ) (byte) main::i#2 ← phi( main::@6/(byte) main::i#0 main::@8/(byte) main::i#1 ) (signed byte~) main::$2 ← ((signed byte)) *((byte[]) main::sintabref#0 + (byte) main::i#2) @@ -2873,7 +2845,6 @@ main::@1: scope:[main] from main::@6 main::@8 to:main::@3 main::@2: scope:[main] from main::@1 main::@9 (byte*) print_line_cursor#16 ← phi( main::@1/(byte*) print_line_cursor#17 main::@9/(byte*) print_line_cursor#18 ) - (word) rem16u#28 ← phi( main::@1/(word) rem16u#30 main::@9/(word) rem16u#31 ) (byte) main::i#5 ← phi( main::@1/(byte) main::i#2 main::@9/(byte) main::i#6 ) (byte*) print_char_cursor#41 ← phi( main::@1/(byte*) print_char_cursor#47 main::@9/(byte*) print_char_cursor#16 ) (signed byte) main::sb#1 ← phi( main::@1/(signed byte) main::sb#0 main::@9/(signed byte) main::sb#2 ) @@ -2882,7 +2853,6 @@ main::@2: scope:[main] from main::@1 main::@9 to:main::@7 main::@7: scope:[main] from main::@2 (byte*) print_line_cursor#14 ← phi( main::@2/(byte*) print_line_cursor#16 ) - (word) rem16u#25 ← phi( main::@2/(word) rem16u#28 ) (byte) main::i#4 ← phi( main::@2/(byte) main::i#5 ) (byte*) print_char_cursor#31 ← phi( main::@2/(byte*) print_char_cursor#5 ) (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#31 @@ -2891,7 +2861,6 @@ main::@7: scope:[main] from main::@2 to:main::@8 main::@8: scope:[main] from main::@7 (byte*) print_line_cursor#11 ← phi( main::@7/(byte*) print_line_cursor#14 ) - (word) rem16u#22 ← phi( main::@7/(word) rem16u#25 ) (byte) main::i#3 ← phi( main::@7/(byte) main::i#4 ) (byte*) print_char_cursor#32 ← phi( main::@7/(byte*) print_char_cursor#2 ) (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#32 @@ -2901,7 +2870,6 @@ main::@8: scope:[main] from main::@7 to:main::@return main::@3: scope:[main] from main::@1 (byte*) print_line_cursor#19 ← phi( main::@1/(byte*) print_line_cursor#17 ) - (word) rem16u#33 ← phi( main::@1/(word) rem16u#30 ) (byte) main::i#7 ← phi( main::@1/(byte) main::i#2 ) (signed byte) main::sb#3 ← phi( main::@1/(signed byte) main::sb#0 ) (byte*) print_char_cursor#42 ← phi( main::@1/(byte*) print_char_cursor#47 ) @@ -2910,7 +2878,6 @@ main::@3: scope:[main] from main::@1 to:main::@9 main::@9: scope:[main] from main::@3 (byte*) print_line_cursor#18 ← phi( main::@3/(byte*) print_line_cursor#19 ) - (word) rem16u#31 ← phi( main::@3/(word) rem16u#33 ) (byte) main::i#6 ← phi( main::@3/(byte) main::i#7 ) (signed byte) main::sb#2 ← phi( main::@3/(signed byte) main::sb#3 ) (byte*) print_char_cursor#33 ← phi( main::@3/(byte*) print_char_cursor#2 ) @@ -2919,8 +2886,6 @@ main::@9: scope:[main] from main::@3 main::@return: scope:[main] from main::@8 (byte*) print_char_cursor#34 ← phi( main::@8/(byte*) print_char_cursor#15 ) (byte*) print_line_cursor#8 ← phi( main::@8/(byte*) print_line_cursor#11 ) - (word) rem16u#16 ← phi( main::@8/(word) rem16u#22 ) - (word) rem16u#8 ← (word) rem16u#16 (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#8 (byte*) print_char_cursor#17 ← (byte*) print_char_cursor#34 return @@ -2929,14 +2894,11 @@ main::@return: scope:[main] from main::@8 (byte*) print_screen#6 ← phi( @30/(byte*) print_screen#7 ) (byte*) print_char_cursor#43 ← phi( @30/(byte*) print_char_cursor#48 ) (byte*) print_line_cursor#12 ← phi( @30/(byte*) print_line_cursor#15 ) - (word) rem16u#23 ← phi( @30/(word) rem16u#26 ) call main to:@36 @36: scope:[] from @35 (byte*) print_char_cursor#35 ← phi( @35/(byte*) print_char_cursor#17 ) (byte*) print_line_cursor#9 ← phi( @35/(byte*) print_line_cursor#4 ) - (word) rem16u#17 ← phi( @35/(word) rem16u#8 ) - (word) rem16u#9 ← (word) rem16u#17 (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#9 (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#35 to:@end @@ -2945,7 +2907,6 @@ main::@return: scope:[main] from main::@8 SYMBOL TABLE SSA (const string) $0 = (string) "0123456789abcdef" (label) @13 -(label) @2 (label) @20 (label) @30 (label) @35 @@ -3032,7 +2993,6 @@ SYMBOL TABLE SSA (word) divr16u::rem (word) divr16u::rem#0 (word) divr16u::rem#1 -(word) divr16u::rem#10 (word) divr16u::rem#2 (word) divr16u::rem#3 (word) divr16u::rem#4 @@ -3310,41 +3270,6 @@ SYMBOL TABLE SSA (byte*) print_str::str#3 (byte*) print_str::str#4 (byte*) print_str::str#5 -(word) rem16u -(word) rem16u#0 -(word) rem16u#1 -(word) rem16u#10 -(word) rem16u#11 -(word) rem16u#12 -(word) rem16u#13 -(word) rem16u#14 -(word) rem16u#15 -(word) rem16u#16 -(word) rem16u#17 -(word) rem16u#18 -(word) rem16u#19 -(word) rem16u#2 -(word) rem16u#20 -(word) rem16u#21 -(word) rem16u#22 -(word) rem16u#23 -(word) rem16u#24 -(word) rem16u#25 -(word) rem16u#26 -(word) rem16u#27 -(word) rem16u#28 -(word) rem16u#29 -(word) rem16u#3 -(word) rem16u#30 -(word) rem16u#31 -(word) rem16u#32 -(word) rem16u#33 -(word) rem16u#4 -(word) rem16u#5 -(word) rem16u#6 -(word) rem16u#7 -(word) rem16u#8 -(word) rem16u#9 (signed byte()) sin8s((word) sin8s::x) (bool~) sin8s::$0 (bool~) sin8s::$1 @@ -3493,27 +3418,22 @@ Inversing boolean not (bool~) sin8s::$20 ← (byte) sin8s::isUpper#2 == (byte/si Inversing boolean not (bool~) print_sbyte::$1 ← (signed byte) print_sbyte::b#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) main::$5 ← (signed byte) main::sb#0 < (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$4 ← (signed byte) main::sb#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0 Succesful SSA optimization Pass2UnaryNotSimplification -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#8 Not aliassing across scopes: div16u::dividend#1 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#1 div16u::divisor#0 -Not aliassing across scopes: rem16u#18 rem16u#19 Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#1 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#1 Not aliassing across scopes: divr16u::return#2 divr16u::return#1 -Not aliassing across scopes: rem16u#11 rem16u#2 Not aliassing across scopes: div16u::$0 divr16u::return#4 Not aliassing across scopes: mul8u::b#1 mul8u::b#0 Not aliassing across scopes: mul8u::a#5 mul8u::a#1 Not aliassing across scopes: sin8s_gen::wavelength#1 sin8s_gen::wavelength#0 -Not aliassing across scopes: rem16u#19 rem16u#21 Not aliassing across scopes: sin8s_gen::sintab#5 sin8s_gen::sintab#1 Not aliassing across scopes: div16u::dividend#0 PI2_u4f12#0 Not aliassing across scopes: div16u::divisor#0 sin8s_gen::wavelength#1 Not aliassing across scopes: div16u::return#2 div16u::return#1 -Not aliassing across scopes: rem16u#13 rem16u#4 Not aliassing across scopes: sin8s_gen::$0 div16u::return#4 Not aliassing across scopes: sin8s::x#0 sin8s_gen::x#2 Not aliassing across scopes: sin8s::return#0 sin8s::return#2 @@ -3560,20 +3480,17 @@ Not aliassing across scopes: print_char::ch#3 print_char::ch#1 Not aliassing across scopes: print_char_cursor#27 print_char_cursor#39 Not aliassing across scopes: print_screen#1 print_screen#4 Not aliassing across scopes: print_cls::sc#0 print_screen#1 -Not aliassing across scopes: rem16u#21 rem16u#23 Not aliassing across scopes: print_screen#5 print_screen#6 Not aliassing across scopes: print_line_cursor#13 print_line_cursor#12 Not aliassing across scopes: print_char_cursor#46 print_char_cursor#43 Not aliassing across scopes: sin8s_gen::sintab#1 main::sintab2#0 Not aliassing across scopes: sin8s_gen::wavelength#0 main::wavelength#0 -Not aliassing across scopes: rem16u#15 rem16u#6 Not aliassing across scopes: print_line_cursor#7 print_line_cursor#2 Not aliassing across scopes: print_char_cursor#30 print_char_cursor#12 Not aliassing across scopes: print_sbyte::b#1 main::sb#1 Not aliassing across scopes: print_char_cursor#31 print_char_cursor#5 Not aliassing across scopes: print_char_cursor#32 print_char_cursor#2 Not aliassing across scopes: print_char_cursor#33 print_char_cursor#2 -Not aliassing across scopes: rem16u#17 rem16u#8 Not aliassing across scopes: print_line_cursor#9 print_line_cursor#4 Not aliassing across scopes: print_char_cursor#35 print_char_cursor#17 Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#6 @@ -3588,11 +3505,8 @@ Alias (word) divr16u::rem#5 = (word) divr16u::rem#7 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#2 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 Alias (word) divr16u::rem#2 = (word~) divr16u::$10 -Alias (word) divr16u::rem#10 = (word) divr16u::rem#8 Alias (word) divr16u::return#0 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#3 (word) divr16u::return#1 -Alias (word) rem16u#1 = (word) rem16u#10 (word) rem16u#2 Alias (word) divr16u::return#2 = (word) divr16u::return#4 -Alias (word) rem16u#11 = (word) rem16u#3 (word) rem16u#12 (word) rem16u#4 Alias (word) div16u::return#0 = (word~) div16u::$0 (word) div16u::return#3 (word) div16u::return#1 Alias (byte) mul8u::a#2 = (byte) mul8u::a#3 (byte) mul8u::a#6 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 @@ -3600,11 +3514,9 @@ Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u Alias (byte) mul8u::a#0 = (byte~) mul8u::$5 Alias (word) mul8u::mb#1 = (word~) mul8u::$6 Alias (word) mul8u::res#1 = (word~) mul8u::$4 -Alias (word) rem16u#0 = (word) rem16u#29 (word) rem16u#27 (word) rem16u#26 (word) rem16u#23 Alias (word) div16u::return#2 = (word) div16u::return#4 Alias (signed byte*) sin8s_gen::sintab#4 = (signed byte*) sin8s_gen::sintab#5 Alias (word) sin8s_gen::wavelength#1 = (word) sin8s_gen::wavelength#4 -Alias (word) rem16u#13 = (word) rem16u#5 Alias (word) sin8s_gen::step#0 = (word~) sin8s_gen::$0 Alias (signed byte) sin8s::return#0 = (signed byte) sin8s::return#3 Alias (signed byte*) sin8s_gen::sintab#2 = (signed byte*) sin8s_gen::sintab#3 @@ -3612,7 +3524,6 @@ Alias (word) sin8s_gen::x#2 = (word) sin8s_gen::x#3 Alias (word) sin8s_gen::step#1 = (word) sin8s_gen::step#2 Alias (word) sin8s_gen::i#2 = (word) sin8s_gen::i#3 Alias (word) sin8s_gen::wavelength#2 = (word) sin8s_gen::wavelength#3 -Alias (word) rem16u#14 = (word) rem16u#20 (word) rem16u#24 (word) rem16u#6 Alias (word) sin8s_gen::x#1 = (word~) sin8s_gen::$2 Alias (word) sin8s::x#3 = (word) sin8s::x#5 Alias (word) sin8s::x#1 = (word~) sin8s::$2 @@ -3658,45 +3569,36 @@ Alias (byte*) print_line_cursor#1 = (byte*) print_screen#3 (byte*) print_screen# Alias (byte*) print_screen#4 = (byte*) print_screen#5 Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#13 Alias (byte*) print_char_cursor#40 = (byte*) print_char_cursor#46 -Alias (word) rem16u#15 = (word) rem16u#7 (word) rem16u#32 Alias (byte*) print_line_cursor#3 = (byte*) print_line_cursor#7 Alias (byte*) print_char_cursor#13 = (byte*) print_char_cursor#30 Alias (signed byte) main::sb#0 = (signed byte~) main::$3 (signed byte) main::sb#3 (signed byte) main::sb#2 Alias (byte) main::i#3 = (byte) main::i#4 (byte) main::i#5 -Alias (word) rem16u#16 = (word) rem16u#25 (word) rem16u#28 (word) rem16u#22 (word) rem16u#8 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#14 (byte*) print_line_cursor#16 (byte*) print_line_cursor#8 (byte*) print_line_cursor#4 Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#31 Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#32 (byte*) print_char_cursor#34 (byte*) print_char_cursor#17 Alias (byte*) print_char_cursor#42 = (byte*) print_char_cursor#47 Alias (byte) main::i#2 = (byte) main::i#7 (byte) main::i#6 -Alias (word) rem16u#30 = (word) rem16u#33 (word) rem16u#31 Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#19 (byte*) print_line_cursor#18 Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#33 -Alias (word) rem16u#17 = (word) rem16u#9 Alias (byte*) print_line_cursor#5 = (byte*) print_line_cursor#9 Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#35 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: div16u::dividend#1 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#1 div16u::divisor#0 -Not aliassing across scopes: rem16u#18 rem16u#19 Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#1 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#1 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 -Not aliassing across scopes: rem16u#11 rem16u#1 Not aliassing across scopes: div16u::return#0 divr16u::return#2 Not aliassing across scopes: mul8u::b#1 mul8u::b#0 Not aliassing across scopes: mul8u::a#5 mul8u::a#1 Not aliassing across scopes: sin8s_gen::wavelength#1 sin8s_gen::wavelength#0 -Not aliassing across scopes: rem16u#19 rem16u#21 Not aliassing across scopes: sin8s_gen::sintab#4 sin8s_gen::sintab#1 Not aliassing across scopes: div16u::dividend#0 PI2_u4f12#0 Not aliassing across scopes: div16u::divisor#0 sin8s_gen::wavelength#1 Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: rem16u#13 rem16u#11 Not aliassing across scopes: sin8s_gen::step#0 div16u::return#2 Not aliassing across scopes: sin8s::x#0 sin8s_gen::x#2 Not aliassing across scopes: sin8s::return#0 sin8s::return#1 @@ -3743,20 +3645,17 @@ Not aliassing across scopes: print_char::ch#3 print_char::ch#1 Not aliassing across scopes: print_char_cursor#27 print_char_cursor#39 Not aliassing across scopes: print_screen#1 print_screen#4 Not aliassing across scopes: print_cls::sc#0 print_screen#1 -Not aliassing across scopes: rem16u#21 rem16u#0 Not aliassing across scopes: print_screen#4 print_line_cursor#0 Not aliassing across scopes: print_line_cursor#10 print_line_cursor#0 Not aliassing across scopes: print_char_cursor#40 print_line_cursor#0 Not aliassing across scopes: sin8s_gen::sintab#1 main::sintab2#0 Not aliassing across scopes: sin8s_gen::wavelength#0 main::wavelength#0 -Not aliassing across scopes: rem16u#15 rem16u#14 Not aliassing across scopes: print_line_cursor#3 print_line_cursor#1 Not aliassing across scopes: print_char_cursor#13 print_line_cursor#1 Not aliassing across scopes: print_sbyte::b#1 main::sb#1 Not aliassing across scopes: print_char_cursor#14 print_char_cursor#21 Not aliassing across scopes: print_char_cursor#15 print_char_cursor#19 Not aliassing across scopes: print_char_cursor#16 print_char_cursor#19 -Not aliassing across scopes: rem16u#17 rem16u#16 Not aliassing across scopes: print_line_cursor#5 print_line_cursor#11 Not aliassing across scopes: print_char_cursor#18 print_char_cursor#15 Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#3 @@ -3769,30 +3668,24 @@ Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 Alias (byte) sin8s::isUpper#10 = (byte) sin8s::isUpper#3 (byte) sin8s::isUpper#2 Alias (signed byte) main::sb#0 = (signed byte) main::sb#1 Alias (byte) main::i#2 = (byte) main::i#3 -Alias (word) rem16u#16 = (word) rem16u#30 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#17 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: div16u::dividend#1 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#1 div16u::divisor#0 -Not aliassing across scopes: rem16u#18 rem16u#19 Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#1 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#1 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 -Not aliassing across scopes: rem16u#11 rem16u#1 Not aliassing across scopes: div16u::return#0 divr16u::return#2 Not aliassing across scopes: mul8u::b#1 mul8u::b#0 Not aliassing across scopes: mul8u::a#5 mul8u::a#1 Not aliassing across scopes: sin8s_gen::wavelength#1 sin8s_gen::wavelength#0 -Not aliassing across scopes: rem16u#19 rem16u#21 Not aliassing across scopes: sin8s_gen::sintab#4 sin8s_gen::sintab#1 Not aliassing across scopes: div16u::dividend#0 PI2_u4f12#0 Not aliassing across scopes: div16u::divisor#0 sin8s_gen::wavelength#1 Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: rem16u#13 rem16u#11 Not aliassing across scopes: sin8s_gen::step#0 div16u::return#2 Not aliassing across scopes: sin8s::x#0 sin8s_gen::x#2 Not aliassing across scopes: sin8s::return#0 sin8s::return#1 @@ -3839,47 +3732,37 @@ Not aliassing across scopes: print_char::ch#3 print_char::ch#1 Not aliassing across scopes: print_char_cursor#27 print_char_cursor#39 Not aliassing across scopes: print_screen#1 print_screen#4 Not aliassing across scopes: print_cls::sc#0 print_screen#1 -Not aliassing across scopes: rem16u#21 rem16u#0 Not aliassing across scopes: print_screen#4 print_line_cursor#0 Not aliassing across scopes: print_line_cursor#10 print_line_cursor#0 Not aliassing across scopes: print_char_cursor#40 print_line_cursor#0 Not aliassing across scopes: sin8s_gen::sintab#1 main::sintab2#0 Not aliassing across scopes: sin8s_gen::wavelength#0 main::wavelength#0 -Not aliassing across scopes: rem16u#15 rem16u#14 Not aliassing across scopes: print_line_cursor#3 print_line_cursor#1 Not aliassing across scopes: print_char_cursor#13 print_line_cursor#1 Not aliassing across scopes: print_sbyte::b#1 main::sb#0 Not aliassing across scopes: print_char_cursor#14 print_char_cursor#21 Not aliassing across scopes: print_char_cursor#15 print_char_cursor#19 Not aliassing across scopes: print_char_cursor#16 print_char_cursor#19 -Not aliassing across scopes: rem16u#17 rem16u#16 Not aliassing across scopes: print_line_cursor#5 print_line_cursor#11 Not aliassing across scopes: print_char_cursor#18 print_char_cursor#15 Self Phi Eliminated (word) divr16u::divisor#1 Self Phi Eliminated (word) sin8s_gen::step#1 Self Phi Eliminated (word) sin8s_gen::wavelength#2 -Self Phi Eliminated (word) rem16u#14 Self Phi Eliminated (byte*) print_line_cursor#1 -Self Phi Eliminated (word) rem16u#16 Self Phi Eliminated (byte*) print_line_cursor#11 Succesful SSA optimization Pass2SelfPhiElimination -Redundant Phi (word) divr16u::rem#9 (word) divr16u::rem#3 +Redundant Phi (word) divr16u::rem#8 (word) divr16u::rem#3 Redundant Phi (word) divr16u::dividend#4 (word) divr16u::dividend#1 Redundant Phi (word) divr16u::divisor#5 (word) divr16u::divisor#0 Redundant Phi (word) divr16u::divisor#1 (word) divr16u::divisor#5 Redundant Phi (word) div16u::dividend#1 (word) div16u::dividend#0 Redundant Phi (word) div16u::divisor#1 (word) div16u::divisor#0 -Redundant Phi (word) rem16u#18 (word) rem16u#19 -Redundant Phi (word) rem16u#11 (word) rem16u#1 Redundant Phi (byte) mul8u::b#1 (byte) mul8u::b#0 Redundant Phi (byte) mul8u::a#5 (byte) mul8u::a#1 Redundant Phi (word) sin8s_gen::wavelength#1 (word) sin8s_gen::wavelength#0 -Redundant Phi (word) rem16u#19 (word) rem16u#21 Redundant Phi (signed byte*) sin8s_gen::sintab#4 (signed byte*) sin8s_gen::sintab#1 -Redundant Phi (word) rem16u#13 (word) rem16u#11 Redundant Phi (word) sin8s_gen::step#1 (word) sin8s_gen::step#0 Redundant Phi (word) sin8s_gen::wavelength#2 (word) sin8s_gen::wavelength#1 -Redundant Phi (word) rem16u#14 (word) rem16u#13 Redundant Phi (word) sin8s::x#3 (word) sin8s::x#0 Redundant Phi (signed byte) print_sbyte::b#2 (signed byte) print_sbyte::b#1 Redundant Phi (byte*) print_char_cursor#38 (byte*) print_char_cursor#41 @@ -3891,19 +3774,15 @@ Redundant Phi (byte*) print_char_cursor#24 (byte*) print_char_cursor#10 Redundant Phi (byte*) print_char_cursor#25 (byte*) print_char_cursor#10 Redundant Phi (byte*) print_screen#1 (byte*) print_screen#4 Redundant Phi (byte*) print_line_cursor#1 (byte*) print_screen#1 -Redundant Phi (word) rem16u#21 (word) rem16u#0 Redundant Phi (byte*) print_screen#4 (byte*) print_line_cursor#0 Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#0 Redundant Phi (byte*) print_char_cursor#40 (byte*) print_line_cursor#0 -Redundant Phi (word) rem16u#15 (word) rem16u#14 Redundant Phi (byte*) print_line_cursor#3 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#13 (byte*) print_line_cursor#1 -Redundant Phi (word) rem16u#16 (word) rem16u#15 Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#3 Redundant Phi (byte*) print_char_cursor#14 (byte*) print_char_cursor#21 Redundant Phi (byte*) print_char_cursor#15 (byte*) print_char_cursor#19 Redundant Phi (byte*) print_char_cursor#16 (byte*) print_char_cursor#19 -Redundant Phi (word) rem16u#17 (word) rem16u#16 Redundant Phi (byte*) print_line_cursor#5 (byte*) print_line_cursor#11 Redundant Phi (byte*) print_char_cursor#18 (byte*) print_char_cursor#15 Succesful SSA optimization Pass2RedundantPhiElimination @@ -3923,7 +3802,6 @@ Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) prin Simple Condition (bool~) main::$5 if((signed byte) main::sb#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$9 if((byte) main::i#1!=rangelast(0,191)) goto main::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification -Constant (const word) rem16u#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 Constant (const word) divr16u::rem#3 = 0 @@ -3963,9 +3841,6 @@ Constant (const word) div16u::divisor#0 = sin8s_gen::wavelength#0 Succesful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::divisor#0 = div16u::divisor#0 Succesful SSA optimization Pass2ConstantIdentification -Eliminating unused variable (word) rem16u#1 and assignment [15] (word) rem16u#1 ← (word) divr16u::rem#10 -Eliminating unused constant (const word) rem16u#0 -Succesful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (signed byte) sin8s::sinx#0 ← ((signed byte)) (byte) sin8s::usinx#4 Eliminating Noop Cast (signed byte~) sin8s::$21 ← ((signed byte)) (byte) sin8s::usinx#4 Eliminating Noop Cast (byte) print_byte::b#0 ← ((byte)) (signed byte) print_sbyte::b#3 @@ -3975,7 +3850,6 @@ Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,191)) goto main::@1 to (byte/word/signed word/dword/signed dword) 192 -Culled Empty Block (label) @2 Culled Empty Block (label) divr16u::@6 Culled Empty Block (label) mul8u::@3 Culled Empty Block (label) @13 @@ -4284,16 +4158,16 @@ Coalesced [168] mul8u::a#8 ← mul8u::a#0 Coalesced [169] mul8u::res#7 ← mul8u::res#6 Coalesced [170] mul8u::mb#7 ← mul8u::mb#1 Coalesced (already) [171] mul8u::res#8 ← mul8u::res#2 -Coalesced [184] divr16u::rem#13 ← divr16u::rem#1 -Coalesced [191] divr16u::rem#15 ← divr16u::rem#2 +Coalesced [184] divr16u::rem#12 ← divr16u::rem#1 +Coalesced [191] divr16u::rem#14 ← divr16u::rem#2 Coalesced [192] divr16u::return#6 ← divr16u::quotient#2 -Coalesced [197] divr16u::rem#11 ← divr16u::rem#10 +Coalesced [197] divr16u::rem#10 ← divr16u::rem#9 Coalesced [198] divr16u::dividend#8 ← divr16u::dividend#0 Coalesced [199] divr16u::quotient#9 ← divr16u::return#0 Coalesced [200] divr16u::i#7 ← divr16u::i#1 -Coalesced [201] divr16u::rem#14 ← divr16u::rem#5 +Coalesced [201] divr16u::rem#13 ← divr16u::rem#5 Coalesced [202] divr16u::return#5 ← divr16u::quotient#1 -Coalesced [203] divr16u::rem#12 ← divr16u::rem#0 +Coalesced [203] divr16u::rem#11 ← divr16u::rem#0 Coalesced down to 23 phi equivalence classes Culled Empty Block (label) main::@10 Culled Empty Block (label) main::@11 @@ -4631,7 +4505,7 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [135] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [135] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [135] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12#0 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [135] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [135] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#9 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [136] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) [137] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) [138] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) @@ -4651,10 +4525,10 @@ divr16u::@5: scope:[divr16u] from divr16u::@2 [146] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::wavelength#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [147] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ) - [147] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ) - [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) - [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) + [147] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [147] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) + [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 [150] return [ divr16u::return#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 ] ) @@ -4805,10 +4679,10 @@ VARIABLE REGISTER WEIGHTS (word) divr16u::rem (word) divr16u::rem#0 8.25 (word) divr16u::rem#1 22.0 -(word) divr16u::rem#10 11.0 (word) divr16u::rem#2 22.0 (word) divr16u::rem#4 22.0 (word) divr16u::rem#5 11.0 +(word) divr16u::rem#9 11.0 (word) divr16u::return (word) divr16u::return#0 7.000000000000001 (word) divr16u::return#2 4.0 @@ -4899,7 +4773,6 @@ VARIABLE REGISTER WEIGHTS (byte*) print_str::str#0 202.0 (byte*) print_str::str#3 101.5 (byte*) print_str::str#5 2.0 -(word) rem16u (signed byte()) sin8s((word) sin8s::x) (word~) sin8s::$6 4.0 (byte) sin8s::DIV_6 @@ -4971,7 +4844,7 @@ Initial phi equivalence classes [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] -[ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#2 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] @@ -5026,7 +4899,7 @@ Complete equivalence classes [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] -[ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#2 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] @@ -5080,7 +4953,7 @@ Allocated zp ZP_BYTE:24 [ mulu8_sel::select#5 ] Allocated zp ZP_BYTE:25 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] Allocated zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] Allocated zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] -Allocated zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] Allocated zp ZP_WORD:32 [ divr16u::dividend#2 divr16u::dividend#0 ] Allocated zp ZP_WORD:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] Allocated zp ZP_BYTE:36 [ divr16u::i#2 divr16u::i#1 ] @@ -6010,7 +5883,7 @@ divr16u: { //SEG272 [135] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy //SEG273 [135] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy //SEG274 [135] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG275 [135] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG275 [135] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 //SEG276 divr16u::@1 b1: @@ -6076,13 +5949,13 @@ divr16u: { b3_from_b2: b3_from_b5: //SEG293 [147] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG294 [147] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG294 [147] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 //SEG295 divr16u::@3 b3: - //SEG296 [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG296 [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG297 [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG297 [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda i cmp #$10 bne b1_from_b3 @@ -6205,7 +6078,7 @@ Potential registers zp ZP_BYTE:24 [ mulu8_sel::select#5 ] : zp ZP_BYTE:24 , reg Potential registers zp ZP_BYTE:25 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , Potential registers zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp ZP_WORD:26 , Potential registers zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp ZP_WORD:28 , -Potential registers zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:30 , +Potential registers zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:30 , Potential registers zp ZP_WORD:32 [ divr16u::dividend#2 divr16u::dividend#0 ] : zp ZP_WORD:32 , Potential registers zp ZP_WORD:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:34 , Potential registers zp ZP_BYTE:36 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:36 , reg byte x , reg byte y , @@ -6244,7 +6117,7 @@ Potential registers zp ZP_BYTE:75 [ divr16u::$2 ] : zp ZP_BYTE:75 , reg byte a , REGISTER UPLIFT SCOPES Uplift Scope [mul8u] 353.83: zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 249.57: zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 202: zp ZP_BYTE:69 [ mul8u::$1 ] 170: zp ZP_BYTE:25 [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 4: zp ZP_BYTE:61 [ mul8u::b#0 ] 4: zp ZP_WORD:62 [ mul8u::return#2 ] Uplift Scope [print_str] 305.5: zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplift Scope [divr16u] 96.25: zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp ZP_WORD:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:74 [ divr16u::$1 ] 22: zp ZP_BYTE:75 [ divr16u::$2 ] 18.19: zp ZP_BYTE:36 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp ZP_WORD:32 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp ZP_WORD:70 [ divr16u::return#2 ] +Uplift Scope [divr16u] 96.25: zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp ZP_WORD:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:74 [ divr16u::$1 ] 22: zp ZP_BYTE:75 [ divr16u::$2 ] 18.19: zp ZP_BYTE:36 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp ZP_WORD:32 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp ZP_WORD:70 [ divr16u::return#2 ] Uplift Scope [] 188.93: zp ZP_WORD:7 [ print_char_cursor#27 print_char_cursor#37 print_char_cursor#44 print_char_cursor#41 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] Uplift Scope [sin8s] 27.5: zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] 22: zp ZP_BYTE:44 [ sin8s::return#0 ] 13: zp ZP_BYTE:21 [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] 10: zp ZP_BYTE:20 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp ZP_WORD:46 [ sin8s::$6 ] 4: zp ZP_BYTE:50 [ sin8s::x2#0 ] 4: zp ZP_BYTE:54 [ sin8s::x3_6#0 ] 4: zp ZP_BYTE:57 [ sin8s::x4#0 ] 4: zp ZP_BYTE:59 [ sin8s::x5#0 ] 4: zp ZP_BYTE:60 [ sin8s::x5_128#0 ] 1: zp ZP_BYTE:52 [ sin8s::x3#0 ] 0.64: zp ZP_BYTE:48 [ sin8s::x1#0 ] 0.33: zp ZP_BYTE:55 [ sin8s::usinx#0 ] 0.06: zp ZP_BYTE:17 [ sin8s::isUpper#10 ] Uplift Scope [mulu8_sel] 24: zp ZP_BYTE:22 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] 21: zp ZP_BYTE:23 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp ZP_BYTE:49 [ mulu8_sel::return#0 ] 4: zp ZP_BYTE:51 [ mulu8_sel::return#1 ] 4: zp ZP_BYTE:53 [ mulu8_sel::return#2 ] 4: zp ZP_BYTE:56 [ mulu8_sel::return#10 ] 4: zp ZP_BYTE:58 [ mulu8_sel::return#11 ] 4: zp ZP_WORD:64 [ mulu8_sel::$0 ] 4: zp ZP_WORD:66 [ mulu8_sel::$1 ] 1.71: zp ZP_BYTE:68 [ mulu8_sel::return#12 ] 0.33: zp ZP_BYTE:24 [ mulu8_sel::select#5 ] @@ -6258,7 +6131,7 @@ Uplift Scope [div16u] 4: zp ZP_WORD:40 [ div16u::return#2 ] 1.33: zp ZP_WORD:72 Uplifting [mul8u] best 18977 combination zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ] reg byte a [ mul8u::b#0 ] zp ZP_WORD:62 [ mul8u::return#2 ] Uplifting [print_str] best 18977 combination zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ] -Uplifting [divr16u] best 18787 combination zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:32 [ divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:70 [ divr16u::return#2 ] +Uplifting [divr16u] best 18787 combination zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:32 [ divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:70 [ divr16u::return#2 ] Uplifting [] best 18787 combination zp ZP_WORD:7 [ print_char_cursor#27 print_char_cursor#37 print_char_cursor#44 print_char_cursor#41 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] Uplifting [sin8s] best 18682 combination zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 ] reg byte a [ sin8s::return#0 ] reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:46 [ sin8s::$6 ] zp ZP_BYTE:50 [ sin8s::x2#0 ] zp ZP_BYTE:54 [ sin8s::x3_6#0 ] zp ZP_BYTE:57 [ sin8s::x4#0 ] zp ZP_BYTE:59 [ sin8s::x5#0 ] zp ZP_BYTE:60 [ sin8s::x5_128#0 ] zp ZP_BYTE:52 [ sin8s::x3#0 ] zp ZP_BYTE:48 [ sin8s::x1#0 ] zp ZP_BYTE:55 [ sin8s::usinx#0 ] zp ZP_BYTE:17 [ sin8s::isUpper#10 ] Limited combination testing to 100 combinations of 5308416 possible. @@ -6314,12 +6187,12 @@ Coalescing zero page register with common assignment [ zp ZP_WORD:26 [ mul8u::re Coalescing zero page register with common assignment [ zp ZP_WORD:34 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:40 [ div16u::return#2 sin8s_gen::step#0 div16u::return#0 ] ] - score: 1 Coalescing zero page register [ zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ] with [ zp ZP_WORD:9 [ print_cls::sc#2 print_cls::sc#1 ] ] Coalescing zero page register [ zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 print_cls::sc#2 print_cls::sc#1 ] ] with [ zp ZP_WORD:11 [ sin8s_gen::x#2 sin8s_gen::x#1 ] ] -Coalescing zero page register [ zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 print_cls::sc#2 print_cls::sc#1 sin8s_gen::x#2 sin8s_gen::x#1 ] ] with [ zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] +Coalescing zero page register [ zp ZP_WORD:3 [ print_str::str#3 print_str::str#5 print_str::str#0 print_cls::sc#2 print_cls::sc#1 sin8s_gen::x#2 sin8s_gen::x#1 ] ] with [ zp ZP_WORD:30 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] Coalescing zero page register [ zp ZP_BYTE:5 [ print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 main::sb#0 ] ] with [ zp ZP_BYTE:17 [ sin8s::isUpper#10 ] ] Coalescing zero page register [ zp ZP_WORD:7 [ print_char_cursor#27 print_char_cursor#37 print_char_cursor#44 print_char_cursor#41 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ] ] with [ zp ZP_WORD:13 [ sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] Coalescing zero page register [ zp ZP_WORD:7 [ print_char_cursor#27 print_char_cursor#37 print_char_cursor#44 print_char_cursor#41 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 sin8s_gen::sintab#2 sin8s_gen::sintab#0 ] ] with [ zp ZP_WORD:32 [ divr16u::dividend#2 divr16u::dividend#0 ] ] Coalescing zero page register [ zp ZP_WORD:18 [ sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$6 ] ] with [ zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 ] ] -Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ print_str::str#3 print_str::str#5 print_str::str#0 print_cls::sc#2 print_cls::sc#1 sin8s_gen::x#2 sin8s_gen::x#1 divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ print_str::str#3 print_str::str#5 print_str::str#0 print_cls::sc#2 print_cls::sc#1 sin8s_gen::x#2 sin8s_gen::x#1 divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 main::sb#0 sin8s::isUpper#10 ] Allocated (was zp ZP_WORD:7) zp ZP_WORD:5 [ print_char_cursor#27 print_char_cursor#37 print_char_cursor#44 print_char_cursor#41 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#2 divr16u::dividend#0 ] Allocated (was zp ZP_WORD:15) zp ZP_WORD:7 [ sin8s_gen::i#2 sin8s_gen::i#1 ] @@ -7123,7 +6996,7 @@ divr16u: { //SEG272 [135] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy //SEG273 [135] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy //SEG274 [135] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG275 [135] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG275 [135] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 //SEG276 divr16u::@1 b1: @@ -7186,13 +7059,13 @@ divr16u: { b3_from_b2: b3_from_b5: //SEG293 [147] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG294 [147] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG294 [147] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 //SEG295 divr16u::@3 b3: - //SEG296 [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG296 [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG297 [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG297 [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1_from_b3 jmp breturn @@ -7428,10 +7301,10 @@ FINAL SYMBOL TABLE (word) divr16u::rem (word) divr16u::rem#0 rem zp ZP_WORD:2 8.25 (word) divr16u::rem#1 rem zp ZP_WORD:2 22.0 -(word) divr16u::rem#10 rem zp ZP_WORD:2 11.0 (word) divr16u::rem#2 rem zp ZP_WORD:2 22.0 (word) divr16u::rem#4 rem zp ZP_WORD:2 22.0 (word) divr16u::rem#5 rem zp ZP_WORD:2 11.0 +(word) divr16u::rem#9 rem zp ZP_WORD:2 11.0 (word) divr16u::return (word) divr16u::return#0 return zp ZP_WORD:14 7.000000000000001 (word) divr16u::return#2 return zp ZP_WORD:14 4.0 @@ -7555,7 +7428,6 @@ FINAL SYMBOL TABLE (byte*) print_str::str#0 str zp ZP_WORD:2 202.0 (byte*) print_str::str#3 str zp ZP_WORD:2 101.5 (byte*) print_str::str#5 str zp ZP_WORD:2 2.0 -(word) rem16u (signed byte()) sin8s((word) sin8s::x) (word~) sin8s::$6 $6 zp ZP_WORD:9 4.0 (label) sin8s::@1 @@ -7628,7 +7500,7 @@ FINAL SYMBOL TABLE (word) sin8s_gen::x#2 x zp ZP_WORD:2 4.714285714285714 reg byte x [ main::i#2 main::i#1 ] -zp ZP_WORD:2 [ print_str::str#3 print_str::str#5 print_str::str#0 print_cls::sc#2 print_cls::sc#1 sin8s_gen::x#2 sin8s_gen::x#1 divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +zp ZP_WORD:2 [ print_str::str#3 print_str::str#5 print_str::str#0 print_cls::sc#2 print_cls::sc#1 sin8s_gen::x#2 sin8s_gen::x#1 divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_BYTE:4 [ print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 main::sb#0 sin8s::isUpper#10 ] reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] zp ZP_WORD:5 [ print_char_cursor#27 print_char_cursor#37 print_char_cursor#44 print_char_cursor#41 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#2 divr16u::dividend#0 ] @@ -8322,7 +8194,7 @@ divr16u: { //SEG272 [135] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy //SEG273 [135] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy //SEG274 [135] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG275 [135] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG275 [135] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy //SEG276 divr16u::@1 b1: //SEG277 [136] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 @@ -8375,12 +8247,12 @@ divr16u: { sta rem+1 //SEG292 [147] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] //SEG293 [147] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG294 [147] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG294 [147] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy //SEG295 divr16u::@3 b3: - //SEG296 [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG296 [148] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG297 [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG297 [149] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8s_gen:5::div16u:53::divr16u:130 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1 //SEG298 divr16u::@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.sym b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.sym index 2bd41ae25..cc3a5bc47 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.sym @@ -38,10 +38,10 @@ (word) divr16u::rem (word) divr16u::rem#0 rem zp ZP_WORD:2 8.25 (word) divr16u::rem#1 rem zp ZP_WORD:2 22.0 -(word) divr16u::rem#10 rem zp ZP_WORD:2 11.0 (word) divr16u::rem#2 rem zp ZP_WORD:2 22.0 (word) divr16u::rem#4 rem zp ZP_WORD:2 22.0 (word) divr16u::rem#5 rem zp ZP_WORD:2 11.0 +(word) divr16u::rem#9 rem zp ZP_WORD:2 11.0 (word) divr16u::return (word) divr16u::return#0 return zp ZP_WORD:14 7.000000000000001 (word) divr16u::return#2 return zp ZP_WORD:14 4.0 @@ -165,7 +165,6 @@ (byte*) print_str::str#0 str zp ZP_WORD:2 202.0 (byte*) print_str::str#3 str zp ZP_WORD:2 101.5 (byte*) print_str::str#5 str zp ZP_WORD:2 2.0 -(word) rem16u (signed byte()) sin8s((word) sin8s::x) (word~) sin8s::$6 $6 zp ZP_WORD:9 4.0 (label) sin8s::@1 @@ -238,7 +237,7 @@ (word) sin8s_gen::x#2 x zp ZP_WORD:2 4.714285714285714 reg byte x [ main::i#2 main::i#1 ] -zp ZP_WORD:2 [ print_str::str#3 print_str::str#5 print_str::str#0 print_cls::sc#2 print_cls::sc#1 sin8s_gen::x#2 sin8s_gen::x#1 divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +zp ZP_WORD:2 [ print_str::str#3 print_str::str#5 print_str::str#0 print_cls::sc#2 print_cls::sc#1 sin8s_gen::x#2 sin8s_gen::x#1 divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_BYTE:4 [ print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 main::sb#0 sin8s::isUpper#10 ] reg byte a [ print_char::ch#3 print_char::ch#1 print_char::ch#2 ] zp ZP_WORD:5 [ print_char_cursor#27 print_char_cursor#37 print_char_cursor#44 print_char_cursor#41 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#2 divr16u::dividend#0 ] diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.cfg b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.cfg index a5d80c503..ef856372e 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.cfg +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.cfg @@ -390,7 +390,7 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [194] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [194] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [194] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12#0 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [194] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [194] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#9 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [195] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) [196] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) [197] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) @@ -410,10 +410,10 @@ divr16u::@5: scope:[divr16u] from divr16u::@2 [205] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [206] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ) - [206] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ) - [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) - [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) + [206] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [206] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) + [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 [209] return [ divr16u::return#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 ] ) diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.log index d22eb8352..9aef3068a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.log @@ -2354,6 +2354,8 @@ Removing unused procedure divr8u Removing unused procedure mulu16_sel Removing unused procedure mul16u Eliminating unused variable (byte) rem8u and assignment [0] (byte) rem8u ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable (word) rem16u and assignment [1] (word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0 +Eliminating unused variable rem16u(null) and assignment [26] rem16u(null) ← (word) divr16u::rem Eliminating unused variable (signed byte) rem8s and assignment [34] (signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating unused variable (signed word) rem16s and assignment [35] (signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating unused variable (byte~) mul8su::$5 and assignment [62] (byte~) mul8su::$5 ← > (word) mul8su::m @@ -2401,6 +2403,7 @@ Creating constant string variable for inline (const string) sin8u_table::str6 " Creating constant string variable for inline (const string) sin8u_table::str7 " scaled: @" Creating constant string variable for inline (const string) sin8u_table::str8 " trans: @" Removing empty block @1 +Removing empty block @2 Removing empty block divr16u::@7 Removing empty block @3 Removing empty block div16u::@1 @@ -2446,8 +2449,6 @@ Removing empty block @34 Removing empty block @35 Removing empty block sin8u_table::@2 PROCEDURE MODIFY VARIABLE ANALYSIS -divr16u modifies rem16u -div16u modifies rem16u print_str modifies print_char_cursor print_ln modifies print_line_cursor print_ln modifies print_char_cursor @@ -2460,8 +2461,6 @@ print_cls modifies print_line_cursor print_cls modifies print_char_cursor main modifies print_line_cursor main modifies print_char_cursor -main modifies rem16u -sin8u_table modifies rem16u sin8u_table modifies print_char_cursor sin8u_table modifies print_line_cursor @@ -2492,14 +2491,11 @@ Completing Phi functions... CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN @begin: scope:[] from - to:@2 -@2: scope:[] from @begin - (word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:@13 divr16u: scope:[divr16u] from div16u (word) divr16u::divisor#5 ← phi( div16u/(word) divr16u::divisor#0 ) (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#1 ) - (word) divr16u::rem#9 ← phi( div16u/(word) divr16u::rem#3 ) + (word) divr16u::rem#8 ← phi( div16u/(word) divr16u::rem#3 ) (word) divr16u::quotient#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) divr16u::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:divr16u::@1 @@ -2508,7 +2504,7 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (word) divr16u::divisor#3 ← phi( divr16u/(word) divr16u::divisor#5 divr16u::@3/(word) divr16u::divisor#6 ) (word) divr16u::quotient#6 ← phi( divr16u/(word) divr16u::quotient#0 divr16u::@3/(word) divr16u::quotient#8 ) (word) divr16u::dividend#2 ← phi( divr16u/(word) divr16u::dividend#4 divr16u::@3/(word) divr16u::dividend#5 ) - (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#9 divr16u::@3/(word) divr16u::rem#10 ) + (word) divr16u::rem#4 ← phi( divr16u/(word) divr16u::rem#8 divr16u::@3/(word) divr16u::rem#9 ) (word~) divr16u::$0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 (word) divr16u::rem#0 ← (word~) divr16u::$0 (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 @@ -2544,7 +2540,7 @@ divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 (word) divr16u::divisor#6 ← phi( divr16u::@2/(word) divr16u::divisor#1 divr16u::@5/(word) divr16u::divisor#2 ) (word) divr16u::quotient#8 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) (word) divr16u::dividend#5 ← phi( divr16u::@2/(word) divr16u::dividend#0 divr16u::@5/(word) divr16u::dividend#7 ) - (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) + (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) (byte) divr16u::i#2 ← phi( divr16u::@2/(byte) divr16u::i#3 divr16u::@5/(byte) divr16u::i#4 ) (byte) divr16u::i#1 ← (byte) divr16u::i#2 + rangenext(0,15) (bool~) divr16u::$11 ← (byte) divr16u::i#1 != rangelast(0,15) @@ -2562,19 +2558,14 @@ divr16u::@5: scope:[divr16u] from divr16u::@2 to:divr16u::@3 divr16u::@6: scope:[divr16u] from divr16u::@3 (word) divr16u::quotient#5 ← phi( divr16u::@3/(word) divr16u::quotient#8 ) - (word) divr16u::rem#8 ← phi( divr16u::@3/(word) divr16u::rem#10 ) - (word) rem16u#1 ← (word) divr16u::rem#8 (word) divr16u::return#0 ← (word) divr16u::quotient#5 to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@6 - (word) rem16u#10 ← phi( divr16u::@6/(word) rem16u#1 ) (word) divr16u::return#3 ← phi( divr16u::@6/(word) divr16u::return#0 ) (word) divr16u::return#1 ← (word) divr16u::return#3 - (word) rem16u#2 ← (word) rem16u#10 return to:@return div16u: scope:[div16u] from sin8u_table - (word) rem16u#18 ← phi( sin8u_table/(word) rem16u#20 ) (word) div16u::divisor#1 ← phi( sin8u_table/(word) div16u::divisor#0 ) (word) div16u::dividend#1 ← phi( sin8u_table/(word) div16u::dividend#0 ) (word) divr16u::dividend#1 ← (word) div16u::dividend#1 @@ -2584,17 +2575,13 @@ div16u: scope:[div16u] from sin8u_table (word) divr16u::return#2 ← (word) divr16u::return#1 to:div16u::@2 div16u::@2: scope:[div16u] from div16u - (word) rem16u#11 ← phi( div16u/(word) rem16u#2 ) (word) divr16u::return#4 ← phi( div16u/(word) divr16u::return#2 ) (word~) div16u::$0 ← (word) divr16u::return#4 - (word) rem16u#3 ← (word) rem16u#11 (word) div16u::return#0 ← (word~) div16u::$0 to:div16u::@return div16u::@return: scope:[div16u] from div16u::@2 - (word) rem16u#12 ← phi( div16u::@2/(word) rem16u#3 ) (word) div16u::return#3 ← phi( div16u::@2/(word) div16u::return#0 ) (word) div16u::return#1 ← (word) div16u::return#3 - (word) rem16u#4 ← (word) rem16u#12 return to:@return mul8u: scope:[mul8u] from mul8su mulu8_sel @@ -2683,8 +2670,7 @@ mul8su::@return: scope:[mul8su] from mul8su::@1 (signed word) mul8su::return#1 ← (signed word) mul8su::return#3 return to:@return -@13: scope:[] from @2 - (word) rem16u#28 ← phi( @2/(word) rem16u#0 ) +@13: scope:[] from @begin (word) PI2_u4f12#0 ← (word/signed word/dword/signed dword) 25736 (word) PI_u4f12#0 ← (word/signed word/dword/signed dword) 12868 (word) PI_HALF_u4f12#0 ← (word/signed word/dword/signed dword) 6434 @@ -2846,7 +2832,6 @@ mulu8_sel::@return: scope:[mulu8_sel] from mulu8_sel::@2 return to:@return @20: scope:[] from @13 - (word) rem16u#26 ← phi( @13/(word) rem16u#28 ) (byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) print_line_cursor#0 ← (byte*) print_screen#0 (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0 @@ -2994,7 +2979,6 @@ print_word::@return: scope:[print_word] from print_word::@2 to:@return @30: scope:[] from @20 (byte*) print_screen#6 ← phi( @20/(byte*) print_screen#0 ) - (word) rem16u#25 ← phi( @20/(word) rem16u#26 ) (byte*) print_char_cursor#107 ← phi( @20/(byte*) print_char_cursor#0 ) (byte*) print_line_cursor#30 ← phi( @20/(byte*) print_line_cursor#0 ) (byte[]) print_hextab#0 ← (const string) $0 @@ -3060,7 +3044,6 @@ print_cls::@return: scope:[print_cls] from print_cls::@2 return to:@return main: scope:[main] from @36 - (word) rem16u#23 ← phi( @36/(word) rem16u#22 ) (byte*) print_char_cursor#98 ← phi( @36/(byte*) print_char_cursor#101 ) (byte*) print_line_cursor#24 ← phi( @36/(byte*) print_line_cursor#27 ) (byte*) print_screen#4 ← phi( @36/(byte*) print_screen#5 ) @@ -3069,7 +3052,6 @@ main: scope:[main] from @36 call print_cls to:main::@1 main::@1: scope:[main] from main - (word) rem16u#19 ← phi( main/(word) rem16u#23 ) (word) main::tabsize#1 ← phi( main/(word) main::tabsize#0 ) (byte*) print_char_cursor#65 ← phi( main/(byte*) print_char_cursor#20 ) (byte*) print_line_cursor#16 ← phi( main/(byte*) print_line_cursor#4 ) @@ -3084,25 +3066,20 @@ main::@1: scope:[main] from main main::@2: scope:[main] from main::@1 (byte*) print_line_cursor#17 ← phi( main::@1/(byte*) print_line_cursor#10 ) (byte*) print_char_cursor#66 ← phi( main::@1/(byte*) print_char_cursor#44 ) - (word) rem16u#13 ← phi( main::@1/(word) rem16u#8 ) - (word) rem16u#5 ← (word) rem16u#13 (byte*) print_char_cursor#22 ← (byte*) print_char_cursor#66 (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#17 to:main::@return main::@return: scope:[main] from main::@2 - (word) rem16u#14 ← phi( main::@2/(word) rem16u#5 ) (byte*) print_char_cursor#67 ← phi( main::@2/(byte*) print_char_cursor#22 ) (byte*) print_line_cursor#18 ← phi( main::@2/(byte*) print_line_cursor#6 ) (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#18 (byte*) print_char_cursor#23 ← (byte*) print_char_cursor#67 - (word) rem16u#6 ← (word) rem16u#14 return to:@return sin8u_table: scope:[sin8u_table] from main::@1 (byte*) sin8u_table::sintab#26 ← phi( main::@1/(byte*) sin8u_table::sintab#0 ) (byte*) print_line_cursor#49 ← phi( main::@1/(byte*) print_line_cursor#5 ) (byte*) print_char_cursor#105 ← phi( main::@1/(byte*) print_char_cursor#21 ) - (word) rem16u#20 ← phi( main::@1/(word) rem16u#19 ) (word) sin8u_table::tabsize#1 ← phi( main::@1/(word) sin8u_table::tabsize#0 ) (byte) sin8u_table::min#1 ← phi( main::@1/(byte) sin8u_table::min#0 ) (byte) sin8u_table::max#1 ← phi( main::@1/(byte) sin8u_table::max#0 ) @@ -3129,16 +3106,13 @@ sin8u_table::@3: scope:[sin8u_table] from sin8u_table (byte) sin8u_table::max#7 ← phi( sin8u_table/(byte) sin8u_table::max#1 ) (byte) sin8u_table::min#5 ← phi( sin8u_table/(byte) sin8u_table::min#1 ) (byte*) print_char_cursor#99 ← phi( sin8u_table/(byte*) print_char_cursor#105 ) - (word) rem16u#15 ← phi( sin8u_table/(word) rem16u#4 ) (word) div16u::return#4 ← phi( sin8u_table/(word) div16u::return#2 ) (word~) sin8u_table::$6 ← (word) div16u::return#4 - (word) rem16u#7 ← (word) rem16u#15 (word) sin8u_table::step#0 ← (word~) sin8u_table::$6 (byte*) print_str::str#1 ← (const string) sin8u_table::str call print_str to:sin8u_table::@4 sin8u_table::@4: scope:[sin8u_table] from sin8u_table::@3 - (word) rem16u#48 ← phi( sin8u_table::@3/(word) rem16u#7 ) (word) sin8u_table::tabsize#24 ← phi( sin8u_table::@3/(word) sin8u_table::tabsize#25 ) (byte*) sin8u_table::sintab#24 ← phi( sin8u_table::@3/(byte*) sin8u_table::sintab#25 ) (byte*) print_line_cursor#45 ← phi( sin8u_table::@3/(byte*) print_line_cursor#47 ) @@ -3153,7 +3127,6 @@ sin8u_table::@4: scope:[sin8u_table] from sin8u_table::@3 call print_word to:sin8u_table::@5 sin8u_table::@5: scope:[sin8u_table] from sin8u_table::@4 - (word) rem16u#47 ← phi( sin8u_table::@4/(word) rem16u#48 ) (word) sin8u_table::tabsize#23 ← phi( sin8u_table::@4/(word) sin8u_table::tabsize#24 ) (word) sin8u_table::step#23 ← phi( sin8u_table::@4/(word) sin8u_table::step#1 ) (byte*) sin8u_table::sintab#23 ← phi( sin8u_table::@4/(byte*) sin8u_table::sintab#24 ) @@ -3168,7 +3141,6 @@ sin8u_table::@5: scope:[sin8u_table] from sin8u_table::@4 call print_str to:sin8u_table::@6 sin8u_table::@6: scope:[sin8u_table] from sin8u_table::@5 - (word) rem16u#46 ← phi( sin8u_table::@5/(word) rem16u#47 ) (word) sin8u_table::tabsize#22 ← phi( sin8u_table::@5/(word) sin8u_table::tabsize#23 ) (word) sin8u_table::step#22 ← phi( sin8u_table::@5/(word) sin8u_table::step#23 ) (byte*) sin8u_table::sintab#21 ← phi( sin8u_table::@5/(byte*) sin8u_table::sintab#23 ) @@ -3183,7 +3155,6 @@ sin8u_table::@6: scope:[sin8u_table] from sin8u_table::@5 call print_byte to:sin8u_table::@7 sin8u_table::@7: scope:[sin8u_table] from sin8u_table::@6 - (word) rem16u#45 ← phi( sin8u_table::@6/(word) rem16u#46 ) (word) sin8u_table::tabsize#21 ← phi( sin8u_table::@6/(word) sin8u_table::tabsize#22 ) (word) sin8u_table::step#21 ← phi( sin8u_table::@6/(word) sin8u_table::step#22 ) (byte*) sin8u_table::sintab#19 ← phi( sin8u_table::@6/(byte*) sin8u_table::sintab#21 ) @@ -3197,7 +3168,6 @@ sin8u_table::@7: scope:[sin8u_table] from sin8u_table::@6 call print_str to:sin8u_table::@8 sin8u_table::@8: scope:[sin8u_table] from sin8u_table::@7 - (word) rem16u#44 ← phi( sin8u_table::@7/(word) rem16u#45 ) (word) sin8u_table::tabsize#20 ← phi( sin8u_table::@7/(word) sin8u_table::tabsize#21 ) (word) sin8u_table::step#20 ← phi( sin8u_table::@7/(word) sin8u_table::step#21 ) (byte*) sin8u_table::sintab#17 ← phi( sin8u_table::@7/(byte*) sin8u_table::sintab#19 ) @@ -3211,7 +3181,6 @@ sin8u_table::@8: scope:[sin8u_table] from sin8u_table::@7 call print_byte to:sin8u_table::@9 sin8u_table::@9: scope:[sin8u_table] from sin8u_table::@8 - (word) rem16u#43 ← phi( sin8u_table::@8/(word) rem16u#44 ) (word) sin8u_table::tabsize#19 ← phi( sin8u_table::@8/(word) sin8u_table::tabsize#20 ) (word) sin8u_table::step#19 ← phi( sin8u_table::@8/(word) sin8u_table::step#20 ) (byte*) sin8u_table::sintab#15 ← phi( sin8u_table::@8/(byte*) sin8u_table::sintab#17 ) @@ -3224,7 +3193,6 @@ sin8u_table::@9: scope:[sin8u_table] from sin8u_table::@8 call print_str to:sin8u_table::@10 sin8u_table::@10: scope:[sin8u_table] from sin8u_table::@9 - (word) rem16u#42 ← phi( sin8u_table::@9/(word) rem16u#43 ) (word) sin8u_table::tabsize#18 ← phi( sin8u_table::@9/(word) sin8u_table::tabsize#19 ) (word) sin8u_table::step#18 ← phi( sin8u_table::@9/(word) sin8u_table::step#19 ) (byte*) sin8u_table::sintab#13 ← phi( sin8u_table::@9/(byte*) sin8u_table::sintab#15 ) @@ -3237,7 +3205,6 @@ sin8u_table::@10: scope:[sin8u_table] from sin8u_table::@9 call print_byte to:sin8u_table::@11 sin8u_table::@11: scope:[sin8u_table] from sin8u_table::@10 - (word) rem16u#41 ← phi( sin8u_table::@10/(word) rem16u#42 ) (word) sin8u_table::tabsize#17 ← phi( sin8u_table::@10/(word) sin8u_table::tabsize#18 ) (word) sin8u_table::step#17 ← phi( sin8u_table::@10/(word) sin8u_table::step#18 ) (byte*) sin8u_table::sintab#11 ← phi( sin8u_table::@10/(byte*) sin8u_table::sintab#13 ) @@ -3250,7 +3217,6 @@ sin8u_table::@11: scope:[sin8u_table] from sin8u_table::@10 call print_str to:sin8u_table::@12 sin8u_table::@12: scope:[sin8u_table] from sin8u_table::@11 - (word) rem16u#40 ← phi( sin8u_table::@11/(word) rem16u#41 ) (word) sin8u_table::tabsize#16 ← phi( sin8u_table::@11/(word) sin8u_table::tabsize#17 ) (word) sin8u_table::step#16 ← phi( sin8u_table::@11/(word) sin8u_table::step#17 ) (byte*) sin8u_table::sintab#9 ← phi( sin8u_table::@11/(byte*) sin8u_table::sintab#11 ) @@ -3263,7 +3229,6 @@ sin8u_table::@12: scope:[sin8u_table] from sin8u_table::@11 call print_byte to:sin8u_table::@13 sin8u_table::@13: scope:[sin8u_table] from sin8u_table::@12 - (word) rem16u#39 ← phi( sin8u_table::@12/(word) rem16u#40 ) (word) sin8u_table::tabsize#15 ← phi( sin8u_table::@12/(word) sin8u_table::tabsize#16 ) (word) sin8u_table::step#15 ← phi( sin8u_table::@12/(word) sin8u_table::step#16 ) (byte*) sin8u_table::sintab#7 ← phi( sin8u_table::@12/(byte*) sin8u_table::sintab#9 ) @@ -3275,7 +3240,6 @@ sin8u_table::@13: scope:[sin8u_table] from sin8u_table::@12 call print_ln to:sin8u_table::@14 sin8u_table::@14: scope:[sin8u_table] from sin8u_table::@13 - (word) rem16u#38 ← phi( sin8u_table::@13/(word) rem16u#39 ) (word) sin8u_table::tabsize#14 ← phi( sin8u_table::@13/(word) sin8u_table::tabsize#15 ) (word) sin8u_table::step#14 ← phi( sin8u_table::@13/(word) sin8u_table::step#15 ) (byte*) sin8u_table::sintab#5 ← phi( sin8u_table::@13/(byte*) sin8u_table::sintab#7 ) @@ -3289,7 +3253,6 @@ sin8u_table::@14: scope:[sin8u_table] from sin8u_table::@13 (word) sin8u_table::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 to:sin8u_table::@1 sin8u_table::@1: scope:[sin8u_table] from sin8u_table::@14 sin8u_table::@25 - (word) rem16u#37 ← phi( sin8u_table::@14/(word) rem16u#38 sin8u_table::@25/(word) rem16u#21 ) (word) sin8u_table::tabsize#13 ← phi( sin8u_table::@14/(word) sin8u_table::tabsize#14 sin8u_table::@25/(word) sin8u_table::tabsize#2 ) (word) sin8u_table::i#13 ← phi( sin8u_table::@14/(word) sin8u_table::i#0 sin8u_table::@25/(word) sin8u_table::i#1 ) (word) sin8u_table::step#13 ← phi( sin8u_table::@14/(word) sin8u_table::step#14 sin8u_table::@25/(word) sin8u_table::step#2 ) @@ -3304,7 +3267,6 @@ sin8u_table::@1: scope:[sin8u_table] from sin8u_table::@14 sin8u_table::@25 (signed byte) sin8s::return#2 ← (signed byte) sin8s::return#1 to:sin8u_table::@15 sin8u_table::@15: scope:[sin8u_table] from sin8u_table::@1 - (word) rem16u#36 ← phi( sin8u_table::@1/(word) rem16u#37 ) (word) sin8u_table::tabsize#12 ← phi( sin8u_table::@1/(word) sin8u_table::tabsize#13 ) (word) sin8u_table::i#12 ← phi( sin8u_table::@1/(word) sin8u_table::i#13 ) (word) sin8u_table::step#12 ← phi( sin8u_table::@1/(word) sin8u_table::step#13 ) @@ -3325,7 +3287,6 @@ sin8u_table::@15: scope:[sin8u_table] from sin8u_table::@1 to:sin8u_table::@16 sin8u_table::@16: scope:[sin8u_table] from sin8u_table::@15 (byte) sin8u_table::amplitude#24 ← phi( sin8u_table::@15/(byte) sin8u_table::amplitude#2 ) - (word) rem16u#35 ← phi( sin8u_table::@15/(word) rem16u#36 ) (word) sin8u_table::tabsize#11 ← phi( sin8u_table::@15/(word) sin8u_table::tabsize#12 ) (word) sin8u_table::i#11 ← phi( sin8u_table::@15/(word) sin8u_table::i#12 ) (word) sin8u_table::step#11 ← phi( sin8u_table::@15/(word) sin8u_table::step#12 ) @@ -3350,7 +3311,6 @@ sin8u_table::@17: scope:[sin8u_table] from sin8u_table::@16 (byte*) sin8u_table::sintab#22 ← phi( sin8u_table::@16/(byte*) sin8u_table::sintab#1 ) (byte) sin8u_table::mid#24 ← phi( sin8u_table::@16/(byte) sin8u_table::mid#2 ) (byte) sin8u_table::amplitude#23 ← phi( sin8u_table::@16/(byte) sin8u_table::amplitude#24 ) - (word) rem16u#34 ← phi( sin8u_table::@16/(word) rem16u#35 ) (word) sin8u_table::tabsize#10 ← phi( sin8u_table::@16/(word) sin8u_table::tabsize#11 ) (word) sin8u_table::i#10 ← phi( sin8u_table::@16/(word) sin8u_table::i#11 ) (word) sin8u_table::step#10 ← phi( sin8u_table::@16/(word) sin8u_table::step#11 ) @@ -3368,7 +3328,6 @@ sin8u_table::@18: scope:[sin8u_table] from sin8u_table::@17 (byte*) sin8u_table::sintab#20 ← phi( sin8u_table::@17/(byte*) sin8u_table::sintab#22 ) (byte) sin8u_table::mid#23 ← phi( sin8u_table::@17/(byte) sin8u_table::mid#24 ) (byte) sin8u_table::amplitude#22 ← phi( sin8u_table::@17/(byte) sin8u_table::amplitude#23 ) - (word) rem16u#33 ← phi( sin8u_table::@17/(word) rem16u#34 ) (word) sin8u_table::tabsize#9 ← phi( sin8u_table::@17/(word) sin8u_table::tabsize#10 ) (word) sin8u_table::i#9 ← phi( sin8u_table::@17/(word) sin8u_table::i#10 ) (word) sin8u_table::step#9 ← phi( sin8u_table::@17/(word) sin8u_table::step#10 ) @@ -3386,7 +3345,6 @@ sin8u_table::@19: scope:[sin8u_table] from sin8u_table::@18 (byte*) sin8u_table::sintab#18 ← phi( sin8u_table::@18/(byte*) sin8u_table::sintab#20 ) (byte) sin8u_table::mid#22 ← phi( sin8u_table::@18/(byte) sin8u_table::mid#23 ) (byte) sin8u_table::amplitude#21 ← phi( sin8u_table::@18/(byte) sin8u_table::amplitude#22 ) - (word) rem16u#32 ← phi( sin8u_table::@18/(word) rem16u#33 ) (word) sin8u_table::tabsize#8 ← phi( sin8u_table::@18/(word) sin8u_table::tabsize#9 ) (word) sin8u_table::i#8 ← phi( sin8u_table::@18/(word) sin8u_table::i#9 ) (word) sin8u_table::step#8 ← phi( sin8u_table::@18/(word) sin8u_table::step#9 ) @@ -3404,7 +3362,6 @@ sin8u_table::@20: scope:[sin8u_table] from sin8u_table::@19 (byte*) sin8u_table::sintab#16 ← phi( sin8u_table::@19/(byte*) sin8u_table::sintab#18 ) (byte) sin8u_table::mid#20 ← phi( sin8u_table::@19/(byte) sin8u_table::mid#22 ) (byte) sin8u_table::amplitude#20 ← phi( sin8u_table::@19/(byte) sin8u_table::amplitude#21 ) - (word) rem16u#31 ← phi( sin8u_table::@19/(word) rem16u#32 ) (word) sin8u_table::tabsize#7 ← phi( sin8u_table::@19/(word) sin8u_table::tabsize#8 ) (word) sin8u_table::i#7 ← phi( sin8u_table::@19/(word) sin8u_table::i#8 ) (word) sin8u_table::step#7 ← phi( sin8u_table::@19/(word) sin8u_table::step#8 ) @@ -3421,7 +3378,6 @@ sin8u_table::@21: scope:[sin8u_table] from sin8u_table::@20 (byte*) sin8u_table::sintab#14 ← phi( sin8u_table::@20/(byte*) sin8u_table::sintab#16 ) (byte) sin8u_table::mid#18 ← phi( sin8u_table::@20/(byte) sin8u_table::mid#20 ) (byte) sin8u_table::amplitude#18 ← phi( sin8u_table::@20/(byte) sin8u_table::amplitude#20 ) - (word) rem16u#30 ← phi( sin8u_table::@20/(word) rem16u#31 ) (word) sin8u_table::tabsize#6 ← phi( sin8u_table::@20/(word) sin8u_table::tabsize#7 ) (word) sin8u_table::i#6 ← phi( sin8u_table::@20/(word) sin8u_table::i#7 ) (word) sin8u_table::step#6 ← phi( sin8u_table::@20/(word) sin8u_table::step#7 ) @@ -3438,7 +3394,6 @@ sin8u_table::@22: scope:[sin8u_table] from sin8u_table::@21 (byte*) sin8u_table::sintab#12 ← phi( sin8u_table::@21/(byte*) sin8u_table::sintab#14 ) (byte) sin8u_table::mid#16 ← phi( sin8u_table::@21/(byte) sin8u_table::mid#18 ) (byte) sin8u_table::amplitude#16 ← phi( sin8u_table::@21/(byte) sin8u_table::amplitude#18 ) - (word) rem16u#29 ← phi( sin8u_table::@21/(word) rem16u#30 ) (word) sin8u_table::tabsize#5 ← phi( sin8u_table::@21/(word) sin8u_table::tabsize#6 ) (word) sin8u_table::i#5 ← phi( sin8u_table::@21/(word) sin8u_table::i#6 ) (word) sin8u_table::step#5 ← phi( sin8u_table::@21/(word) sin8u_table::step#6 ) @@ -3454,7 +3409,6 @@ sin8u_table::@23: scope:[sin8u_table] from sin8u_table::@22 (byte*) sin8u_table::sintab#10 ← phi( sin8u_table::@22/(byte*) sin8u_table::sintab#12 ) (byte) sin8u_table::mid#14 ← phi( sin8u_table::@22/(byte) sin8u_table::mid#16 ) (byte) sin8u_table::amplitude#13 ← phi( sin8u_table::@22/(byte) sin8u_table::amplitude#16 ) - (word) rem16u#27 ← phi( sin8u_table::@22/(word) rem16u#29 ) (word) sin8u_table::tabsize#4 ← phi( sin8u_table::@22/(word) sin8u_table::tabsize#5 ) (word) sin8u_table::i#4 ← phi( sin8u_table::@22/(word) sin8u_table::i#5 ) (word) sin8u_table::step#4 ← phi( sin8u_table::@22/(word) sin8u_table::step#5 ) @@ -3470,7 +3424,6 @@ sin8u_table::@24: scope:[sin8u_table] from sin8u_table::@23 (byte*) sin8u_table::sintab#8 ← phi( sin8u_table::@23/(byte*) sin8u_table::sintab#10 ) (byte) sin8u_table::mid#12 ← phi( sin8u_table::@23/(byte) sin8u_table::mid#14 ) (byte) sin8u_table::amplitude#10 ← phi( sin8u_table::@23/(byte) sin8u_table::amplitude#13 ) - (word) rem16u#24 ← phi( sin8u_table::@23/(word) rem16u#27 ) (word) sin8u_table::tabsize#3 ← phi( sin8u_table::@23/(word) sin8u_table::tabsize#4 ) (word) sin8u_table::i#3 ← phi( sin8u_table::@23/(word) sin8u_table::i#4 ) (word) sin8u_table::step#3 ← phi( sin8u_table::@23/(word) sin8u_table::step#4 ) @@ -3484,7 +3437,6 @@ sin8u_table::@25: scope:[sin8u_table] from sin8u_table::@24 (byte*) sin8u_table::sintab#6 ← phi( sin8u_table::@24/(byte*) sin8u_table::sintab#8 ) (byte) sin8u_table::mid#9 ← phi( sin8u_table::@24/(byte) sin8u_table::mid#12 ) (byte) sin8u_table::amplitude#7 ← phi( sin8u_table::@24/(byte) sin8u_table::amplitude#10 ) - (word) rem16u#21 ← phi( sin8u_table::@24/(word) rem16u#24 ) (word) sin8u_table::tabsize#2 ← phi( sin8u_table::@24/(word) sin8u_table::tabsize#3 ) (word) sin8u_table::i#2 ← phi( sin8u_table::@24/(word) sin8u_table::i#3 ) (word) sin8u_table::step#2 ← phi( sin8u_table::@24/(word) sin8u_table::step#3 ) @@ -3502,33 +3454,27 @@ sin8u_table::@25: scope:[sin8u_table] from sin8u_table::@24 sin8u_table::@return: scope:[sin8u_table] from sin8u_table::@25 (byte*) print_line_cursor#21 ← phi( sin8u_table::@25/(byte*) print_line_cursor#9 ) (byte*) print_char_cursor#88 ← phi( sin8u_table::@25/(byte*) print_char_cursor#43 ) - (word) rem16u#16 ← phi( sin8u_table::@25/(word) rem16u#21 ) - (word) rem16u#8 ← (word) rem16u#16 (byte*) print_char_cursor#44 ← (byte*) print_char_cursor#88 (byte*) print_line_cursor#10 ← (byte*) print_line_cursor#21 return to:@return @36: scope:[] from @30 (byte*) print_screen#5 ← phi( @30/(byte*) print_screen#6 ) - (word) rem16u#22 ← phi( @30/(word) rem16u#25 ) (byte*) print_char_cursor#101 ← phi( @30/(byte*) print_char_cursor#107 ) (byte*) print_line_cursor#27 ← phi( @30/(byte*) print_line_cursor#30 ) call main to:@37 @37: scope:[] from @36 - (word) rem16u#17 ← phi( @36/(word) rem16u#6 ) (byte*) print_char_cursor#89 ← phi( @36/(byte*) print_char_cursor#23 ) (byte*) print_line_cursor#22 ← phi( @36/(byte*) print_line_cursor#7 ) (byte*) print_line_cursor#11 ← (byte*) print_line_cursor#22 (byte*) print_char_cursor#45 ← (byte*) print_char_cursor#89 - (word) rem16u#9 ← (word) rem16u#17 to:@end @end: scope:[] from @37 SYMBOL TABLE SSA (const string) $0 = (string) "0123456789abcdef" (label) @13 -(label) @2 (label) @20 (label) @30 (label) @36 @@ -3615,7 +3561,6 @@ SYMBOL TABLE SSA (word) divr16u::rem (word) divr16u::rem#0 (word) divr16u::rem#1 -(word) divr16u::rem#10 (word) divr16u::rem#2 (word) divr16u::rem#3 (word) divr16u::rem#4 @@ -4043,56 +3988,6 @@ SYMBOL TABLE SSA (word) print_word::w#2 (word) print_word::w#3 (word) print_word::w#4 -(word) rem16u -(word) rem16u#0 -(word) rem16u#1 -(word) rem16u#10 -(word) rem16u#11 -(word) rem16u#12 -(word) rem16u#13 -(word) rem16u#14 -(word) rem16u#15 -(word) rem16u#16 -(word) rem16u#17 -(word) rem16u#18 -(word) rem16u#19 -(word) rem16u#2 -(word) rem16u#20 -(word) rem16u#21 -(word) rem16u#22 -(word) rem16u#23 -(word) rem16u#24 -(word) rem16u#25 -(word) rem16u#26 -(word) rem16u#27 -(word) rem16u#28 -(word) rem16u#29 -(word) rem16u#3 -(word) rem16u#30 -(word) rem16u#31 -(word) rem16u#32 -(word) rem16u#33 -(word) rem16u#34 -(word) rem16u#35 -(word) rem16u#36 -(word) rem16u#37 -(word) rem16u#38 -(word) rem16u#39 -(word) rem16u#4 -(word) rem16u#40 -(word) rem16u#41 -(word) rem16u#42 -(word) rem16u#43 -(word) rem16u#44 -(word) rem16u#45 -(word) rem16u#46 -(word) rem16u#47 -(word) rem16u#48 -(word) rem16u#5 -(word) rem16u#6 -(word) rem16u#7 -(word) rem16u#8 -(word) rem16u#9 (signed byte()) sin8s((word) sin8s::x) (bool~) sin8s::$0 (bool~) sin8s::$1 @@ -4457,17 +4352,14 @@ Inversing boolean not (bool~) sin8s::$20 ← (byte) sin8s::isUpper#2 == (byte/si Inversing boolean not (bool~) print_sword::$1 ← (signed word) print_sword::w#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) print_sbyte::$1 ← (signed byte) print_sbyte::b#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Succesful SSA optimization Pass2UnaryNotSimplification -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#8 Not aliassing across scopes: div16u::dividend#1 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#1 div16u::divisor#0 -Not aliassing across scopes: rem16u#18 rem16u#20 Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#1 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#1 Not aliassing across scopes: divr16u::return#2 divr16u::return#1 -Not aliassing across scopes: rem16u#11 rem16u#2 Not aliassing across scopes: div16u::$0 divr16u::return#4 Not aliassing across scopes: mul8u::b#2 mul8u::b#0 Not aliassing across scopes: mul8u::a#6 mul8u::a#1 @@ -4530,25 +4422,21 @@ Not aliassing across scopes: print_cls::sc#0 print_screen#1 Not aliassing across scopes: print_screen#4 print_screen#5 Not aliassing across scopes: print_line_cursor#24 print_line_cursor#27 Not aliassing across scopes: print_char_cursor#98 print_char_cursor#101 -Not aliassing across scopes: rem16u#23 rem16u#22 Not aliassing across scopes: print_line_cursor#16 print_line_cursor#4 Not aliassing across scopes: print_char_cursor#65 print_char_cursor#20 Not aliassing across scopes: sin8u_table::sintab#0 main::sintab#0 Not aliassing across scopes: sin8u_table::tabsize#0 main::tabsize#1 -Not aliassing across scopes: rem16u#13 rem16u#8 Not aliassing across scopes: print_char_cursor#66 print_char_cursor#44 Not aliassing across scopes: print_line_cursor#17 print_line_cursor#10 Not aliassing across scopes: sin8u_table::max#1 sin8u_table::max#0 Not aliassing across scopes: sin8u_table::min#1 sin8u_table::min#0 Not aliassing across scopes: sin8u_table::tabsize#1 sin8u_table::tabsize#0 -Not aliassing across scopes: rem16u#20 rem16u#19 Not aliassing across scopes: print_char_cursor#105 print_char_cursor#21 Not aliassing across scopes: print_line_cursor#49 print_line_cursor#5 Not aliassing across scopes: sin8u_table::sintab#26 sin8u_table::sintab#0 Not aliassing across scopes: div16u::dividend#0 PI2_u4f12#0 Not aliassing across scopes: div16u::divisor#0 sin8u_table::tabsize#1 Not aliassing across scopes: div16u::return#2 div16u::return#1 -Not aliassing across scopes: rem16u#15 rem16u#4 Not aliassing across scopes: sin8u_table::$6 div16u::return#4 Not aliassing across scopes: print_char_cursor#68 print_char_cursor#2 Not aliassing across scopes: print_word::w#1 sin8u_table::step#1 @@ -4589,7 +4477,6 @@ Not aliassing across scopes: print_line_cursor#20 print_line_cursor#2 Not aliassing across scopes: print_char_cursor#87 print_char_cursor#4 Not aliassing across scopes: print_line_cursor#22 print_line_cursor#7 Not aliassing across scopes: print_char_cursor#89 print_char_cursor#23 -Not aliassing across scopes: rem16u#17 rem16u#6 Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#6 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#7 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 @@ -4602,11 +4489,8 @@ Alias (word) divr16u::rem#5 = (word) divr16u::rem#7 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#2 Alias (byte) divr16u::i#3 = (byte) divr16u::i#4 Alias (word) divr16u::rem#2 = (word~) divr16u::$10 -Alias (word) divr16u::rem#10 = (word) divr16u::rem#8 Alias (word) divr16u::return#0 = (word) divr16u::quotient#5 (word) divr16u::quotient#8 (word) divr16u::return#3 (word) divr16u::return#1 -Alias (word) rem16u#1 = (word) rem16u#10 (word) rem16u#2 Alias (word) divr16u::return#2 = (word) divr16u::return#4 -Alias (word) rem16u#11 = (word) rem16u#3 (word) rem16u#12 (word) rem16u#4 Alias (word) div16u::return#0 = (word~) div16u::$0 (word) div16u::return#3 (word) div16u::return#1 Alias (byte) mul8u::a#3 = (byte) mul8u::a#4 (byte) mul8u::a#7 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 @@ -4622,7 +4506,6 @@ Alias (byte) mul8su::b#1 = (byte) mul8su::b#3 (byte) mul8su::b#2 Alias (word) mul8su::m#0 = (word~) mul8su::$2 (word) mul8su::m#3 Alias (signed word) mul8su::return#0 = (signed word~) mul8su::$9 (signed word) mul8su::return#3 (signed word) mul8su::return#1 Alias (byte~) mul8su::$10 = (byte~) mul8su::$8 -Alias (word) rem16u#0 = (word) rem16u#28 (word) rem16u#26 (word) rem16u#25 (word) rem16u#22 Alias (word) sin8s::x#3 = (word) sin8s::x#5 Alias (word) sin8s::x#0 = (word~) sin8s::$2 Alias (byte) sin8s::x1#0 = (byte~) sin8s::$7 (byte) sin8s::x1#1 (byte) sin8s::x1#4 (byte) sin8s::x1#2 (byte) sin8s::x1#3 @@ -4677,10 +4560,8 @@ Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#60 (byte*) print_ Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#63 (byte*) print_char_cursor#18 Alias (byte*) print_line_cursor#15 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_line_cursor#3 (byte*) print_char_cursor#19 (byte*) print_char_cursor#64 (byte*) print_line_cursor#4 (byte*) print_char_cursor#20 Alias (word) main::tabsize#0 = (word) main::tabsize#1 -Alias (word) rem16u#19 = (word) rem16u#23 Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#5 Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#65 -Alias (word) rem16u#13 = (word) rem16u#5 (word) rem16u#14 (word) rem16u#6 Alias (byte*) print_char_cursor#22 = (byte*) print_char_cursor#66 (byte*) print_char_cursor#67 (byte*) print_char_cursor#23 Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#6 (byte*) print_line_cursor#18 (byte*) print_line_cursor#7 Alias (byte) sin8u_table::amplitude#0 = (byte~) sin8u_table::$0 (byte) sin8u_table::amplitude#19 (byte) sin8u_table::amplitude#17 (byte) sin8u_table::amplitude#14 (byte) sin8u_table::amplitude#11 (byte) sin8u_table::amplitude#8 (byte) sin8u_table::amplitude#5 (byte) sin8u_table::amplitude#3 (byte) sin8u_table::amplitude#1 (byte) sin8u_table::amplitude#15 (byte) sin8u_table::amplitude#12 (byte) sin8u_table::amplitude#9 (byte) sin8u_table::amplitude#6 @@ -4693,7 +4574,6 @@ Alias (byte) sin8u_table::max#1 = (byte) sin8u_table::max#7 (byte) sin8u_table:: Alias (byte*) print_line_cursor#25 = (byte*) print_line_cursor#47 (byte*) print_line_cursor#49 (byte*) print_line_cursor#45 (byte*) print_line_cursor#43 (byte*) print_line_cursor#41 (byte*) print_line_cursor#39 (byte*) print_line_cursor#37 (byte*) print_line_cursor#35 (byte*) print_line_cursor#33 (byte*) print_line_cursor#31 (byte*) print_line_cursor#28 Alias (byte*) sin8u_table::sintab#11 = (byte*) sin8u_table::sintab#25 (byte*) sin8u_table::sintab#26 (byte*) sin8u_table::sintab#24 (byte*) sin8u_table::sintab#23 (byte*) sin8u_table::sintab#21 (byte*) sin8u_table::sintab#19 (byte*) sin8u_table::sintab#17 (byte*) sin8u_table::sintab#15 (byte*) sin8u_table::sintab#13 (byte*) sin8u_table::sintab#9 (byte*) sin8u_table::sintab#7 (byte*) sin8u_table::sintab#5 Alias (word) sin8u_table::tabsize#1 = (word) sin8u_table::tabsize#25 (word) sin8u_table::tabsize#24 (word) sin8u_table::tabsize#23 (word) sin8u_table::tabsize#22 (word) sin8u_table::tabsize#21 (word) sin8u_table::tabsize#20 (word) sin8u_table::tabsize#19 (word) sin8u_table::tabsize#18 (word) sin8u_table::tabsize#17 (word) sin8u_table::tabsize#16 (word) sin8u_table::tabsize#15 (word) sin8u_table::tabsize#14 -Alias (word) rem16u#15 = (word) rem16u#7 (word) rem16u#48 (word) rem16u#47 (word) rem16u#46 (word) rem16u#45 (word) rem16u#44 (word) rem16u#43 (word) rem16u#42 (word) rem16u#41 (word) rem16u#40 (word) rem16u#39 (word) rem16u#38 Alias (word) sin8u_table::step#0 = (word~) sin8u_table::$6 (word) sin8u_table::step#1 (word) sin8u_table::step#23 (word) sin8u_table::step#22 (word) sin8u_table::step#21 (word) sin8u_table::step#20 (word) sin8u_table::step#19 (word) sin8u_table::step#18 (word) sin8u_table::step#17 (word) sin8u_table::step#16 (word) sin8u_table::step#15 (word) sin8u_table::step#14 Alias (byte*) print_char_cursor#24 = (byte*) print_char_cursor#68 Alias (byte*) print_char_cursor#25 = (byte*) print_char_cursor#69 @@ -4717,7 +4597,6 @@ Alias (byte*) print_line_cursor#26 = (byte*) print_line_cursor#46 (byte*) print_ Alias (word) sin8u_table::step#10 = (word) sin8u_table::step#12 (word) sin8u_table::step#13 (word) sin8u_table::step#11 (word) sin8u_table::step#9 (word) sin8u_table::step#8 (word) sin8u_table::step#7 (word) sin8u_table::step#6 (word) sin8u_table::step#5 (word) sin8u_table::step#4 (word) sin8u_table::step#3 (word) sin8u_table::step#2 Alias (word) sin8u_table::i#10 = (word) sin8u_table::i#12 (word) sin8u_table::i#13 (word) sin8u_table::i#11 (word) sin8u_table::i#9 (word) sin8u_table::i#8 (word) sin8u_table::i#7 (word) sin8u_table::i#6 (word) sin8u_table::i#5 (word) sin8u_table::i#4 (word) sin8u_table::i#3 (word) sin8u_table::i#2 Alias (word) sin8u_table::tabsize#10 = (word) sin8u_table::tabsize#12 (word) sin8u_table::tabsize#13 (word) sin8u_table::tabsize#11 (word) sin8u_table::tabsize#9 (word) sin8u_table::tabsize#8 (word) sin8u_table::tabsize#7 (word) sin8u_table::tabsize#6 (word) sin8u_table::tabsize#5 (word) sin8u_table::tabsize#4 (word) sin8u_table::tabsize#3 (word) sin8u_table::tabsize#2 -Alias (word) rem16u#16 = (word) rem16u#36 (word) rem16u#37 (word) rem16u#35 (word) rem16u#34 (word) rem16u#33 (word) rem16u#32 (word) rem16u#31 (word) rem16u#30 (word) rem16u#29 (word) rem16u#27 (word) rem16u#24 (word) rem16u#21 (word) rem16u#8 Alias (signed byte) sin8u_table::sinx#0 = (signed byte~) sin8u_table::$18 (signed byte) sin8u_table::sinx#4 (signed byte) sin8u_table::sinx#3 (signed byte) sin8u_table::sinx#2 (signed byte) sin8u_table::sinx#1 Alias (byte) mul8su::b#0 = (byte/signed word/word/dword/signed dword~) sin8u_table::$19 Alias (signed word) mul8su::return#2 = (signed word) mul8su::return#4 @@ -4737,19 +4616,15 @@ Alias (byte*) print_char_cursor#43 = (byte*) print_char_cursor#87 (byte*) print_ Alias (word) sin8u_table::x#1 = (word~) sin8u_table::$32 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#22 Alias (byte*) print_char_cursor#45 = (byte*) print_char_cursor#89 -Alias (word) rem16u#17 = (word) rem16u#9 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: div16u::dividend#1 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#1 div16u::divisor#0 -Not aliassing across scopes: rem16u#18 rem16u#20 Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#1 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#1 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 -Not aliassing across scopes: rem16u#11 rem16u#1 Not aliassing across scopes: div16u::return#0 divr16u::return#2 Not aliassing across scopes: mul8u::b#2 mul8u::b#0 Not aliassing across scopes: mul8u::a#6 mul8u::a#1 @@ -4812,25 +4687,21 @@ Not aliassing across scopes: print_cls::sc#0 print_screen#1 Not aliassing across scopes: print_screen#4 print_line_cursor#0 Not aliassing across scopes: print_line_cursor#24 print_line_cursor#0 Not aliassing across scopes: print_char_cursor#98 print_line_cursor#0 -Not aliassing across scopes: rem16u#19 rem16u#0 Not aliassing across scopes: print_line_cursor#16 print_line_cursor#15 Not aliassing across scopes: print_char_cursor#21 print_line_cursor#15 Not aliassing across scopes: sin8u_table::sintab#0 main::sintab#0 Not aliassing across scopes: sin8u_table::tabsize#0 main::tabsize#0 -Not aliassing across scopes: rem16u#13 rem16u#16 Not aliassing across scopes: print_char_cursor#22 print_char_cursor#43 Not aliassing across scopes: print_line_cursor#17 print_line_cursor#10 Not aliassing across scopes: sin8u_table::max#1 sin8u_table::max#0 Not aliassing across scopes: sin8u_table::min#1 sin8u_table::min#0 Not aliassing across scopes: sin8u_table::tabsize#1 sin8u_table::tabsize#0 -Not aliassing across scopes: rem16u#20 rem16u#19 Not aliassing across scopes: print_char_cursor#105 print_char_cursor#21 Not aliassing across scopes: print_line_cursor#25 print_line_cursor#16 Not aliassing across scopes: sin8u_table::sintab#11 sin8u_table::sintab#0 Not aliassing across scopes: div16u::dividend#0 PI2_u4f12#0 Not aliassing across scopes: div16u::divisor#0 sin8u_table::tabsize#1 Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: rem16u#15 rem16u#11 Not aliassing across scopes: sin8u_table::step#0 div16u::return#2 Not aliassing across scopes: print_char_cursor#24 print_char_cursor#2 Not aliassing across scopes: print_word::w#1 sin8u_table::step#0 @@ -4871,7 +4742,6 @@ Not aliassing across scopes: print_line_cursor#10 print_line_cursor#1 Not aliassing across scopes: print_char_cursor#43 print_line_cursor#1 Not aliassing across scopes: print_line_cursor#11 print_line_cursor#17 Not aliassing across scopes: print_char_cursor#45 print_char_cursor#22 -Not aliassing across scopes: rem16u#17 rem16u#13 Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#3 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#3 (word) divr16u::divisor#6 @@ -4881,17 +4751,14 @@ Alias (byte) mul8u::a#3 = (byte) mul8u::a#5 Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 Alias (byte) sin8s::isUpper#10 = (byte) sin8s::isUpper#3 (byte) sin8s::isUpper#2 Succesful SSA optimization Pass2AliasElimination -Not aliassing across scopes: divr16u::rem#9 divr16u::rem#3 +Not aliassing across scopes: divr16u::rem#8 divr16u::rem#3 Not aliassing across scopes: divr16u::dividend#4 divr16u::dividend#1 Not aliassing across scopes: divr16u::divisor#5 divr16u::divisor#0 -Not aliassing across scopes: rem16u#1 divr16u::rem#10 Not aliassing across scopes: div16u::dividend#1 div16u::dividend#0 Not aliassing across scopes: div16u::divisor#1 div16u::divisor#0 -Not aliassing across scopes: rem16u#18 rem16u#20 Not aliassing across scopes: divr16u::dividend#1 div16u::dividend#1 Not aliassing across scopes: divr16u::divisor#0 div16u::divisor#1 Not aliassing across scopes: divr16u::return#2 divr16u::return#0 -Not aliassing across scopes: rem16u#11 rem16u#1 Not aliassing across scopes: div16u::return#0 divr16u::return#2 Not aliassing across scopes: mul8u::b#2 mul8u::b#0 Not aliassing across scopes: mul8u::a#6 mul8u::a#1 @@ -4954,25 +4821,21 @@ Not aliassing across scopes: print_cls::sc#0 print_screen#1 Not aliassing across scopes: print_screen#4 print_line_cursor#0 Not aliassing across scopes: print_line_cursor#24 print_line_cursor#0 Not aliassing across scopes: print_char_cursor#98 print_line_cursor#0 -Not aliassing across scopes: rem16u#19 rem16u#0 Not aliassing across scopes: print_line_cursor#16 print_line_cursor#15 Not aliassing across scopes: print_char_cursor#21 print_line_cursor#15 Not aliassing across scopes: sin8u_table::sintab#0 main::sintab#0 Not aliassing across scopes: sin8u_table::tabsize#0 main::tabsize#0 -Not aliassing across scopes: rem16u#13 rem16u#16 Not aliassing across scopes: print_char_cursor#22 print_char_cursor#43 Not aliassing across scopes: print_line_cursor#17 print_line_cursor#10 Not aliassing across scopes: sin8u_table::max#1 sin8u_table::max#0 Not aliassing across scopes: sin8u_table::min#1 sin8u_table::min#0 Not aliassing across scopes: sin8u_table::tabsize#1 sin8u_table::tabsize#0 -Not aliassing across scopes: rem16u#20 rem16u#19 Not aliassing across scopes: print_char_cursor#105 print_char_cursor#21 Not aliassing across scopes: print_line_cursor#25 print_line_cursor#16 Not aliassing across scopes: sin8u_table::sintab#11 sin8u_table::sintab#0 Not aliassing across scopes: div16u::dividend#0 PI2_u4f12#0 Not aliassing across scopes: div16u::divisor#0 sin8u_table::tabsize#1 Not aliassing across scopes: div16u::return#2 div16u::return#0 -Not aliassing across scopes: rem16u#15 rem16u#11 Not aliassing across scopes: sin8u_table::step#0 div16u::return#2 Not aliassing across scopes: print_char_cursor#24 print_char_cursor#2 Not aliassing across scopes: print_word::w#1 sin8u_table::step#0 @@ -5013,7 +4876,6 @@ Not aliassing across scopes: print_line_cursor#10 print_line_cursor#1 Not aliassing across scopes: print_char_cursor#43 print_line_cursor#1 Not aliassing across scopes: print_line_cursor#11 print_line_cursor#17 Not aliassing across scopes: print_char_cursor#45 print_char_cursor#22 -Not aliassing across scopes: rem16u#17 rem16u#13 Self Phi Eliminated (word) divr16u::divisor#1 Self Phi Eliminated (byte*) print_char_cursor#48 Self Phi Eliminated (byte*) print_line_cursor#15 @@ -5021,16 +4883,13 @@ Self Phi Eliminated (byte) sin8u_table::amplitude#10 Self Phi Eliminated (byte) sin8u_table::mid#12 Self Phi Eliminated (word) sin8u_table::step#10 Self Phi Eliminated (word) sin8u_table::tabsize#10 -Self Phi Eliminated (word) rem16u#16 Succesful SSA optimization Pass2SelfPhiElimination -Redundant Phi (word) divr16u::rem#9 (word) divr16u::rem#3 +Redundant Phi (word) divr16u::rem#8 (word) divr16u::rem#3 Redundant Phi (word) divr16u::dividend#4 (word) divr16u::dividend#1 Redundant Phi (word) divr16u::divisor#5 (word) divr16u::divisor#0 Redundant Phi (word) divr16u::divisor#1 (word) divr16u::divisor#5 Redundant Phi (word) div16u::dividend#1 (word) div16u::dividend#0 Redundant Phi (word) div16u::divisor#1 (word) div16u::divisor#0 -Redundant Phi (word) rem16u#18 (word) rem16u#20 -Redundant Phi (word) rem16u#11 (word) rem16u#1 Redundant Phi (signed byte) mul8su::a#1 (signed byte) mul8su::a#0 Redundant Phi (byte) mul8su::b#1 (byte) mul8su::b#0 Redundant Phi (word) sin8s::x#3 (word) sin8s::x#2 @@ -5052,20 +4911,16 @@ Redundant Phi (byte*) print_line_cursor#15 (byte*) print_screen#1 Redundant Phi (byte*) print_screen#4 (byte*) print_line_cursor#0 Redundant Phi (byte*) print_line_cursor#24 (byte*) print_line_cursor#0 Redundant Phi (byte*) print_char_cursor#98 (byte*) print_line_cursor#0 -Redundant Phi (word) rem16u#19 (word) rem16u#0 Redundant Phi (byte*) print_line_cursor#16 (byte*) print_line_cursor#15 Redundant Phi (byte*) print_char_cursor#21 (byte*) print_line_cursor#15 -Redundant Phi (word) rem16u#13 (word) rem16u#16 Redundant Phi (byte*) print_char_cursor#22 (byte*) print_char_cursor#43 Redundant Phi (byte*) print_line_cursor#17 (byte*) print_line_cursor#10 Redundant Phi (byte) sin8u_table::max#1 (byte) sin8u_table::max#0 Redundant Phi (byte) sin8u_table::min#1 (byte) sin8u_table::min#0 Redundant Phi (word) sin8u_table::tabsize#1 (word) sin8u_table::tabsize#0 -Redundant Phi (word) rem16u#20 (word) rem16u#19 Redundant Phi (byte*) print_char_cursor#105 (byte*) print_char_cursor#21 Redundant Phi (byte*) print_line_cursor#25 (byte*) print_line_cursor#16 Redundant Phi (byte*) sin8u_table::sintab#11 (byte*) sin8u_table::sintab#0 -Redundant Phi (word) rem16u#15 (word) rem16u#11 Redundant Phi (byte*) print_char_cursor#24 (byte*) print_char_cursor#2 Redundant Phi (byte*) print_char_cursor#25 (byte*) print_char_cursor#12 Redundant Phi (byte*) print_char_cursor#26 (byte*) print_char_cursor#2 @@ -5082,7 +4937,6 @@ Redundant Phi (byte) sin8u_table::amplitude#10 (byte) sin8u_table::amplitude#0 Redundant Phi (byte) sin8u_table::mid#12 (byte) sin8u_table::mid#0 Redundant Phi (word) sin8u_table::step#10 (word) sin8u_table::step#0 Redundant Phi (word) sin8u_table::tabsize#10 (word) sin8u_table::tabsize#1 -Redundant Phi (word) rem16u#16 (word) rem16u#15 Redundant Phi (byte*) print_char_cursor#35 (byte*) print_char_cursor#2 Redundant Phi (byte*) print_char_cursor#36 (byte*) print_char_cursor#12 Redundant Phi (byte*) print_char_cursor#37 (byte*) print_char_cursor#2 @@ -5095,7 +4949,6 @@ Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#43 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#17 Redundant Phi (byte*) print_char_cursor#45 (byte*) print_char_cursor#22 -Redundant Phi (word) rem16u#17 (word) rem16u#13 Succesful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#91 (byte*) print_char_cursor#17 Redundant Phi (byte*) print_char_cursor#100 (byte*) print_line_cursor#1 @@ -5118,7 +4971,6 @@ Simple Condition (bool~) print_sbyte::$1 if((signed byte) print_sbyte::b#1>=(byt Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) sin8u_table::$33 if((word) sin8u_table::i#1<(word) sin8u_table::tabsize#0) goto sin8u_table::@1 Succesful SSA optimization Pass2ConditionalJumpSimplification -Constant (const word) rem16u#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 Constant (const word) divr16u::rem#3 = 0 @@ -5182,9 +5034,6 @@ Constant (const byte) sin8u_table::mid#0 = ((byte))sin8u_table::$4 Succesful SSA optimization Pass2ConstantIdentification Constant (const byte) print_byte::b#6 = sin8u_table::mid#0 Succesful SSA optimization Pass2ConstantIdentification -Eliminating unused variable (word) rem16u#1 and assignment [15] (word) rem16u#1 ← (word) divr16u::rem#10 -Eliminating unused constant (const word) rem16u#0 -Succesful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (byte) mul8u::a#1 ← ((byte)) (signed byte) mul8su::a#0 Eliminating Noop Cast (signed word) mul8su::return#0 ← ((signed word)) (word) mul8su::m#2 Eliminating Noop Cast (signed byte) sin8s::sinx#0 ← ((signed byte)) (byte) sin8s::usinx#4 @@ -5194,7 +5043,6 @@ Eliminating Noop Cast (byte) print_byte::b#0 ← ((byte)) (signed byte) print_sb Succesful SSA optimization Pass2NopCastElimination Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 -Culled Empty Block (label) @2 Culled Empty Block (label) divr16u::@6 Culled Empty Block (label) mul8u::@3 Culled Empty Block (label) @13 @@ -5638,16 +5486,16 @@ Coalesced [235] sin8s::x#10 ← sin8s::x#4 Coalesced [236] sin8s::x#8 ← sin8s::x#2 Coalesced [240] mul8u::b#3 ← mul8u::b#1 Coalesced [241] mul8u::a#9 ← mul8u::a#2 -Coalesced [260] divr16u::rem#13 ← divr16u::rem#1 -Coalesced [267] divr16u::rem#15 ← divr16u::rem#2 +Coalesced [260] divr16u::rem#12 ← divr16u::rem#1 +Coalesced [267] divr16u::rem#14 ← divr16u::rem#2 Coalesced [268] divr16u::return#6 ← divr16u::quotient#2 -Coalesced [273] divr16u::rem#11 ← divr16u::rem#10 +Coalesced [273] divr16u::rem#10 ← divr16u::rem#9 Coalesced [274] divr16u::dividend#8 ← divr16u::dividend#0 Coalesced [275] divr16u::quotient#9 ← divr16u::return#0 Coalesced [276] divr16u::i#7 ← divr16u::i#1 -Coalesced [277] divr16u::rem#14 ← divr16u::rem#5 +Coalesced [277] divr16u::rem#13 ← divr16u::rem#5 Coalesced [278] divr16u::return#5 ← divr16u::quotient#1 -Coalesced [279] divr16u::rem#12 ← divr16u::rem#0 +Coalesced [279] divr16u::rem#11 ← divr16u::rem#0 Coalesced [286] print_cls::sc#3 ← print_cls::sc#1 Coalesced down to 28 phi equivalence classes Culled Empty Block (label) sin8u_table::@26 @@ -6134,7 +5982,7 @@ divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 [194] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [194] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [194] (word) divr16u::dividend#2 ← phi( divr16u/(const word) PI2_u4f12#0 divr16u::@3/(word) divr16u::dividend#0 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) - [194] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#10 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) + [194] (word) divr16u::rem#4 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::rem#9 ) [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::rem#4 divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 ] ) [195] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) [196] (byte~) divr16u::$1 ← > (word) divr16u::dividend#2 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$1 ] ) [197] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 divr16u::$2 ] ) @@ -6154,10 +6002,10 @@ divr16u::@5: scope:[divr16u] from divr16u::@2 [205] (word) divr16u::rem#2 ← (word) divr16u::rem#5 - (const word) main::tabsize#0 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::i#2 divr16u::dividend#0 divr16u::quotient#2 divr16u::rem#2 ] ) to:divr16u::@3 divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5 - [206] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ) - [206] (word) divr16u::rem#10 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::i#2 divr16u::rem#10 divr16u::dividend#0 ] ) - [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) - [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) + [206] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [206] (word) divr16u::rem#9 ← phi( divr16u::@2/(word) divr16u::rem#5 divr16u::@5/(word) divr16u::rem#2 ) [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::i#2 divr16u::rem#9 divr16u::dividend#0 ] ) + [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) + [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) to:divr16u::@return divr16u::@return: scope:[divr16u] from divr16u::@3 [209] return [ divr16u::return#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 ] ) @@ -6355,10 +6203,10 @@ VARIABLE REGISTER WEIGHTS (word) divr16u::rem (word) divr16u::rem#0 8.25 (word) divr16u::rem#1 22.0 -(word) divr16u::rem#10 11.0 (word) divr16u::rem#2 22.0 (word) divr16u::rem#4 22.0 (word) divr16u::rem#5 11.0 +(word) divr16u::rem#9 11.0 (word) divr16u::return (word) divr16u::return#0 7.000000000000001 (word) divr16u::return#2 4.0 @@ -6481,7 +6329,6 @@ VARIABLE REGISTER WEIGHTS (word) print_word::w#2 22.0 (word) print_word::w#3 6.333333333333334 (word~) print_word::w#5 4.0 -(word) rem16u (signed byte()) sin8s((word) sin8s::x) (word~) sin8s::$6 4.0 (byte) sin8s::DIV_6 @@ -6568,7 +6415,7 @@ Initial phi equivalence classes [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] [ mulu8_sel::select#5 ] -[ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#2 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] @@ -6634,7 +6481,7 @@ Complete equivalence classes [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] [ mulu8_sel::select#5 ] -[ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +[ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] [ divr16u::dividend#2 divr16u::dividend#0 ] [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] [ divr16u::i#2 divr16u::i#1 ] @@ -6699,7 +6546,7 @@ Allocated zp ZP_BYTE:33 [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] Allocated zp ZP_BYTE:34 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] Allocated zp ZP_BYTE:35 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] Allocated zp ZP_BYTE:36 [ mulu8_sel::select#5 ] -Allocated zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] +Allocated zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] Allocated zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] Allocated zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] Allocated zp ZP_BYTE:43 [ divr16u::i#2 divr16u::i#1 ] @@ -8022,7 +7869,7 @@ divr16u: { //SEG418 [194] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy //SEG419 [194] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy //SEG420 [194] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG421 [194] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG421 [194] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 //SEG422 divr16u::@1 b1: @@ -8088,13 +7935,13 @@ divr16u: { b3_from_b2: b3_from_b5: //SEG439 [206] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG440 [206] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG440 [206] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 //SEG441 divr16u::@3 b3: - //SEG442 [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 + //SEG442 [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1=_inc_vbuz1 inc i - //SEG443 [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 + //SEG443 [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuz1_neq_vbuc1_then_la1 lda i cmp #$10 bne b1_from_b3 @@ -8297,7 +8144,7 @@ Potential registers zp ZP_BYTE:33 [ sin8s::return#0 sin8s::return#5 sin8s::sinx# Potential registers zp ZP_BYTE:34 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] : zp ZP_BYTE:34 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:35 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] : zp ZP_BYTE:35 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:36 [ mulu8_sel::select#5 ] : zp ZP_BYTE:36 , reg byte x , reg byte y , -Potential registers zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:37 , +Potential registers zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] : zp ZP_WORD:37 , Potential registers zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] : zp ZP_WORD:39 , Potential registers zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] : zp ZP_WORD:41 , Potential registers zp ZP_BYTE:43 [ divr16u::i#2 divr16u::i#1 ] : zp ZP_BYTE:43 , reg byte x , reg byte y , @@ -8344,7 +8191,7 @@ REGISTER UPLIFT SCOPES Uplift Scope [mul8u] 346.86: zp ZP_WORD:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 249.57: zp ZP_WORD:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 202: zp ZP_BYTE:65 [ mul8u::$1 ] 177.67: zp ZP_BYTE:24 [ mul8u::a#3 mul8u::a#6 mul8u::a#8 mul8u::a#2 mul8u::a#0 ] 8: zp ZP_BYTE:23 [ mul8u::b#2 mul8u::b#1 ] 4: zp ZP_WORD:61 [ mul8u::return#2 ] 4: zp ZP_WORD:81 [ mul8u::return#3 ] Uplift Scope [] 225.55: zp ZP_WORD:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] 223.48: zp ZP_WORD:16 [ print_char_cursor#92 print_char_cursor#102 print_char_cursor#62 print_char_cursor#97 print_char_cursor#94 print_char_cursor#96 print_char_cursor#17 print_char_cursor#2 print_char_cursor#122 print_char_cursor#1 ] Uplift Scope [print_str] 305.5: zp ZP_WORD:12 [ print_str::str#10 print_str::str#12 print_str::str#0 ] -Uplift Scope [divr16u] 96.25: zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:92 [ divr16u::$1 ] 22: zp ZP_BYTE:93 [ divr16u::$2 ] 18.19: zp ZP_BYTE:43 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp ZP_WORD:88 [ divr16u::return#2 ] +Uplift Scope [divr16u] 96.25: zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] 37.25: zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] 22: zp ZP_BYTE:92 [ divr16u::$1 ] 22: zp ZP_BYTE:93 [ divr16u::$2 ] 18.19: zp ZP_BYTE:43 [ divr16u::i#2 divr16u::i#1 ] 7.46: zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] 4: zp ZP_WORD:88 [ divr16u::return#2 ] Uplift Scope [sin8s] 27.5: zp ZP_WORD:30 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 ] 22: zp ZP_BYTE:50 [ sin8s::return#2 ] 13: zp ZP_BYTE:33 [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] 10: zp ZP_BYTE:32 [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] 4: zp ZP_WORD:66 [ sin8s::$6 ] 4: zp ZP_BYTE:70 [ sin8s::x2#0 ] 4: zp ZP_BYTE:74 [ sin8s::x3_6#0 ] 4: zp ZP_BYTE:77 [ sin8s::x4#0 ] 4: zp ZP_BYTE:79 [ sin8s::x5#0 ] 4: zp ZP_BYTE:80 [ sin8s::x5_128#0 ] 1: zp ZP_BYTE:72 [ sin8s::x3#0 ] 0.64: zp ZP_BYTE:68 [ sin8s::x1#0 ] 0.33: zp ZP_BYTE:75 [ sin8s::usinx#0 ] 0.06: zp ZP_BYTE:29 [ sin8s::isUpper#10 ] Uplift Scope [mulu8_sel] 24: zp ZP_BYTE:34 [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] 21: zp ZP_BYTE:35 [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] 4: zp ZP_BYTE:69 [ mulu8_sel::return#0 ] 4: zp ZP_BYTE:71 [ mulu8_sel::return#1 ] 4: zp ZP_BYTE:73 [ mulu8_sel::return#2 ] 4: zp ZP_BYTE:76 [ mulu8_sel::return#10 ] 4: zp ZP_BYTE:78 [ mulu8_sel::return#11 ] 4: zp ZP_WORD:83 [ mulu8_sel::$0 ] 4: zp ZP_WORD:85 [ mulu8_sel::$1 ] 1.71: zp ZP_BYTE:87 [ mulu8_sel::return#12 ] 0.33: zp ZP_BYTE:36 [ mulu8_sel::select#5 ] Uplift Scope [sin8u_table] 22: zp ZP_BYTE:57 [ sin8u_table::$21 ] 17.19: zp ZP_WORD:6 [ sin8u_table::i#10 sin8u_table::i#1 ] 8.75: zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 ] 3.75: zp ZP_WORD:4 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] 2.2: zp ZP_BYTE:51 [ sin8u_table::sinx#0 ] 2.2: zp ZP_WORD:55 [ sin8u_table::sinx_sc#0 ] 1.94: zp ZP_BYTE:58 [ sin8u_table::sinx_tr#0 ] 0.27: zp ZP_WORD:48 [ sin8u_table::step#0 ] @@ -8362,7 +8209,7 @@ Uplift Scope [main] Uplifting [mul8u] best 24241 combination zp ZP_WORD:25 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:27 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte a [ mul8u::$1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#8 mul8u::a#2 mul8u::a#0 ] reg byte a [ mul8u::b#2 mul8u::b#1 ] zp ZP_WORD:61 [ mul8u::return#2 ] zp ZP_WORD:81 [ mul8u::return#3 ] Uplifting [] best 24241 combination zp ZP_WORD:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] zp ZP_WORD:16 [ print_char_cursor#92 print_char_cursor#102 print_char_cursor#62 print_char_cursor#97 print_char_cursor#94 print_char_cursor#96 print_char_cursor#17 print_char_cursor#2 print_char_cursor#122 print_char_cursor#1 ] Uplifting [print_str] best 24241 combination zp ZP_WORD:12 [ print_str::str#10 print_str::str#12 print_str::str#0 ] -Uplifting [divr16u] best 24051 combination zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:88 [ divr16u::return#2 ] +Uplifting [divr16u] best 24051 combination zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:88 [ divr16u::return#2 ] Uplifting [sin8s] best 23946 combination zp ZP_WORD:30 [ sin8s::x#6 sin8s::x#4 sin8s::x#2 sin8s::x#0 sin8s::x#1 ] reg byte a [ sin8s::return#2 ] reg byte a [ sin8s::return#0 sin8s::return#5 sin8s::sinx#1 ] reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ] zp ZP_WORD:66 [ sin8s::$6 ] zp ZP_BYTE:70 [ sin8s::x2#0 ] zp ZP_BYTE:74 [ sin8s::x3_6#0 ] zp ZP_BYTE:77 [ sin8s::x4#0 ] zp ZP_BYTE:79 [ sin8s::x5#0 ] zp ZP_BYTE:80 [ sin8s::x5_128#0 ] zp ZP_BYTE:72 [ sin8s::x3#0 ] zp ZP_BYTE:68 [ sin8s::x1#0 ] zp ZP_BYTE:75 [ sin8s::usinx#0 ] zp ZP_BYTE:29 [ sin8s::isUpper#10 ] Limited combination testing to 100 combinations of 5308416 possible. Uplifting [mulu8_sel] best 23900 combination reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ] reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ] reg byte a [ mulu8_sel::return#0 ] reg byte a [ mulu8_sel::return#1 ] zp ZP_BYTE:73 [ mulu8_sel::return#2 ] zp ZP_BYTE:76 [ mulu8_sel::return#10 ] zp ZP_BYTE:78 [ mulu8_sel::return#11 ] zp ZP_WORD:83 [ mulu8_sel::$0 ] zp ZP_WORD:85 [ mulu8_sel::$1 ] zp ZP_BYTE:87 [ mulu8_sel::return#12 ] zp ZP_BYTE:36 [ mulu8_sel::select#5 ] @@ -8426,8 +8273,8 @@ Coalescing zero page register with common assignment [ zp ZP_WORD:21 [ mul8su::m Coalescing zero page register with common assignment [ zp ZP_WORD:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 mul8su::return#2 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 ] ] with [ zp ZP_WORD:55 [ sin8u_table::sinx_sc#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:41 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 ] ] with [ zp ZP_WORD:46 [ div16u::return#2 sin8u_table::step#0 div16u::return#0 ] ] - score: 1 Coalescing zero page register with common assignment [ zp ZP_WORD:21 [ mul8su::m#2 mul8su::m#1 mul8su::m#0 mul8su::return#2 mul8u::return#2 mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#3 sin8u_table::sinx_sc#0 ] ] with [ zp ZP_WORD:83 [ mulu8_sel::$0 mulu8_sel::$1 ] ] - score: 1 -Coalescing zero page register [ zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 ] ] with [ zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] -Coalescing zero page register [ zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:44 [ print_cls::sc#2 print_cls::sc#1 ] ] +Coalescing zero page register [ zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 ] ] with [ zp ZP_WORD:37 [ divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] +Coalescing zero page register [ zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp ZP_WORD:44 [ print_cls::sc#2 print_cls::sc#1 ] ] Coalescing zero page register [ zp ZP_WORD:4 [ sin8u_table::sintab#2 sin8u_table::sintab#1 ] ] with [ zp ZP_WORD:39 [ divr16u::dividend#2 divr16u::dividend#0 ] ] Coalescing zero page register [ zp ZP_BYTE:10 [ print_byte::b#8 print_byte::b#10 print_byte::b#1 print_byte::b#2 print_byte::b#7 print_sbyte::b#3 print_sbyte::b#1 print_sbyte::b#0 ] ] with [ zp ZP_BYTE:29 [ sin8s::isUpper#10 ] ] Coalescing zero page register [ zp ZP_WORD:12 [ print_str::str#10 print_str::str#12 print_str::str#0 ] ] with [ zp ZP_WORD:14 [ print_sword::w#3 print_sword::w#1 print_sword::w#0 print_word::w#3 print_word::w#5 print_word::w#2 print_word::w#1 ] ] @@ -9596,7 +9443,7 @@ divr16u: { //SEG418 [194] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy //SEG419 [194] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy //SEG420 [194] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG421 [194] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG421 [194] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy jmp b1 //SEG422 divr16u::@1 b1: @@ -9659,13 +9506,13 @@ divr16u: { b3_from_b2: b3_from_b5: //SEG439 [206] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG440 [206] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG440 [206] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy jmp b3 //SEG441 divr16u::@3 b3: - //SEG442 [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG442 [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG443 [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG443 [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1_from_b3 jmp breturn @@ -10033,10 +9880,10 @@ FINAL SYMBOL TABLE (word) divr16u::rem (word) divr16u::rem#0 rem zp ZP_WORD:2 8.25 (word) divr16u::rem#1 rem zp ZP_WORD:2 22.0 -(word) divr16u::rem#10 rem zp ZP_WORD:2 11.0 (word) divr16u::rem#2 rem zp ZP_WORD:2 22.0 (word) divr16u::rem#4 rem zp ZP_WORD:2 22.0 (word) divr16u::rem#5 rem zp ZP_WORD:2 11.0 +(word) divr16u::rem#9 rem zp ZP_WORD:2 11.0 (word) divr16u::return (word) divr16u::return#0 return zp ZP_WORD:18 7.000000000000001 (word) divr16u::return#2 return zp ZP_WORD:18 4.0 @@ -10196,7 +10043,6 @@ FINAL SYMBOL TABLE (word) print_word::w#2 w zp ZP_WORD:11 22.0 (word) print_word::w#3 w zp ZP_WORD:11 6.333333333333334 (word~) print_word::w#5 w zp ZP_WORD:11 4.0 -(word) rem16u (signed byte()) sin8s((word) sin8s::x) (word~) sin8s::$6 $6 zp ZP_WORD:11 4.0 (label) sin8s::@1 @@ -10313,7 +10159,7 @@ FINAL SYMBOL TABLE (word) sin8u_table::x#1 x zp ZP_WORD:2 7.333333333333333 (word) sin8u_table::x#10 x zp ZP_WORD:2 1.4193548387096775 -zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 print_cls::sc#2 print_cls::sc#1 ] zp ZP_WORD:4 [ sin8u_table::sintab#2 sin8u_table::sintab#1 divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:6 [ sin8u_table::i#10 sin8u_table::i#1 ] zp ZP_WORD:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ] @@ -11296,7 +11142,7 @@ divr16u: { //SEG418 [194] phi (byte) divr16u::i#2 = (byte) divr16u::i#1 [phi:divr16u::@3->divr16u::@1#0] -- register_copy //SEG419 [194] phi (word) divr16u::quotient#3 = (word) divr16u::return#0 [phi:divr16u::@3->divr16u::@1#1] -- register_copy //SEG420 [194] phi (word) divr16u::dividend#2 = (word) divr16u::dividend#0 [phi:divr16u::@3->divr16u::@1#2] -- register_copy - //SEG421 [194] phi (word) divr16u::rem#4 = (word) divr16u::rem#10 [phi:divr16u::@3->divr16u::@1#3] -- register_copy + //SEG421 [194] phi (word) divr16u::rem#4 = (word) divr16u::rem#9 [phi:divr16u::@3->divr16u::@1#3] -- register_copy //SEG422 divr16u::@1 b1: //SEG423 [195] (word) divr16u::rem#0 ← (word) divr16u::rem#4 << (byte/signed byte/word/signed word/dword/signed dword) 1 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::dividend#2 divr16u::quotient#3 divr16u::i#2 divr16u::rem#0 ] ) -- vwuz1=vwuz1_rol_1 @@ -11349,12 +11195,12 @@ divr16u: { sta rem+1 //SEG438 [206] phi from divr16u::@2 divr16u::@5 to divr16u::@3 [phi:divr16u::@2/divr16u::@5->divr16u::@3] //SEG439 [206] phi (word) divr16u::return#0 = (word) divr16u::quotient#1 [phi:divr16u::@2/divr16u::@5->divr16u::@3#0] -- register_copy - //SEG440 [206] phi (word) divr16u::rem#10 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy + //SEG440 [206] phi (word) divr16u::rem#9 = (word) divr16u::rem#5 [phi:divr16u::@2/divr16u::@5->divr16u::@3#1] -- register_copy //SEG441 divr16u::@3 b3: - //SEG442 [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx + //SEG442 [207] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx=_inc_vbuxx inx - //SEG443 [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#10 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 + //SEG443 [208] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ( main:2::sin8u_table:7::div16u:10::divr16u:189 [ divr16u::return#0 divr16u::rem#9 divr16u::dividend#0 divr16u::i#1 ] ) -- vbuxx_neq_vbuc1_then_la1 cpx #$10 bne b1 //SEG444 divr16u::@return diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.sym b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.sym index c5359d0d2..9faa61edd 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.sym +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgenscale8.sym @@ -38,10 +38,10 @@ (word) divr16u::rem (word) divr16u::rem#0 rem zp ZP_WORD:2 8.25 (word) divr16u::rem#1 rem zp ZP_WORD:2 22.0 -(word) divr16u::rem#10 rem zp ZP_WORD:2 11.0 (word) divr16u::rem#2 rem zp ZP_WORD:2 22.0 (word) divr16u::rem#4 rem zp ZP_WORD:2 22.0 (word) divr16u::rem#5 rem zp ZP_WORD:2 11.0 +(word) divr16u::rem#9 rem zp ZP_WORD:2 11.0 (word) divr16u::return (word) divr16u::return#0 return zp ZP_WORD:18 7.000000000000001 (word) divr16u::return#2 return zp ZP_WORD:18 4.0 @@ -201,7 +201,6 @@ (word) print_word::w#2 w zp ZP_WORD:11 22.0 (word) print_word::w#3 w zp ZP_WORD:11 6.333333333333334 (word~) print_word::w#5 w zp ZP_WORD:11 4.0 -(word) rem16u (signed byte()) sin8s((word) sin8s::x) (word~) sin8s::$6 $6 zp ZP_WORD:11 4.0 (label) sin8s::@1 @@ -318,7 +317,7 @@ (word) sin8u_table::x#1 x zp ZP_WORD:2 7.333333333333333 (word) sin8u_table::x#10 x zp ZP_WORD:2 1.4193548387096775 -zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 divr16u::rem#4 divr16u::rem#10 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 print_cls::sc#2 print_cls::sc#1 ] +zp ZP_WORD:2 [ sin8u_table::x#10 sin8u_table::x#1 divr16u::rem#4 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 print_cls::sc#2 print_cls::sc#1 ] zp ZP_WORD:4 [ sin8u_table::sintab#2 sin8u_table::sintab#1 divr16u::dividend#2 divr16u::dividend#0 ] zp ZP_WORD:6 [ sin8u_table::i#10 sin8u_table::i#1 ] zp ZP_WORD:8 [ print_line_cursor#12 print_line_cursor#23 print_line_cursor#1 ]