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)
- *
*/
+ * 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 ]