mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-16 03:31:42 +00:00
Refactored ReferenceInfos to use a more abstract model of references to variables/constants.
This commit is contained in:
parent
4b4c6f5364
commit
99085f1351
src
main/java/dk/camelot64/kickc
test/java/dk/camelot64/kickc/test/ref
emptyblock-error.asmemptyblock-error.cfgemptyblock-error.logemptyblock-error.symimmzero.asmimmzero.cfgimmzero.logimmzero.symline-anim.asmline-anim.cfgline-anim.logline-anim.symliverange-call-problem.asmliverange-call-problem.cfgliverange-call-problem.logliverange-call-problem.symloopsplit.asmloopsplit.cfgloopsplit.logloopsplit.symmodglobal.asmmodglobal.cfgmodglobal.logmodglobal.symptrtest.asmptrtest.cfgptrtest.logptrtest.symsinusgen8.cfgsinusgen8.logsinusgen8.symsinusgenscale8.cfgsinusgenscale8.logsinusgenscale8.sym
@ -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();
|
||||
|
@ -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 .
|
||||
* <ul>
|
||||
* <li><i>Defined</i> means the variable/constant receives its value in a specific statement (or symbol for named constants) </li>
|
||||
* <li><i>Used</i> means the value of the variable/constant is used in a specific statement (or symbol for named constants) </li>
|
||||
* <li><i>Referenced</i> means the variable/constant is either defined or referenced in a specific statement (or symbol for named constants) </li>
|
||||
* </ul>*/
|
||||
* <li><i>Defined</i> means the variable/constant receives its value in a specific statement (or symbol for named constants) </li>
|
||||
* <li><i>Used</i> means the value of the variable/constant is used in a specific statement (or symbol for named constants) </li>
|
||||
* <li><i>Referenced</i> means the variable/constant is either defined or referenced in a specific statement (or symbol for named constants) </li>
|
||||
* </ul>
|
||||
*/
|
||||
public class VariableReferenceInfos {
|
||||
|
||||
/** Variables referenced in each block. */
|
||||
@ -31,37 +30,113 @@ public class VariableReferenceInfos {
|
||||
/** Variables defined in each statement. */
|
||||
private Map<Integer, Collection<VariableRef>> stmtDefinedVars;
|
||||
|
||||
/** The statement defining each variable. */
|
||||
private Map<VariableRef, Integer> varDefineStmt;
|
||||
/** All references to symbol variables (constants/variables). References can be either statements or symbols in the symbol table */
|
||||
private Map<SymbolVariableRef, Collection<ReferenceToSymbolVar>> symbolVarReferences;
|
||||
|
||||
/** All statements referencing each variable . */
|
||||
private Map<VariableRef, Collection<Integer>> 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<ConstantRef, Collection<Integer>> constRefStmts;
|
||||
enum ReferenceType {USE, DEFINE}
|
||||
|
||||
/** All constants referencing another constant. (maps from a constant to all constants using it in their value) */
|
||||
private Map<ConstantRef, Collection<ConstantRef>> 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<LabelRef, Collection<VariableRef>> blockReferencedVars,
|
||||
Map<LabelRef, Collection<VariableRef>> blockUsedVars,
|
||||
Map<Integer, Collection<VariableRef>> stmtReferencedVars,
|
||||
Map<Integer, Collection<VariableRef>> stmtDefinedVars,
|
||||
Map<VariableRef, Integer> varDefineStmt,
|
||||
Map<VariableRef, Collection<Integer>> varRefStmts,
|
||||
Map<ConstantRef, Collection<Integer>> constRefStmts,
|
||||
Map<ConstantRef, Collection<ConstantRef>> constRefConsts
|
||||
Map<SymbolVariableRef, Collection<ReferenceToSymbolVar>> 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<Integer> 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<Integer> constStmts = this.constRefStmts.get(constRef);
|
||||
Collection<ConstantRef> 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<ReferenceToSymbolVar> 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<Integer> getConstRefStatements(ConstantRef constRef) {
|
||||
return constRefStmts.get(constRef);
|
||||
Collection<ReferenceToSymbolVar> refs = symbolVarReferences.get(constRef);
|
||||
LinkedHashSet<Integer> 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<ConstantRef> getConstRefConsts(ConstantRef constRef) {
|
||||
return constRefConsts.get(constRef);
|
||||
Collection<ReferenceToSymbolVar> refs = symbolVarReferences.get(constRef);
|
||||
LinkedHashSet<ConstantRef> 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -74,9 +74,7 @@ public class PassNVariableReferenceInfos extends Pass2Base {
|
||||
LinkedHashMap<LabelRef, Collection<VariableRef>> blockUsedVars = new LinkedHashMap<>();
|
||||
LinkedHashMap<Integer, Collection<VariableRef>> stmtReferenced = new LinkedHashMap<>();
|
||||
LinkedHashMap<Integer, Collection<VariableRef>> stmtDefined = new LinkedHashMap<>();
|
||||
LinkedHashMap<VariableRef, Integer> varDefineStmts = new LinkedHashMap<>();
|
||||
LinkedHashMap<VariableRef, Collection<Integer>> varRefStmts = new LinkedHashMap<>();
|
||||
LinkedHashMap<ConstantRef, Collection<Integer>> constStmts = new LinkedHashMap<>();
|
||||
Map<SymbolVariableRef, Collection<VariableReferenceInfos.ReferenceToSymbolVar>> 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<VariableReferenceInfos.ReferenceToSymbolVar> 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<Integer> stmts = varRefStmts.get(variableRef);
|
||||
if(stmts == null) {
|
||||
stmts = new LinkedHashSet<>();
|
||||
varRefStmts.put(variableRef, stmts);
|
||||
if(!defined.contains(variableRef)) {
|
||||
symbolVarReferences.putIfAbsent(variableRef, new ArrayList<>());
|
||||
Collection<VariableReferenceInfos.ReferenceToSymbolVar> 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<ConstantRef> referencedConsts = getReferencedConsts(statement);
|
||||
for(ConstantRef constantRef : referencedConsts) {
|
||||
Collection<Integer> stmts = constStmts.get(constantRef);
|
||||
if(stmts == null) {
|
||||
stmts = new LinkedHashSet<>();
|
||||
constStmts.put(constantRef, stmts);
|
||||
}
|
||||
stmts.add(statement.getIndex());
|
||||
symbolVarReferences.putIfAbsent(constantRef, new ArrayList<>());
|
||||
Collection<VariableReferenceInfos.ReferenceToSymbolVar> references = symbolVarReferences.get(constantRef);
|
||||
references.add(new VariableReferenceInfos.ReferenceInStatement(statement.getIndex(), VariableReferenceInfos.ReferenceToSymbolVar.ReferenceType.USE, constantRef));
|
||||
}
|
||||
}
|
||||
}
|
||||
// Gather constants referencing other constants
|
||||
LinkedHashMap<ConstantRef, Collection<ConstantRef>> constRefConsts = new LinkedHashMap<>();
|
||||
for(ConstantVar constantVar : getSymbols().getAllConstants(true)) {
|
||||
Collection<ConstantRef> referencedConsts = getReferencedConsts(constantVar.getValue());
|
||||
for(ConstantRef constantRef : referencedConsts) {
|
||||
Collection<ConstantRef> consts = constRefConsts.get(constantRef);
|
||||
if(consts == null) {
|
||||
consts = new LinkedHashSet<>();
|
||||
constRefConsts.put(constantRef, consts);
|
||||
}
|
||||
consts.add(constantVar.getRef());
|
||||
symbolVarReferences.putIfAbsent(constantRef, new ArrayList<>());
|
||||
Collection<VariableReferenceInfos.ReferenceToSymbolVar> 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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4,7 +4,6 @@
|
||||
.label B = $1000
|
||||
jsr main
|
||||
main: {
|
||||
lda #0
|
||||
b2:
|
||||
jsr menu
|
||||
jmp b2
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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 ]
|
||||
|
@ -4,10 +4,10 @@
|
||||
jsr main
|
||||
main: {
|
||||
.label w = 2
|
||||
lda #<0
|
||||
ldx #0
|
||||
txa
|
||||
sta w
|
||||
sta w+1
|
||||
tax
|
||||
b1:
|
||||
txa
|
||||
clc
|
||||
|
@ -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 [ ] )
|
||||
|
@ -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
|
||||
|
@ -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 ]
|
||||
|
@ -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 #<dividend
|
||||
@ -281,16 +271,7 @@ divr16s: {
|
||||
b4:
|
||||
jsr divr16u
|
||||
cpy #0
|
||||
beq b19
|
||||
sec
|
||||
lda divr16u.rem
|
||||
eor #$ff
|
||||
adc #0
|
||||
sta rem16s
|
||||
lda divr16u.rem+1
|
||||
eor #$ff
|
||||
adc #0
|
||||
sta rem16s+1
|
||||
beq breturn
|
||||
sec
|
||||
lda return
|
||||
eor #$ff
|
||||
@ -302,12 +283,6 @@ divr16s: {
|
||||
sta return+1
|
||||
breturn:
|
||||
rts
|
||||
b19:
|
||||
lda divr16u.rem
|
||||
sta rem16s
|
||||
lda divr16u.rem+1
|
||||
sta rem16s+1
|
||||
jmp breturn
|
||||
b3:
|
||||
sec
|
||||
lda _11
|
||||
@ -340,11 +315,11 @@ divr16s: {
|
||||
jmp b2
|
||||
}
|
||||
divr16u: {
|
||||
.label rem = 9
|
||||
.label rem = 7
|
||||
.label dividend = 3
|
||||
.label quotient = 5
|
||||
.label return = 5
|
||||
.label divisor = $b
|
||||
.label divisor = 9
|
||||
ldx #0
|
||||
txa
|
||||
sta quotient
|
||||
|
@ -38,21 +38,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 [ ] )
|
||||
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 ]
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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 ]
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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 ]
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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 ]
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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 ]
|
||||
|
@ -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 ] )
|
||||
|
File diff suppressed because one or more lines are too long
@ -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 ]
|
||||
|
@ -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 ] )
|
||||
|
@ -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
|
||||
|
@ -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 ]
|
||||
|
Loading…
x
Reference in New Issue
Block a user