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

Implemented late constant resolving for array lengths allowing the use of any constant expressions in the first/last values. The length inside the SymbolType still needs to be fixed - so a few tests currently fail.

This commit is contained in:
Jesper Gravgaard 2018-07-21 18:13:32 +09:00
parent ac9ba0065c
commit 3328a570c6
171 changed files with 3561 additions and 1837 deletions

View File

@ -120,7 +120,6 @@ public class Compiler {
new Pass1FixLValuesLoHi(program).execute(); new Pass1FixLValuesLoHi(program).execute();
new Pass1AssertNoLValueIntermediate(program).execute(); new Pass1AssertNoLValueIntermediate(program).execute();
new Pass1AddTypePromotions(program).execute(); new Pass1AddTypePromotions(program).execute();
new Pass1AssertArrayLengths(program).execute();
new Pass1AssertNoRecursion(program).execute(); new Pass1AssertNoRecursion(program).execute();
getLog().append("INITIAL CONTROL FLOW GRAPH"); getLog().append("INITIAL CONTROL FLOW GRAPH");
@ -241,6 +240,7 @@ public class Compiler {
private void pass3Analysis() { private void pass3Analysis() {
new Pass3AssertRValues(program).check(); new Pass3AssertRValues(program).check();
new Pass3AssertArrayLengths(program).check();
new Pass3AssertNoMulDivMod(program).check(); new Pass3AssertNoMulDivMod(program).check();
new Pass3BlockSequencePlanner(program).plan(); new Pass3BlockSequencePlanner(program).plan();
// Phi lifting ensures that all variables in phi-blocks are in different live range equivalence classes // Phi lifting ensures that all variables in phi-blocks are in different live range equivalence classes

View File

@ -1,20 +1,20 @@
package dk.camelot64.kickc.asm; package dk.camelot64.kickc.asm;
import dk.camelot64.kickc.fragment.AsmFormat;
/** A labelled numeric data directive. */ /** A labelled numeric data directive. */
public class AsmDataFill implements AsmLine { public class AsmDataFill implements AsmLine {
private String label; private String label;
private AsmDataNumeric.Type type; private AsmDataNumeric.Type type;
private String sizeAsm;
private int size; private int size;
private String fillValue; private String fillValue;
private int index; private int index;
public AsmDataFill(String label, AsmDataNumeric.Type type, int size, String fillValue) { public AsmDataFill(String label, AsmDataNumeric.Type type, String sizeAsm, int size, String fillValue) {
this.label = label; this.label = label;
this.type = type; this.type = type;
this.sizeAsm = sizeAsm;
this.size = size; this.size = size;
this.fillValue = fillValue; this.fillValue = fillValue;
} }
@ -38,7 +38,7 @@ public class AsmDataFill implements AsmLine {
StringBuilder asm = new StringBuilder(); StringBuilder asm = new StringBuilder();
asm.append(label + ": "); asm.append(label + ": ");
asm.append(".fill "); asm.append(".fill ");
asm.append(AsmFormat.getAsmNumber(size * type.bytes)); asm.append(sizeAsm);
asm.append(", "); asm.append(", ");
asm.append(fillValue); asm.append(fillValue);
return asm.toString(); return asm.toString();

View File

@ -108,8 +108,8 @@ public class AsmProgram {
* @param type The type of the data * @param type The type of the data
* @param size The size of data to fill * @param size The size of data to fill
*/ */
public void addDataFilled(String label, AsmDataNumeric.Type type, int size, String fillValue) { public void addDataFilled(String label, AsmDataNumeric.Type type, String sizeAsm, int size, String fillValue) {
addLine(new AsmDataFill(label, type, size, fillValue)); addLine(new AsmDataFill(label, type, sizeAsm, size, fillValue));
} }
/** /**

View File

@ -0,0 +1,6 @@
lda {z1}+1
cmp #>{c1}
bne {la1}
lda {z1}
cmp #<{c1}
bne {la1}

View File

@ -1,16 +1,16 @@
package dk.camelot64.kickc.model.types; package dk.camelot64.kickc.model.types;
import dk.camelot64.kickc.model.values.RValue;
/** /**
* A fixed size array of another type * A fixed size array of another type
*/ */
public class SymbolTypeArray extends SymbolTypePointer { public class SymbolTypeArray extends SymbolTypePointer {
/** /** The fixed size of the array. Can be null, if the size is not bound. (It will be constant before the compilation is done) */
* The fixed size of the array. Can by null, if the type is not known yet. (It will be constant before the compilation is done) private RValue size;
*/
private Integer size;
public SymbolTypeArray(SymbolType elementType, Integer size) { public SymbolTypeArray(SymbolType elementType, RValue size) {
super(elementType); super(elementType);
this.size = size; this.size = size;
} }
@ -20,11 +20,11 @@ public class SymbolTypeArray extends SymbolTypePointer {
this.size = null; this.size = null;
} }
public Integer getSize() { public RValue getSize() {
return size; return size;
} }
public void setSize(Integer size) { public void setSize(RValue size) {
this.size = size; this.size = size;
} }
@ -32,9 +32,9 @@ public class SymbolTypeArray extends SymbolTypePointer {
public String getTypeName() { public String getTypeName() {
SymbolType elementType = getElementType(); SymbolType elementType = getElementType();
if(elementType instanceof SymbolTypeMulti) { if(elementType instanceof SymbolTypeMulti) {
return "(" + elementType.getTypeName() + ")" + "[" + (size == null ? "" : size) + "]"; return "(" + elementType.getTypeName() + ")" + "[" + (size == null ? "" : size.toString()) + "]";
} else { } else {
return elementType.getTypeName() + "[" + (size == null ? "" : size) + "]"; return elementType.getTypeName() + "[" + (size == null ? "" : size.toString()) + "]";
} }
} }
@ -43,9 +43,7 @@ public class SymbolTypeArray extends SymbolTypePointer {
if(this == o) return true; if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false; if(o == null || getClass() != o.getClass()) return false;
if(!super.equals(o)) return false; if(!super.equals(o)) return false;
SymbolTypeArray that = (SymbolTypeArray) o; SymbolTypeArray that = (SymbolTypeArray) o;
return size != null ? size.equals(that.size) : that.size == null; return size != null ? size.equals(that.size) : that.size == null;
} }
@ -60,4 +58,5 @@ public class SymbolTypeArray extends SymbolTypePointer {
public String toString() { public String toString() {
return getTypeName(); return getTypeName();
} }
} }

View File

@ -172,6 +172,8 @@ public class SymbolTypeInference {
} }
} else if(rValue instanceof ConstantArrayList) { } else if(rValue instanceof ConstantArrayList) {
return new SymbolTypeArray(((ConstantArrayList) rValue).getElementType()); return new SymbolTypeArray(((ConstantArrayList) rValue).getElementType());
} else if(rValue instanceof ArrayFilled) {
return new SymbolTypeArray(((ArrayFilled) rValue).getElementType(), ((ArrayFilled) rValue).getSize());
} else if(rValue instanceof ConstantArrayFilled) { } else if(rValue instanceof ConstantArrayFilled) {
return new SymbolTypeArray(((ConstantArrayFilled) rValue).getElementType(), ((ConstantArrayFilled) rValue).getSize()); return new SymbolTypeArray(((ConstantArrayFilled) rValue).getElementType(), ((ConstantArrayFilled) rValue).getSize());
} else if(rValue instanceof ConstantVarPointer) { } else if(rValue instanceof ConstantVarPointer) {

View File

@ -0,0 +1,47 @@
package dk.camelot64.kickc.model.values;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.types.SymbolType;
/**
* An zero-filled array. The size of the array is currently non-constant, but must be resolved to a constant before pass 3.
* The array is allocated in the code memory (as a .fill() ).
*/
public class ArrayFilled implements RValue {
private RValue size;
private SymbolType elementType;
public ArrayFilled(SymbolType elementType, RValue size) {
this.size = size;
this.elementType = elementType;
}
public SymbolType getElementType() {
return elementType;
}
public RValue getSize() {
return size;
}
public void setSize(RValue size) {
this.size = size;
}
@Override
public String toString() {
return toString(null);
}
@Override
public String toString(Program program) {
StringBuilder out = new StringBuilder();
out.append("{ fill( ");
out.append(size.toString());
out.append(", 0) }");
return out.toString();
}
}

View File

@ -10,11 +10,11 @@ import dk.camelot64.kickc.model.types.SymbolTypeArray;
*/ */
public class ConstantArrayFilled implements ConstantValue { public class ConstantArrayFilled implements ConstantValue {
private int size; private ConstantValue size;
private SymbolType elementType; private SymbolType elementType;
public ConstantArrayFilled(SymbolType elementType, int size) { public ConstantArrayFilled(SymbolType elementType, ConstantValue size) {
this.size = size; this.size = size;
this.elementType = elementType; this.elementType = elementType;
} }
@ -28,10 +28,14 @@ public class ConstantArrayFilled implements ConstantValue {
return elementType; return elementType;
} }
public int getSize() { public ConstantValue getSize() {
return size; return size;
} }
public void setSize(ConstantValue size) {
this.size = size;
}
@Override @Override
public ConstantLiteral calculateLiteral(ProgramScope scope) { public ConstantLiteral calculateLiteral(ProgramScope scope) {
throw new ConstantNotLiteral("Cannot calculate literal array"); throw new ConstantNotLiteral("Cannot calculate literal array");
@ -46,7 +50,7 @@ public class ConstantArrayFilled implements ConstantValue {
public String toString(Program program) { public String toString(Program program) {
StringBuilder out = new StringBuilder(); StringBuilder out = new StringBuilder();
out.append("{ fill( "); out.append("{ fill( ");
out.append(size); out.append(size.toString());
out.append(", 0) }"); out.append(", 0) }");
return out.toString(); return out.toString();
} }

View File

@ -32,7 +32,7 @@ public class ConstantVarPointer implements ConstantValue {
@Override @Override
public ConstantLiteral calculateLiteral(ProgramScope scope) { public ConstantLiteral calculateLiteral(ProgramScope scope) {
throw new CompileError("Cannot calculate literal var pointer"); throw new ConstantNotLiteral("Cannot calculate literal var pointer");
} }
@Override @Override

View File

@ -51,6 +51,12 @@ public class AliasReplacer implements ValueReplacer.Replacer {
if(alias != null) { if(alias != null) {
return new ConstantCastValue(constantCastValue.getToType(), alias); return new ConstantCastValue(constantCastValue.getToType(), alias);
} }
} else if(rValue instanceof ConstantArrayFilled) {
ConstantArrayFilled arrayFilled = (ConstantArrayFilled) rValue;
ConstantValue alias = (ConstantValue) getReplacement(arrayFilled.getSize(), aliases);
if(alias != null) {
return new ConstantArrayFilled(arrayFilled.getElementType(), alias);
}
} else if(rValue instanceof ConstantBinary) { } else if(rValue instanceof ConstantBinary) {
ConstantBinary constantBinary = (ConstantBinary) rValue; ConstantBinary constantBinary = (ConstantBinary) rValue;
ConstantValue aliasLeft = (ConstantValue) getReplacement(constantBinary.getLeft(), aliases); ConstantValue aliasLeft = (ConstantValue) getReplacement(constantBinary.getLeft(), aliases);

View File

@ -1,188 +0,0 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.NumberParser;
import dk.camelot64.kickc.model.operators.Operator;
import dk.camelot64.kickc.model.operators.Operators;
import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.parser.KickCBaseVisitor;
import dk.camelot64.kickc.parser.KickCParser;
import org.antlr.v4.runtime.tree.TerminalNode;
/** Capable of evaluating constants directly on the parse tree. */
public class ParseTreeConstantEvaluator extends KickCBaseVisitor<ConstantValue> {
/**
* Attempt to evaluate a constant expression.
*
* @param expr The expression to evaluate
* @return The constant value of the expression. null if the expression is not constant.
*/
public static ConstantValue evaluate(KickCParser.ExprContext expr) {
return (new ParseTreeConstantEvaluator()).visit(expr);
}
static ConstantValue calculateBinary(Operator operator, ConstantValue c1, ConstantValue c2) {
switch(operator.getOperator()) {
case "-": {
if(c1 instanceof ConstantInteger && c2 instanceof ConstantInteger) {
return new ConstantInteger(getInteger(c1) - getInteger(c2));
} else {
return new ConstantDouble(getDouble(c1) - getDouble(c2));
}
}
case "+": {
if(c1 instanceof ConstantInteger && c2 instanceof ConstantInteger) {
return new ConstantInteger(getInteger(c1) + getInteger(c2));
} else {
return new ConstantDouble(getDouble(c1) + getDouble(c2));
}
}
case "*": {
if(c1 instanceof ConstantInteger && c2 instanceof ConstantInteger) {
return new ConstantInteger(getInteger(c1) * getInteger(c2));
} else {
return new ConstantDouble(getDouble(c1) * getDouble(c2));
}
}
case "/": {
if(c1 instanceof ConstantInteger && c2 instanceof ConstantInteger) {
return new ConstantInteger(getInteger(c1) / getInteger(c2));
} else {
return new ConstantDouble(getDouble(c1) / getDouble(c2));
}
}
case "*idx": {
// Cannot be directly propagated
return null;
}
default:
throw new RuntimeException("Unhandled Binary Operator " + operator.getOperator());
}
}
private static Long getInteger(ConstantValue constant) {
if(constant instanceof ConstantInteger) {
return ((ConstantInteger) constant).getValue();
} else {
throw new RuntimeException("Type Mismatch. Constant is not an integer number " + constant);
}
}
private static Double getDouble(ConstantValue constant) {
if(constant instanceof ConstantDouble) {
return ((ConstantDouble) constant).getValue();
} else if(constant instanceof ConstantInteger) {
return ((ConstantInteger) constant).getValue().doubleValue();
} else {
throw new RuntimeException("Type Mismatch. Constant is not a number " + constant);
}
}
public static ConstantValue calculateUnary(Operator operator, ConstantValue c) {
switch(operator.getOperator()) {
case "-": {
if(c instanceof ConstantInteger) {
ConstantInteger cInt = (ConstantInteger) c;
return new ConstantInteger(-cInt.getValue());
} else if(c instanceof ConstantDouble) {
ConstantDouble cDoub = (ConstantDouble) c;
return new ConstantDouble(-cDoub.getValue());
} else {
throw new RuntimeException("Type mismatch. Unary Minus cannot handle value " + c);
}
}
case "+": {
return c;
}
case "++": {
ConstantInteger cInt = (ConstantInteger) c;
return new ConstantInteger(cInt.getValue() + 1);
}
case "--": {
ConstantInteger cInt = (ConstantInteger) c;
return new ConstantInteger(cInt.getValue() - 1);
}
case "*": { // pointer dereference
return null;
}
default:
throw new RuntimeException("Unhandled Unary Operator " + operator.getOperator());
}
}
@Override
public ConstantValue visitExprNumber(KickCParser.ExprNumberContext ctx) {
Number number = NumberParser.parseLiteral(ctx.getText());
if(number instanceof Long) {
return new ConstantInteger((Long) number);
} else if(number instanceof Integer) {
return new ConstantInteger(number.longValue());
} else {
return new ConstantDouble((Double) number);
}
}
@Override
public ConstantValue visitExprString(KickCParser.ExprStringContext ctx) {
return new ConstantString(ctx.getText());
}
@Override
public ConstantValue visitExprBool(KickCParser.ExprBoolContext ctx) {
return new ConstantBool(Boolean.getBoolean(ctx.getText()));
}
@Override
public ConstantValue visitExprPar(KickCParser.ExprParContext ctx) {
return visit(ctx.expr());
}
@Override
public ConstantValue visitExprCast(KickCParser.ExprCastContext ctx) {
return visit(ctx.expr());
}
@Override
public ConstantValue visitExprCall(KickCParser.ExprCallContext ctx) {
throw new NotConstantException();
}
@Override
public ConstantValue visitExprArray(KickCParser.ExprArrayContext ctx) {
throw new NotConstantException();
}
@Override
public ConstantValue visitExprId(KickCParser.ExprIdContext ctx) {
throw new NotConstantException();
}
@Override
public ConstantValue visitInitList(KickCParser.InitListContext ctx) {
throw new NotConstantException();
}
@Override
public ConstantValue visitExprUnary(KickCParser.ExprUnaryContext ctx) {
ConstantValue sub = visit(ctx.expr());
String op = ((TerminalNode) ctx.getChild(0)).getSymbol().getText();
Operator operator = Operators.getUnary(op);
return calculateUnary(operator, sub);
}
@Override
public ConstantValue visitExprBinary(KickCParser.ExprBinaryContext ctx) {
ConstantValue left = this.visit(ctx.expr(0));
ConstantValue right = this.visit(ctx.expr(1));
String op = ((TerminalNode) ctx.getChild(1)).getSymbol().getText();
Operator operator = Operators.getBinary(op);
return calculateBinary(operator, left, right);
}
/** Thrown if the expression is not a constant. */
public static class NotConstantException extends RuntimeException {
public NotConstantException() {
}
}
}

View File

@ -154,7 +154,7 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
String kickAsmCode = m.group(1).replaceAll("\r", ""); String kickAsmCode = m.group(1).replaceAll("\r", "");
sequence.addStatement(new StatementKickAsm(kickAsmCode, new StatementSource(ctx))); sequence.addStatement(new StatementKickAsm(kickAsmCode, new StatementSource(ctx)));
} }
if(ctx.kasmParams()!=null) { if(ctx.kasmParams() != null) {
this.visitKasmParams(ctx.kasmParams()); this.visitKasmParams(ctx.kasmParams());
} }
return null; return null;
@ -167,7 +167,7 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
resourceName = resourceName.substring(1, resourceName.length() - 1); resourceName = resourceName.substring(1, resourceName.length() - 1);
File resourceFile = Compiler.loadFile(resourceName, program); File resourceFile = Compiler.loadFile(resourceName, program);
program.addAsmResourceFile(resourceFile.toPath()); program.addAsmResourceFile(resourceFile.toPath());
program.getLog().append("Added resource "+resourceFile.getPath().replace('\\', '/')); program.getLog().append("Added resource " + resourceFile.getPath().replace('\\', '/'));
} }
return null; return null;
} }
@ -189,11 +189,11 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
} else if(type instanceof SymbolTypeArray) { } else if(type instanceof SymbolTypeArray) {
// Add an zero-array initializer // Add an zero-array initializer
SymbolTypeArray typeArray = (SymbolTypeArray) type; SymbolTypeArray typeArray = (SymbolTypeArray) type;
Integer size = typeArray.getSize(); RValue size = typeArray.getSize();
if(size == null) { if(size==null) {
throw new CompileError("Error! Cannot determine array size. " + lValue.toString(program), new StatementSource(ctx)); throw new CompileError("Error! Array has no declared size. " + lValue.toString(program), new StatementSource(ctx));
} }
Statement stmt = new StatementAssignment(lValue.getRef(), new ConstantArrayFilled(typeArray.getElementType(), size), new StatementSource(ctx)); Statement stmt = new StatementAssignment(lValue.getRef(), new ArrayFilled(typeArray.getElementType(), size), new StatementSource(ctx));
sequence.addStatement(stmt); sequence.addStatement(stmt);
} }
return null; return null;
@ -309,7 +309,7 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
PrePostModifierHandler.addPreModifiers(this, ctx.expr()); PrePostModifierHandler.addPreModifiers(this, ctx.expr());
RValue rValue = (RValue) this.visit(ctx.expr()); RValue rValue = (RValue) this.visit(ctx.expr());
if(elseStmt==null) { if(elseStmt == null) {
// If without else - skip the entire section if condition not met // If without else - skip the entire section if condition not met
VariableRef notExprVar = getCurrentSymbols().addVariableIntermediate().getRef(); VariableRef notExprVar = getCurrentSymbols().addVariableIntermediate().getRef();
sequence.addStatement(new StatementAssignment(notExprVar, null, Operators.LOGIC_NOT, rValue, new StatementSource(ctx))); sequence.addStatement(new StatementAssignment(notExprVar, null, Operators.LOGIC_NOT, rValue, new StatementSource(ctx)));
@ -460,6 +460,7 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
/** /**
* Get the variable of a for-loop. * Get the variable of a for-loop.
*
* @param forDeclCtx The variable declaration * @param forDeclCtx The variable declaration
* @return The variable of the for loop * @return The variable of the for loop
*/ */
@ -542,12 +543,8 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
public SymbolType visitTypeArray(KickCParser.TypeArrayContext ctx) { public SymbolType visitTypeArray(KickCParser.TypeArrayContext ctx) {
SymbolType elementType = (SymbolType) visit(ctx.typeDecl()); SymbolType elementType = (SymbolType) visit(ctx.typeDecl());
if(ctx.expr() != null) { if(ctx.expr() != null) {
ConstantValue size = ParseTreeConstantEvaluator.evaluate(ctx.expr()); RValue sizeVal = (RValue) visit(ctx.expr());
if(size instanceof ConstantInteger) { return new SymbolTypeArray(elementType, sizeVal);
return new SymbolTypeArray(elementType, ((ConstantInteger) size).getValue().intValue());
} else {
throw new RuntimeException("Array size not a constant integer " + ctx.getText());
}
} else { } else {
return new SymbolTypeArray(elementType); return new SymbolTypeArray(elementType);
} }

View File

@ -1,52 +0,0 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.statements.StatementAssignment;
import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.types.SymbolTypeArray;
/**
* Asserts that all arrays with lengths and initializers have matching lengths.
*/
public class Pass1AssertArrayLengths extends Pass1Base {
public Pass1AssertArrayLengths(Program program) {
super(program);
}
@Override
public boolean step() {
for(ControlFlowBlock block : getGraph().getAllBlocks()) {
for(Statement statement : block.getStatements()) {
if(statement instanceof StatementAssignment) {
StatementAssignment assignment = (StatementAssignment) statement;
LValue lValue = assignment.getlValue();
if(lValue instanceof VariableRef) {
Variable variable = getScope().getVariable((VariableRef) lValue);
if(variable.getType() instanceof SymbolTypeArray) {
Integer declaredSize = ((SymbolTypeArray) variable.getType()).getSize();
if(declaredSize != null) {
if(assignment.getrValue1() == null && assignment.getOperator() == null) {
RValue value = assignment.getrValue2();
if(value instanceof ValueList) {
if(((ValueList) value).getList().size() != declaredSize) {
throw new CompileError("Error! Array length mismatch " + statement.toString(getProgram(), false), statement.getSource());
}
} else if(value instanceof ConstantString) {
if(((ConstantString) value).getValue().length() != declaredSize) {
throw new CompileError("Error! Array length mismatch " + statement.toString(getProgram(), false), statement.getSource());
}
}
}
}
}
}
}
}
}
return false;
}
}

View File

@ -16,19 +16,19 @@ public class Pass2AssertSymbols extends Pass2SsaAssertion {
@Override @Override
public void check() throws AssertionFailed { public void check() throws AssertionFailed {
SymbolFinder symbolFinder = new SymbolFinder(getSymbols()); SymbolFinder symbolFinder = new SymbolFinder(getScope());
symbolFinder.visitGraph(getGraph()); symbolFinder.visitGraph(getGraph());
HashSet<Symbol> codeSymbols = symbolFinder.getSymbols(); HashSet<Symbol> codeSymbols = symbolFinder.getSymbols();
// Check that all symbols found in the code is also oin the symbol tabel // Check that all symbols found in the code is also oin the symbol tabel
for(Symbol codeSymbol : codeSymbols) { for(Symbol codeSymbol : codeSymbols) {
if(codeSymbol.getFullName().equals(SymbolRef.PROCEXIT_BLOCK_NAME)) continue; if(codeSymbol.getFullName().equals(SymbolRef.PROCEXIT_BLOCK_NAME)) continue;
Symbol tableSymbol = getSymbols().getSymbol(codeSymbol.getFullName()); Symbol tableSymbol = getScope().getSymbol(codeSymbol.getFullName());
if(tableSymbol == null) { if(tableSymbol == null) {
throw new AssertionFailed("Compile process error. Symbol found in code, but not in symbol table. " + codeSymbol.getFullName()); throw new AssertionFailed("Compile process error. Symbol found in code, but not in symbol table. " + codeSymbol.getFullName());
} }
} }
// Check that all symbols in the symbol table is also in the code // Check that all symbols in the symbol table is also in the code
HashSet<Symbol> tableSymbols = getAllSymbols(getSymbols()); HashSet<Symbol> tableSymbols = getAllSymbols(getScope());
for(Symbol tableSymbol : tableSymbols) { for(Symbol tableSymbol : tableSymbols) {
if(tableSymbol instanceof VariableUnversioned) continue; if(tableSymbol instanceof VariableUnversioned) continue;
if(tableSymbol instanceof ConstantVar) continue; if(tableSymbol instanceof ConstantVar) continue;

View File

@ -31,8 +31,8 @@ public class Pass2AssertTypeMatch extends Pass2SsaAssertion {
private void checkAssignment(StatementAssignment statement) { private void checkAssignment(StatementAssignment statement) {
LValue lValue = statement.getlValue(); LValue lValue = statement.getlValue();
SymbolType lValueType = SymbolTypeInference.inferType(getSymbols(), lValue); SymbolType lValueType = SymbolTypeInference.inferType(getScope(), lValue);
SymbolType rValueType = SymbolTypeInference.inferTypeRValue(getSymbols(), statement); SymbolType rValueType = SymbolTypeInference.inferTypeRValue(getScope(), statement);
if(SymbolTypeInference.typeMatch(lValueType, rValueType)) { if(SymbolTypeInference.typeMatch(lValueType, rValueType)) {
return; return;
} }

View File

@ -57,10 +57,10 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
SymbolType constType = variableType; SymbolType constType = variableType;
if(!valueType.equals(variableType)) { if(!valueType.equals(variableType)) {
if(SymbolTypeInference.typeMatch(valueType, variableType)) { if(SymbolTypeInference.typeMatch(variableType, valueType)) {
constType = valueType;
} else if(SymbolTypeInference.typeMatch(variableType, valueType)) {
constType = variableType; constType = variableType;
} else if(SymbolTypeInference.typeMatch(valueType, variableType)) {
constType = valueType;
} else { } else {
throw new CompileError( throw new CompileError(
"Constant variable has a non-matching type \n variable: " + variable.toString(getProgram()) + "Constant variable has a non-matching type \n variable: " + variable.toString(getProgram()) +
@ -223,6 +223,11 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
if(castConstant !=null) { if(castConstant !=null) {
return new ConstantCastValue(castValue.getToType(), castConstant); return new ConstantCastValue(castValue.getToType(), castConstant);
} }
} else if(rValue instanceof ArrayFilled) {
ArrayFilled arrayFilled = (ArrayFilled) rValue;
if(arrayFilled.getSize() instanceof ConstantValue) {
return new ConstantArrayFilled(arrayFilled.getElementType(), (ConstantValue) arrayFilled.getSize());
}
} }
return null; return null;
} }

View File

@ -1,6 +1,7 @@
package dk.camelot64.kickc.passes; package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.*; import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.types.SymbolTypeArray;
import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.model.symbols.ConstantVar; import dk.camelot64.kickc.model.symbols.ConstantVar;
import dk.camelot64.kickc.model.symbols.ProgramScope; import dk.camelot64.kickc.model.symbols.ProgramScope;
@ -62,13 +63,25 @@ public class Pass2ConstantInlining extends Pass2SsaOptimization {
} }
/** /**
* Replace any alias within the constant defimtions inside the symbol table * Replace any alias within the constant defintions inside the symbol table
* *
* @param inline The replacements to make * @param inline The replacements to make
*/ */
private void replaceInSymbolTable(Map<ConstantRef, ConstantValue> inline) { private void replaceInSymbolTable(Map<ConstantRef, ConstantValue> inline) {
Collection<ConstantVar> allConstants = getProgram().getScope().getAllConstants(true); Collection<ConstantVar> allConstants = getProgram().getScope().getAllConstants(true);
for(ConstantVar constantVar : allConstants) { for(ConstantVar constantVar : allConstants) {
// First check if the type is an array - and replace inside the type if it is
SymbolType constantType = constantVar.getType();
if(constantType instanceof SymbolTypeArray) {
SymbolTypeArray arrayType = (SymbolTypeArray) constantType;
RValue arraySize = arrayType.getSize();
RValue sizeReplacement = AliasReplacer.getReplacement(arraySize, inline);
if(sizeReplacement != null) {
arrayType.setSize(sizeReplacement);
}
}
ConstantValue constantValue = constantVar.getValue(); ConstantValue constantValue = constantVar.getValue();
RValue replacement = AliasReplacer.getReplacement(constantValue, inline); RValue replacement = AliasReplacer.getReplacement(constantValue, inline);
if(replacement != null) { if(replacement != null) {

View File

@ -83,8 +83,6 @@ public class Pass2RangeResolving extends Pass2SsaOptimization {
replaceable.set(beyondLastVal); replaceable.set(beyondLastVal);
} else if(rangeValue instanceof RangeNext) { } else if(rangeValue instanceof RangeNext) {
StatementAssignment assignment = (StatementAssignment) currentStmt; StatementAssignment assignment = (StatementAssignment) currentStmt;
ConstantValue nextVal;
if(firstInt <= lastInt) { if(firstInt <= lastInt) {
assignment.setrValue2(assignment.getrValue1()); assignment.setrValue2(assignment.getrValue1());
assignment.setrValue1(null); assignment.setrValue1(null);

View File

@ -18,7 +18,7 @@ public abstract class Pass2SsaAssertion {
return program.getGraph(); return program.getGraph();
} }
public ProgramScope getSymbols() { public ProgramScope getScope() {
return program.getScope(); return program.getScope();
} }

View File

@ -0,0 +1,74 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.symbols.ConstantVar;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypeArray;
import dk.camelot64.kickc.model.values.*;
import java.util.Collection;
/**
* Asserts that all arrays with lengths and initializers have matching lengths.
*/
public class Pass3AssertArrayLengths extends Pass2SsaAssertion {
public Pass3AssertArrayLengths(Program program) {
super(program);
}
@Override
public void check() throws AssertionFailed {
Collection<ConstantVar> allConstants = getScope().getAllConstants(true);
for(ConstantVar constantVar : allConstants) {
SymbolType constantType = constantVar.getType();
if(constantType instanceof SymbolTypeArray) {
RValue declaredSize = ((SymbolTypeArray) constantType).getSize();
if(declaredSize != null) {
if(!(declaredSize instanceof ConstantValue)) {
throw new CompileError("Error! Array declared size is not constant " + constantType.toString());
}
ConstantLiteral declaredSizeVal = ((ConstantValue) declaredSize).calculateLiteral(getScope());
if(!(declaredSizeVal instanceof ConstantInteger)) {
throw new CompileError("Error! Array declared size is not integer " + constantType.toString());
}
Integer declaredSizeInt = ((ConstantInteger) declaredSizeVal).getInteger().intValue();
// A constant size was found - Check that a value with the same size is present
ConstantValue constantValue = constantVar.getValue();
if(constantValue == null) {
throw new CompileError("Error! Array with a size not initialized " + constantVar.toString(getProgram()));
} else if(constantValue instanceof ConstantArrayFilled) {
ConstantValue assignedSize = ((ConstantArrayFilled) constantValue).getSize();
ConstantLiteral assignedSizeVal = assignedSize.calculateLiteral(getScope());
if(!(assignedSizeVal instanceof ConstantInteger)) {
throw new CompileError("Error! Array declared size is not integer " + constantType.toString());
}
Integer assignedSizeInt = ((ConstantInteger) declaredSizeVal).getInteger().intValue();
if(!assignedSizeInt.equals(declaredSizeInt)) {
throw new CompileError("Error! Array length mismatch " + constantVar.toString(getProgram()));
}
} else if(constantValue instanceof ConstantArrayList) {
Integer assignedSizeVal = ((ConstantArrayList) constantValue).getElements().size();
if(!assignedSizeVal.equals(declaredSizeInt)) {
throw new CompileError("Error! Array length mismatch " + constantVar.toString(getProgram()));
}
} else {
ConstantLiteral constantLiteral = constantValue.calculateLiteral(getScope());
if(constantLiteral instanceof ConstantString) {
Integer assignedSizeVal = ((ConstantString) constantLiteral).getString().length();
if(!assignedSizeVal.equals(declaredSizeInt)) {
throw new CompileError("Error! Array length mismatch " + constantVar.toString(getProgram()));
}
} else if(constantLiteral instanceof ConstantPointer) {
// Constant Pointers are OK for sized arrays
} else {
throw new AssertionFailed("Error! Array with a size unknown initialization value " + constantVar.toString(getProgram()));
}
}
}
}
}
}
}

View File

@ -3,6 +3,7 @@ package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.asm.*; import dk.camelot64.kickc.asm.*;
import dk.camelot64.kickc.fragment.*; import dk.camelot64.kickc.fragment.*;
import dk.camelot64.kickc.model.*; import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.operators.Operators;
import dk.camelot64.kickc.model.values.*; import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.model.statements.*; import dk.camelot64.kickc.model.statements.*;
import dk.camelot64.kickc.model.symbols.ConstantVar; import dk.camelot64.kickc.model.symbols.ConstantVar;
@ -116,7 +117,8 @@ public class Pass4CodeGeneration {
Collection<ConstantVar> scopeConstants = scope.getAllConstants(false); Collection<ConstantVar> scopeConstants = scope.getAllConstants(false);
Set<String> added = new LinkedHashSet<>(); Set<String> added = new LinkedHashSet<>();
for(ConstantVar constantVar : scopeConstants) { for(ConstantVar constantVar : scopeConstants) {
if(!(constantVar.getValue() instanceof ConstantArrayList || constantVar.getValue() instanceof ConstantArrayFilled || constantVar.getType().equals(SymbolType.STRING))) {
if(!hasData(constantVar)) {
String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName(); String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName();
if(asmName != null && !added.contains(asmName)) { if(asmName != null && !added.contains(asmName)) {
added.add(asmName); added.add(asmName);
@ -142,6 +144,25 @@ public class Pass4CodeGeneration {
} }
} }
private boolean hasData(ConstantVar constantVar) {
ConstantValue constantValue = constantVar.getValue();
if(constantValue instanceof ConstantArrayList) {
return true;
} else if(constantValue instanceof ConstantArrayFilled) {
return true;
} else {
try {
ConstantLiteral literal = constantValue.calculateLiteral(getScope());
if(literal instanceof ConstantString) {
return true;
}
} catch(ConstantNotLiteral e) {
// can't calculate literal value, so it is not data
}
}
return false;
}
/** /**
* Determines whether to use a .label instead of .const for a constant. * Determines whether to use a .label instead of .const for a constant.
* This can be necessary because KickAssembler does not allow constant references between scopes. * This can be necessary because KickAssembler does not allow constant references between scopes.
@ -247,26 +268,43 @@ public class Pass4CodeGeneration {
} else if(constantVar.getValue() instanceof ConstantArrayFilled) { } else if(constantVar.getValue() instanceof ConstantArrayFilled) {
String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName(); String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName();
ConstantArrayFilled constantArrayFilled = (ConstantArrayFilled) constantVar.getValue(); ConstantArrayFilled constantArrayFilled = (ConstantArrayFilled) constantVar.getValue();
ConstantValue arraySize = constantArrayFilled.getSize();
ConstantLiteral arraySizeConst = arraySize.calculateLiteral(getScope());
if(!(arraySizeConst instanceof ConstantInteger)) {
throw new Pass2SsaAssertion.AssertionFailed("Error! Array size is not constant integer " + constantVar.toString(program));
}
Integer size = ((ConstantInteger) arraySizeConst).getInteger().intValue();
if(SymbolType.isByte(constantArrayFilled.getElementType())) { if(SymbolType.isByte(constantArrayFilled.getElementType())) {
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.BYTE, constantArrayFilled.getSize(), "0"); String asmSize = AsmFormat.getAsmConstant(program, arraySize, 99, scopeRef);
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.BYTE, asmSize, size, "0");
added.add(asmName); added.add(asmName);
} else if(SymbolType.isSByte(constantArrayFilled.getElementType())) { } else if(SymbolType.isSByte(constantArrayFilled.getElementType())) {
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.BYTE, constantArrayFilled.getSize(), "0"); String asmSize = AsmFormat.getAsmConstant(program, arraySize, 99, scopeRef);
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.BYTE, asmSize, size, "0");
added.add(asmName); added.add(asmName);
} else if(SymbolType.isWord(constantArrayFilled.getElementType())) { } else if(SymbolType.isWord(constantArrayFilled.getElementType())) {
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.WORD, constantArrayFilled.getSize(), "0"); String asmSize = AsmFormat.getAsmConstant(program, new ConstantBinary(new ConstantInteger(2L), Operators.MULTIPLY, arraySize), 99, scopeRef);
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.WORD, asmSize, size, "0");
added.add(asmName); added.add(asmName);
} else if(SymbolType.isSWord(constantArrayFilled.getElementType())) { } else if(SymbolType.isSWord(constantArrayFilled.getElementType())) {
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.WORD, constantArrayFilled.getSize(), "0"); String asmSize = AsmFormat.getAsmConstant(program, new ConstantBinary(new ConstantInteger(2L), Operators.MULTIPLY, arraySize), 99, scopeRef);
asm.addDataFilled(asmName.replace("#", "_").replace("$", "_"), AsmDataNumeric.Type.WORD, asmSize, size, "0");
added.add(asmName); added.add(asmName);
} else { } else {
throw new RuntimeException("Unhandled constant array element type " + constantArrayFilled.toString(program)); throw new RuntimeException("Unhandled constant array element type " + constantArrayFilled.toString(program));
} }
} else if(constantVar.getType().equals(SymbolType.STRING)) { } else {
String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName(); try {
String asmConstant = AsmFormat.getAsmConstant(program, constantVar.getValue(), 99, scopeRef); ConstantLiteral literal = constantVar.getValue().calculateLiteral(getScope());
asm.addDataString(asmName.replace("#", "_").replace("$", "_"), asmConstant); if(literal instanceof ConstantString) {
added.add(asmName); String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName();
String asmConstant = AsmFormat.getAsmConstant(program, constantVar.getValue(), 99, scopeRef);
asm.addDataString(asmName.replace("#", "_").replace("$", "_"), asmConstant);
added.add(asmName);
}
} catch(ConstantNotLiteral e) {
// can't calculate literal value, so it is not data - just return
}
} }
} }
} }

View File

@ -68,8 +68,10 @@ public class PassNVariableReferenceInfos extends Pass2Base {
used.addAll(getReferenced(elem)); used.addAll(getReferenced(elem));
} }
return used; return used;
} else if(rValue instanceof ArrayFilled) {
return getReferenced(((ArrayFilled) rValue).getSize());
} else if(rValue instanceof ConstantArrayFilled) { } else if(rValue instanceof ConstantArrayFilled) {
return new ArrayList<>(); return getReferenced(((ConstantArrayFilled) rValue).getSize());
} else if(rValue instanceof ConstantUnary) { } else if(rValue instanceof ConstantUnary) {
return getReferenced(((ConstantUnary) rValue).getOperand()); return getReferenced(((ConstantUnary) rValue).getOperand());
} else if(rValue instanceof ConstantRef) { } else if(rValue instanceof ConstantRef) {

View File

@ -129,12 +129,15 @@ public class ValueReplacer {
subValues.add(new ReplaceableConstantBinaryRight((ConstantBinary) value)); subValues.add(new ReplaceableConstantBinaryRight((ConstantBinary) value));
} else if(value instanceof ConstantUnary) { } else if(value instanceof ConstantUnary) {
subValues.add(new ReplaceableConstantUnaryValue((ConstantUnary) value)); subValues.add(new ReplaceableConstantUnaryValue((ConstantUnary) value));
} else if(value instanceof ArrayFilled) {
subValues.add(new ReplaceableArrayFilledSize((ArrayFilled) value));
} else if(value instanceof ConstantArrayFilled) {
subValues.add(new ReplaceableConstantArrayFilledSize((ConstantArrayFilled) value));
} else if( } else if(
value == null || value == null ||
value instanceof VariableRef || value instanceof VariableRef ||
value instanceof ConstantLiteral || value instanceof ConstantLiteral ||
value instanceof ConstantRef || value instanceof ConstantRef ||
value instanceof ConstantArrayFilled ||
value instanceof LvalueIntermediate value instanceof LvalueIntermediate
) { ) {
// No sub values // No sub values
@ -146,6 +149,46 @@ public class ValueReplacer {
} }
/** Replaceable value inside a array filled expression. */
public static class ReplaceableArrayFilledSize extends ReplaceableValue {
private final ArrayFilled array;
ReplaceableArrayFilledSize(ArrayFilled array) {
this.array = array;
}
@Override
public RValue get() {
return array.getSize();
}
@Override
public void set(RValue val) {
array.setSize(val);
}
}
/** Replaceable value inside a constant array filled expression. */
public static class ReplaceableConstantArrayFilledSize extends ReplaceableValue {
private final ConstantArrayFilled array;
ReplaceableConstantArrayFilledSize(ConstantArrayFilled array) {
this.array = array;
}
@Override
public RValue get() {
return array.getSize();
}
@Override
public void set(RValue val) {
array.setSize((ConstantValue) val);
}
}
/** Replaceable value inside a constant unary expression. */ /** Replaceable value inside a constant unary expression. */
public static class ReplaceableConstantUnaryValue extends ReplaceableValue { public static class ReplaceableConstantUnaryValue extends ReplaceableValue {
private final ConstantUnary unary; private final ConstantUnary unary;

View File

@ -46,6 +46,16 @@ public class TestPrograms {
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false); AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
} }
@Test
public void testForRangedWords() throws IOException, URISyntaxException {
compileAndCompare("forrangedwords");
}
@Test
public void testArrayLengthSymbolic() throws IOException, URISyntaxException {
compileAndCompare("array-length-symbolic");
}
@Test @Test
public void testForRangeSymbolic() throws IOException, URISyntaxException { public void testForRangeSymbolic() throws IOException, URISyntaxException {
compileAndCompare("forrangesymbolic"); compileAndCompare("forrangesymbolic");
@ -808,7 +818,7 @@ public class TestPrograms {
@Test @Test
public void testArrayUninitialized() throws IOException, URISyntaxException { public void testArrayUninitialized() throws IOException, URISyntaxException {
assertError("array-uninitialized", "Cannot determine array size."); assertError("array-uninitialized", "Array has no declared size.");
} }
@Test @Test

View File

@ -1,3 +1,6 @@
byte[3] b = { 1, 2 }; byte[3] b = { 1, 2 };
void main() {} void main() {
byte* SCREEN = $400;
SCREEN[0] = b[0];
}

View File

@ -0,0 +1,17 @@
// Illustrates symbolic array lengths
byte ITEM_COUNT = 3;
byte ITEM_SIZE = 5;
byte[ITEM_COUNT*ITEM_SIZE] items = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// Fills the array item by item with $is, where i is the item# and s is the sub#
void main() {
byte* cur_item = items;
for( byte item: 0..ITEM_COUNT-1) {
for( byte sub: 0..ITEM_SIZE-1) {
cur_item[sub] = item<<4|sub;
}
cur_item += ITEM_SIZE;
}
}

View File

@ -1,2 +1,6 @@
byte[] b; byte[] b;
void main() {
byte* SCREEN = $400;
SCREEN[0] = b[0];
}

View File

@ -0,0 +1,12 @@
void main() {
byte* SCREEN = $0400;
for( word w: 0..$ffff) {
SCREEN[0] = <w;
SCREEN[1] = >w;
}
for( signed word sw: -$7fff..$7ffe) {
SCREEN[3] = <sw;
SCREEN[4] = >sw;
}
}

View File

@ -1,3 +1,6 @@
byte[3] b = "qwe!"; byte[3] b = "qwe!";
void main() {} void main() {
byte* SCREEN = $400;
SCREEN[0] = b[0];
}

View File

@ -0,0 +1,40 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.const ITEM_COUNT = 2
.const ITEM_SIZE = 5
jsr main
main: {
.label cur_item = 2
lda #<items
sta cur_item
lda #>items
sta cur_item+1
ldx #0
b1:
ldy #0
b2:
txa
asl
asl
asl
asl
sty $ff
ora $ff
sta (cur_item),y
iny
cpy #ITEM_SIZE-1+1
bne b2
lda cur_item
clc
adc #ITEM_SIZE
sta cur_item
bcc !+
inc cur_item+1
!:
inx
cpx #ITEM_COUNT-1+1
bne b1
rts
}
items: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

View File

@ -0,0 +1,32 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@1
@1: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main [ ] ( )
to:@end
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
[4] phi() [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main main::@3
[5] (byte*) main::cur_item#4 ← phi( main/(const byte[$0]) items#0 main::@3/(byte*) main::cur_item#1 ) [ main::item#4 main::cur_item#4 ] ( main:2 [ main::item#4 main::cur_item#4 ] )
[5] (byte) main::item#4 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@3/(byte) main::item#1 ) [ main::item#4 main::cur_item#4 ] ( main:2 [ main::item#4 main::cur_item#4 ] )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[6] (byte) main::sub#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::sub#1 ) [ main::item#4 main::cur_item#4 main::sub#2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 ] )
[7] (byte~) main::$2 ← (byte) main::item#4 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] )
[8] (byte~) main::$3 ← (byte~) main::$2 | (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] )
[9] *((byte*) main::cur_item#4 + (byte) main::sub#2) ← (byte~) main::$3 [ main::item#4 main::cur_item#4 main::sub#2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 ] )
[10] (byte) main::sub#1 ← ++ (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] )
[11] if((byte) main::sub#1!=(const byte) ITEM_SIZE#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] )
to:main::@3
main::@3: scope:[main] from main::@2
[12] (byte*) main::cur_item#1 ← (byte*) main::cur_item#4 + (const byte) ITEM_SIZE#0 [ main::item#4 main::cur_item#1 ] ( main:2 [ main::item#4 main::cur_item#1 ] )
[13] (byte) main::item#1 ← ++ (byte) main::item#4 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] )
[14] if((byte) main::item#1!=(const byte) ITEM_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] )
to:main::@return
main::@return: scope:[main] from main::@3
[15] return [ ] ( main:2 [ ] )
to:@return

View File

@ -0,0 +1,745 @@
PARSING src/test/java/dk/camelot64/kickc/test/kc/array-length-symbolic.kc
// Illustrates symbolic array lengths
byte ITEM_COUNT = 2;
byte ITEM_SIZE = 5;
byte[ITEM_COUNT*ITEM_SIZE] items = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
// Fills the array item by item with $is, where i is the item# and s is the sub#
void main() {
byte* cur_item = items;
for( byte item: 0..ITEM_COUNT-1) {
for( byte sub: 0..ITEM_SIZE-1) {
cur_item[sub] = item<<4|sub;
}
cur_item += ITEM_SIZE;
}
}
SYMBOLS
(byte~) $0
(label) @1
(label) @begin
(label) @end
(byte) ITEM_COUNT
(byte) ITEM_SIZE
(byte[$0]) items
(void()) main()
(byte/signed word/word/dword/signed dword~) main::$0
(byte/signed word/word/dword/signed dword~) main::$1
(byte~) main::$2
(byte~) main::$3
(bool~) main::$4
(bool~) main::$5
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@return
(byte*) main::cur_item
(byte) main::item
(byte) main::sub
INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from
(byte) ITEM_COUNT ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) ITEM_SIZE ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte~) $0 ← (byte) ITEM_COUNT * (byte) ITEM_SIZE
(byte[$0]) items ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
to:@1
main: scope:[main] from
(byte*) main::cur_item ← (byte[$0]) items
(byte/signed word/word/dword/signed dword~) main::$0 ← (byte) ITEM_COUNT - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::item ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@1
main::@1: scope:[main] from main main::@3
(byte/signed word/word/dword/signed dword~) main::$1 ← (byte) ITEM_SIZE - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::sub ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
(byte~) main::$2 ← (byte) main::item << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) main::$3 ← (byte~) main::$2 | (byte) main::sub
*((byte*) main::cur_item + (byte) main::sub) ← (byte~) main::$3
(byte) main::sub ← (byte) main::sub + rangenext(0,main::$1)
(bool~) main::$4 ← (byte) main::sub != rangelast(0,main::$1)
if((bool~) main::$4) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
(byte*) main::cur_item ← (byte*) main::cur_item + (byte) ITEM_SIZE
(byte) main::item ← (byte) main::item + rangenext(0,main::$0)
(bool~) main::$5 ← (byte) main::item != rangelast(0,main::$0)
if((bool~) main::$5) goto main::@1
to:main::@4
main::@4: scope:[main] from main::@3
to:main::@return
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
call main
to:@end
@end: scope:[] from @1
Eliminating unused variable (byte~) $0 and assignment [2] (byte~) $0 ← (byte) ITEM_COUNT * (byte) ITEM_SIZE
Removing empty block main::@4
PROCEDURE MODIFY VARIABLE ANALYSIS
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from
(byte) ITEM_COUNT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) ITEM_SIZE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte[$0]) items#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
to:@1
main: scope:[main] from @1
(byte) ITEM_SIZE#3 ← phi( @1/(byte) ITEM_SIZE#5 )
(byte) ITEM_COUNT#1 ← phi( @1/(byte) ITEM_COUNT#2 )
(byte*) main::cur_item#0 ← (byte[$0]) items#0
(byte/signed word/word/dword/signed dword~) main::$0 ← (byte) ITEM_COUNT#1 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::item#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@1
main::@1: scope:[main] from main main::@3
(byte*) main::cur_item#4 ← phi( main/(byte*) main::cur_item#0 main::@3/(byte*) main::cur_item#1 )
(byte) main::item#4 ← phi( main/(byte) main::item#0 main::@3/(byte) main::item#1 )
(byte) ITEM_SIZE#1 ← phi( main/(byte) ITEM_SIZE#3 main::@3/(byte) ITEM_SIZE#2 )
(byte/signed word/word/dword/signed dword~) main::$1 ← (byte) ITEM_SIZE#1 - (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::sub#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
(byte) ITEM_SIZE#4 ← phi( main::@1/(byte) ITEM_SIZE#1 main::@2/(byte) ITEM_SIZE#4 )
(byte*) main::cur_item#2 ← phi( main::@1/(byte*) main::cur_item#4 main::@2/(byte*) main::cur_item#2 )
(byte) main::sub#2 ← phi( main::@1/(byte) main::sub#0 main::@2/(byte) main::sub#1 )
(byte) main::item#2 ← phi( main::@1/(byte) main::item#4 main::@2/(byte) main::item#2 )
(byte~) main::$2 ← (byte) main::item#2 << (byte/signed byte/word/signed word/dword/signed dword) 4
(byte~) main::$3 ← (byte~) main::$2 | (byte) main::sub#2
*((byte*) main::cur_item#2 + (byte) main::sub#2) ← (byte~) main::$3
(byte) main::sub#1 ← (byte) main::sub#2 + rangenext(0,main::$1)
(bool~) main::$4 ← (byte) main::sub#1 != rangelast(0,main::$1)
if((bool~) main::$4) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
(byte) main::item#3 ← phi( main::@2/(byte) main::item#2 )
(byte) ITEM_SIZE#2 ← phi( main::@2/(byte) ITEM_SIZE#4 )
(byte*) main::cur_item#3 ← phi( main::@2/(byte*) main::cur_item#2 )
(byte*) main::cur_item#1 ← (byte*) main::cur_item#3 + (byte) ITEM_SIZE#2
(byte) main::item#1 ← (byte) main::item#3 + rangenext(0,main::$0)
(bool~) main::$5 ← (byte) main::item#1 != rangelast(0,main::$0)
if((bool~) main::$5) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@3
return
to:@return
@1: scope:[] from @begin
(byte) ITEM_SIZE#5 ← phi( @begin/(byte) ITEM_SIZE#0 )
(byte) ITEM_COUNT#2 ← phi( @begin/(byte) ITEM_COUNT#0 )
call main
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @begin
(label) @end
(byte) ITEM_COUNT
(byte) ITEM_COUNT#0
(byte) ITEM_COUNT#1
(byte) ITEM_COUNT#2
(byte) ITEM_SIZE
(byte) ITEM_SIZE#0
(byte) ITEM_SIZE#1
(byte) ITEM_SIZE#2
(byte) ITEM_SIZE#3
(byte) ITEM_SIZE#4
(byte) ITEM_SIZE#5
(byte[$0]) items
(byte[$0]) items#0
(void()) main()
(byte/signed word/word/dword/signed dword~) main::$0
(byte/signed word/word/dword/signed dword~) main::$1
(byte~) main::$2
(byte~) main::$3
(bool~) main::$4
(bool~) main::$5
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte*) main::cur_item
(byte*) main::cur_item#0
(byte*) main::cur_item#1
(byte*) main::cur_item#2
(byte*) main::cur_item#3
(byte*) main::cur_item#4
(byte) main::item
(byte) main::item#0
(byte) main::item#1
(byte) main::item#2
(byte) main::item#3
(byte) main::item#4
(byte) main::sub
(byte) main::sub#0
(byte) main::sub#1
(byte) main::sub#2
OPTIMIZING CONTROL FLOW GRAPH
Culled Empty Block (label) @2
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: ITEM_COUNT#1 ITEM_COUNT#2
Not aliassing across scopes: ITEM_SIZE#3 ITEM_SIZE#5
Not aliassing across scopes: main::cur_item#0 items#0
Alias (byte*) main::cur_item#2 = (byte*) main::cur_item#3
Alias (byte) ITEM_SIZE#2 = (byte) ITEM_SIZE#4
Alias (byte) main::item#2 = (byte) main::item#3
Alias (byte) ITEM_COUNT#0 = (byte) ITEM_COUNT#2
Alias (byte) ITEM_SIZE#0 = (byte) ITEM_SIZE#5
Succesful SSA optimization Pass2AliasElimination
Not aliassing across scopes: ITEM_COUNT#1 ITEM_COUNT#0
Not aliassing across scopes: ITEM_SIZE#3 ITEM_SIZE#0
Not aliassing across scopes: main::cur_item#0 items#0
Self Phi Eliminated (byte) main::item#2
Self Phi Eliminated (byte*) main::cur_item#2
Self Phi Eliminated (byte) ITEM_SIZE#2
Succesful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) ITEM_COUNT#1 (byte) ITEM_COUNT#0
Redundant Phi (byte) ITEM_SIZE#3 (byte) ITEM_SIZE#0
Redundant Phi (byte) main::item#2 (byte) main::item#4
Redundant Phi (byte*) main::cur_item#2 (byte*) main::cur_item#4
Redundant Phi (byte) ITEM_SIZE#2 (byte) ITEM_SIZE#1
Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) main::$4 if((byte) main::sub#1!=rangelast(0,main::$1)) goto main::@2
Simple Condition (bool~) main::$5 if((byte) main::item#1!=rangelast(0,main::$0)) goto main::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) ITEM_COUNT#0 = 2
Constant (const byte) ITEM_SIZE#0 = 5
Constant (const byte[$0]) items#0 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
Constant (const byte) main::item#0 = 0
Constant (const byte) main::sub#0 = 0
Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte[$0]) main::cur_item#0 = items#0
Constant (const byte/signed word/word/dword/signed dword) main::$0 = ITEM_COUNT#0-1
Succesful SSA optimization Pass2ConstantIdentification
Resolved ranged next value main::item#1 ← ++ main::item#4 to ++
Resolved ranged comparison value if(main::item#1!=rangelast(0,main::$0)) goto main::@1 to (const byte/signed word/word/dword/signed dword) main::$0+(byte/signed byte/word/signed word/dword/signed dword) 1
Self Phi Eliminated (byte) ITEM_SIZE#1
Succesful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) ITEM_SIZE#1 (const byte) ITEM_SIZE#0
Succesful SSA optimization Pass2RedundantPhiElimination
Constant (const byte/signed word/word/dword/signed dword) main::$1 = ITEM_SIZE#0-1
Succesful SSA optimization Pass2ConstantIdentification
Resolved ranged next value main::sub#1 ← ++ main::sub#2 to ++
Resolved ranged comparison value if(main::sub#1!=rangelast(0,main::$1)) goto main::@2 to (const byte/signed word/word/dword/signed dword) main::$1+(byte/signed byte/word/signed word/dword/signed dword) 1
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const byte) main::item#0
Inlining constant with var siblings (const byte) main::item#0
Inlining constant with var siblings (const byte) main::sub#0
Inlining constant with var siblings (const byte) main::sub#0
Inlining constant with var siblings (const byte[$0]) main::cur_item#0
Inlining constant with var siblings (const byte[$0]) main::cur_item#0
Constant inlined main::sub#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::$1 = (const byte) ITEM_SIZE#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined main::cur_item#0 = (const byte[$0]) items#0
Constant inlined main::$0 = (const byte) ITEM_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined main::item#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::@2 main::@3 main::@return
Added new block during phi lifting main::@5(between main::@3 and main::@1)
Added new block during phi lifting main::@6(between main::@2 and main::@2)
Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return main::@5 main::@6
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
CALL GRAPH
Calls in [] to main:2
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
Coalesced [16] main::item#5 ← main::item#1
Coalesced [17] main::cur_item#5 ← main::cur_item#1
Coalesced [18] main::sub#3 ← main::sub#1
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return
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...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@1
@1: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main [ ] ( )
to:@end
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
[4] phi() [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main main::@3
[5] (byte*) main::cur_item#4 ← phi( main/(const byte[$0]) items#0 main::@3/(byte*) main::cur_item#1 ) [ main::item#4 main::cur_item#4 ] ( main:2 [ main::item#4 main::cur_item#4 ] )
[5] (byte) main::item#4 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@3/(byte) main::item#1 ) [ main::item#4 main::cur_item#4 ] ( main:2 [ main::item#4 main::cur_item#4 ] )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[6] (byte) main::sub#2 ← phi( main::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::sub#1 ) [ main::item#4 main::cur_item#4 main::sub#2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 ] )
[7] (byte~) main::$2 ← (byte) main::item#4 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] )
[8] (byte~) main::$3 ← (byte~) main::$2 | (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] )
[9] *((byte*) main::cur_item#4 + (byte) main::sub#2) ← (byte~) main::$3 [ main::item#4 main::cur_item#4 main::sub#2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 ] )
[10] (byte) main::sub#1 ← ++ (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] )
[11] if((byte) main::sub#1!=(const byte) ITEM_SIZE#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] )
to:main::@3
main::@3: scope:[main] from main::@2
[12] (byte*) main::cur_item#1 ← (byte*) main::cur_item#4 + (const byte) ITEM_SIZE#0 [ main::item#4 main::cur_item#1 ] ( main:2 [ main::item#4 main::cur_item#1 ] )
[13] (byte) main::item#1 ← ++ (byte) main::item#4 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] )
[14] if((byte) main::item#1!=(const byte) ITEM_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] )
to:main::@return
main::@return: scope:[main] from main::@3
[15] return [ ] ( main:2 [ ] )
to:@return
DOMINATORS
@begin dominated by @begin
@1 dominated by @1 @begin
@end dominated by @1 @begin @end
main dominated by @1 @begin main
main::@1 dominated by @1 @begin main::@1 main
main::@2 dominated by @1 @begin main::@1 main::@2 main
main::@3 dominated by @1 @begin main::@1 main::@2 main main::@3
main::@return dominated by main::@return @1 @begin main::@1 main::@2 main main::@3
NATURAL LOOPS
Found back edge: Loop head: main::@2 tails: main::@2 blocks: null
Found back edge: Loop head: main::@1 tails: main::@3 blocks: null
Populated: Loop head: main::@2 tails: main::@2 blocks: main::@2
Populated: Loop head: main::@1 tails: main::@3 blocks: main::@3 main::@2 main::@1
Loop head: main::@2 tails: main::@2 blocks: main::@2
Loop head: main::@1 tails: main::@3 blocks: main::@3 main::@2 main::@1
NATURAL LOOPS WITH DEPTH
Found 0 loops in scope []
Found 2 loops in scope [main]
Loop head: main::@2 tails: main::@2 blocks: main::@2
Loop head: main::@1 tails: main::@3 blocks: main::@3 main::@2 main::@1
Loop head: main::@2 tails: main::@2 blocks: main::@2 depth: 2
Loop head: main::@1 tails: main::@3 blocks: main::@3 main::@2 main::@1 depth: 1
VARIABLE REGISTER WEIGHTS
(byte) ITEM_COUNT
(byte) ITEM_SIZE
(byte[$0]) items
(void()) main()
(byte~) main::$2 202.0
(byte~) main::$3 202.0
(byte*) main::cur_item
(byte*) main::cur_item#1 7.333333333333333
(byte*) main::cur_item#4 17.571428571428573
(byte) main::item
(byte) main::item#1 16.5
(byte) main::item#4 15.375
(byte) main::sub
(byte) main::sub#1 151.5
(byte) main::sub#2 101.0
Initial phi equivalence classes
[ main::item#4 main::item#1 ]
[ main::cur_item#4 main::cur_item#1 ]
[ main::sub#2 main::sub#1 ]
Added variable main::$2 to zero page equivalence class [ main::$2 ]
Added variable main::$3 to zero page equivalence class [ main::$3 ]
Complete equivalence classes
[ main::item#4 main::item#1 ]
[ main::cur_item#4 main::cur_item#1 ]
[ main::sub#2 main::sub#1 ]
[ main::$2 ]
[ main::$3 ]
Allocated zp ZP_BYTE:2 [ main::item#4 main::item#1 ]
Allocated zp ZP_WORD:3 [ main::cur_item#4 main::cur_item#1 ]
Allocated zp ZP_BYTE:5 [ main::sub#2 main::sub#1 ]
Allocated zp ZP_BYTE:6 [ main::$2 ]
Allocated zp ZP_BYTE:7 [ main::$3 ]
INITIAL ASM
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.const ITEM_COUNT = 2
.const ITEM_SIZE = 5
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 [2] call main [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
main_from_b1:
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
.label _2 = 6
.label _3 = 7
.label sub = 5
.label cur_item = 3
.label item = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (byte*) main::cur_item#4 = (const byte[$0]) items#0 [phi:main->main::@1#0] -- pbuz1=pbuc1
lda #<items
sta cur_item
lda #>items
sta cur_item+1
//SEG12 [5] phi (byte) main::item#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1
lda #0
sta item
jmp b1
//SEG13 [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
b1_from_b3:
//SEG14 [5] phi (byte*) main::cur_item#4 = (byte*) main::cur_item#1 [phi:main::@3->main::@1#0] -- register_copy
//SEG15 [5] phi (byte) main::item#4 = (byte) main::item#1 [phi:main::@3->main::@1#1] -- register_copy
jmp b1
//SEG16 main::@1
b1:
//SEG17 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
//SEG18 [6] phi (byte) main::sub#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
lda #0
sta sub
jmp b2
//SEG19 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
b2_from_b2:
//SEG20 [6] phi (byte) main::sub#2 = (byte) main::sub#1 [phi:main::@2->main::@2#0] -- register_copy
jmp b2
//SEG21 main::@2
b2:
//SEG22 [7] (byte~) main::$2 ← (byte) main::item#4 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ) -- vbuz1=vbuz2_rol_4
lda item
asl
asl
asl
asl
sta _2
//SEG23 [8] (byte~) main::$3 ← (byte~) main::$2 | (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] ) -- vbuz1=vbuz2_bor_vbuz3
lda _2
ora sub
sta _3
//SEG24 [9] *((byte*) main::cur_item#4 + (byte) main::sub#2) ← (byte~) main::$3 [ main::item#4 main::cur_item#4 main::sub#2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 ] ) -- pbuz1_derefidx_vbuz2=vbuz3
lda _3
ldy sub
sta (cur_item),y
//SEG25 [10] (byte) main::sub#1 ← ++ (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] ) -- vbuz1=_inc_vbuz1
inc sub
//SEG26 [11] if((byte) main::sub#1!=(const byte) ITEM_SIZE#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda sub
cmp #ITEM_SIZE-1+1
bne b2_from_b2
jmp b3
//SEG27 main::@3
b3:
//SEG28 [12] (byte*) main::cur_item#1 ← (byte*) main::cur_item#4 + (const byte) ITEM_SIZE#0 [ main::item#4 main::cur_item#1 ] ( main:2 [ main::item#4 main::cur_item#1 ] ) -- pbuz1=pbuz1_plus_vbuc1
lda cur_item
clc
adc #ITEM_SIZE
sta cur_item
bcc !+
inc cur_item+1
!:
//SEG29 [13] (byte) main::item#1 ← ++ (byte) main::item#4 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] ) -- vbuz1=_inc_vbuz1
inc item
//SEG30 [14] if((byte) main::item#1!=(const byte) ITEM_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda item
cmp #ITEM_COUNT-1+1
bne b1_from_b3
jmp breturn
//SEG31 main::@return
breturn:
//SEG32 [15] return [ ] ( main:2 [ ] )
rts
}
items: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] (byte~) main::$2 ← (byte) main::item#4 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::item#4 main::item#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::sub#2 main::sub#1 ]
Statement [12] (byte*) main::cur_item#1 ← (byte*) main::cur_item#4 + (const byte) ITEM_SIZE#0 [ main::item#4 main::cur_item#1 ] ( main:2 [ main::item#4 main::cur_item#1 ] ) always clobbers reg byte a
Statement [7] (byte~) main::$2 ← (byte) main::item#4 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ) always clobbers reg byte a
Statement [12] (byte*) main::cur_item#1 ← (byte*) main::cur_item#4 + (const byte) ITEM_SIZE#0 [ main::item#4 main::cur_item#1 ] ( main:2 [ main::item#4 main::cur_item#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::item#4 main::item#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:3 [ main::cur_item#4 main::cur_item#1 ] : zp ZP_WORD:3 ,
Potential registers zp ZP_BYTE:5 [ main::sub#2 main::sub#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:6 [ main::$2 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:7 [ main::$3 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 252.5: zp ZP_BYTE:5 [ main::sub#2 main::sub#1 ] 202: zp ZP_BYTE:6 [ main::$2 ] 202: zp ZP_BYTE:7 [ main::$3 ] 31.88: zp ZP_BYTE:2 [ main::item#4 main::item#1 ] 24.9: zp ZP_WORD:3 [ main::cur_item#4 main::cur_item#1 ]
Uplift Scope []
Uplifting [main] best 4418 combination reg byte y [ main::sub#2 main::sub#1 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] reg byte x [ main::item#4 main::item#1 ] zp ZP_WORD:3 [ main::cur_item#4 main::cur_item#1 ]
Limited combination testing to 100 combinations of 144 possible.
Uplifting [] best 4418 combination
Allocated (was zp ZP_WORD:3) zp ZP_WORD:2 [ main::cur_item#4 main::cur_item#1 ]
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.const ITEM_COUNT = 2
.const ITEM_SIZE = 5
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 [2] call main [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
main_from_b1:
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
.label cur_item = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (byte*) main::cur_item#4 = (const byte[$0]) items#0 [phi:main->main::@1#0] -- pbuz1=pbuc1
lda #<items
sta cur_item
lda #>items
sta cur_item+1
//SEG12 [5] phi (byte) main::item#4 = (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::@3 to main::@1 [phi:main::@3->main::@1]
b1_from_b3:
//SEG14 [5] phi (byte*) main::cur_item#4 = (byte*) main::cur_item#1 [phi:main::@3->main::@1#0] -- register_copy
//SEG15 [5] phi (byte) main::item#4 = (byte) main::item#1 [phi:main::@3->main::@1#1] -- register_copy
jmp b1
//SEG16 main::@1
b1:
//SEG17 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
//SEG18 [6] phi (byte) main::sub#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
ldy #0
jmp b2
//SEG19 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
b2_from_b2:
//SEG20 [6] phi (byte) main::sub#2 = (byte) main::sub#1 [phi:main::@2->main::@2#0] -- register_copy
jmp b2
//SEG21 main::@2
b2:
//SEG22 [7] (byte~) main::$2 ← (byte) main::item#4 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ) -- vbuaa=vbuxx_rol_4
txa
asl
asl
asl
asl
//SEG23 [8] (byte~) main::$3 ← (byte~) main::$2 | (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] ) -- vbuaa=vbuaa_bor_vbuyy
sty $ff
ora $ff
//SEG24 [9] *((byte*) main::cur_item#4 + (byte) main::sub#2) ← (byte~) main::$3 [ main::item#4 main::cur_item#4 main::sub#2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 ] ) -- pbuz1_derefidx_vbuyy=vbuaa
sta (cur_item),y
//SEG25 [10] (byte) main::sub#1 ← ++ (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG26 [11] if((byte) main::sub#1!=(const byte) ITEM_SIZE#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] ) -- vbuyy_neq_vbuc1_then_la1
cpy #ITEM_SIZE-1+1
bne b2_from_b2
jmp b3
//SEG27 main::@3
b3:
//SEG28 [12] (byte*) main::cur_item#1 ← (byte*) main::cur_item#4 + (const byte) ITEM_SIZE#0 [ main::item#4 main::cur_item#1 ] ( main:2 [ main::item#4 main::cur_item#1 ] ) -- pbuz1=pbuz1_plus_vbuc1
lda cur_item
clc
adc #ITEM_SIZE
sta cur_item
bcc !+
inc cur_item+1
!:
//SEG29 [13] (byte) main::item#1 ← ++ (byte) main::item#4 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] ) -- vbuxx=_inc_vbuxx
inx
//SEG30 [14] if((byte) main::item#1!=(const byte) ITEM_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] ) -- vbuxx_neq_vbuc1_then_la1
cpx #ITEM_COUNT-1+1
bne b1_from_b3
jmp breturn
//SEG31 main::@return
breturn:
//SEG32 [15] return [ ] ( main:2 [ ] )
rts
}
items: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing label b2_from_b2 with b2
Replacing label b1_from_b3 with b1
Removing instruction bbegin:
Removing instruction b1_from_bbegin:
Removing instruction main_from_b1:
Removing instruction bend_from_b1:
Removing instruction b1_from_b3:
Removing instruction b2_from_b1:
Removing instruction b2_from_b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b1:
Removing instruction bend:
Removing instruction b1_from_main:
Removing instruction b3:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp b1
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte) ITEM_COUNT
(const byte) ITEM_COUNT#0 ITEM_COUNT = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) ITEM_SIZE
(const byte) ITEM_SIZE#0 ITEM_SIZE = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte[$0]) items
(const byte[$0]) items#0 items = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(void()) main()
(byte~) main::$2 reg byte a 202.0
(byte~) main::$3 reg byte a 202.0
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte*) main::cur_item
(byte*) main::cur_item#1 cur_item zp ZP_WORD:2 7.333333333333333
(byte*) main::cur_item#4 cur_item zp ZP_WORD:2 17.571428571428573
(byte) main::item
(byte) main::item#1 reg byte x 16.5
(byte) main::item#4 reg byte x 15.375
(byte) main::sub
(byte) main::sub#1 reg byte y 151.5
(byte) main::sub#2 reg byte y 101.0
reg byte x [ main::item#4 main::item#1 ]
zp ZP_WORD:2 [ main::cur_item#4 main::cur_item#1 ]
reg byte y [ main::sub#2 main::sub#1 ]
reg byte a [ main::$2 ]
reg byte a [ main::$3 ]
FINAL ASSEMBLER
Score: 3422
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.const ITEM_COUNT = 2
.const ITEM_SIZE = 5
//SEG2 @begin
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
//SEG4 @1
//SEG5 [2] call main [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
//SEG8 @end
//SEG9 main
main: {
.label cur_item = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
//SEG11 [5] phi (byte*) main::cur_item#4 = (const byte[$0]) items#0 [phi:main->main::@1#0] -- pbuz1=pbuc1
lda #<items
sta cur_item
lda #>items
sta cur_item+1
//SEG12 [5] phi (byte) main::item#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#1] -- vbuxx=vbuc1
ldx #0
//SEG13 [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
//SEG14 [5] phi (byte*) main::cur_item#4 = (byte*) main::cur_item#1 [phi:main::@3->main::@1#0] -- register_copy
//SEG15 [5] phi (byte) main::item#4 = (byte) main::item#1 [phi:main::@3->main::@1#1] -- register_copy
//SEG16 main::@1
b1:
//SEG17 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
//SEG18 [6] phi (byte) main::sub#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main::@1->main::@2#0] -- vbuyy=vbuc1
ldy #0
//SEG19 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
//SEG20 [6] phi (byte) main::sub#2 = (byte) main::sub#1 [phi:main::@2->main::@2#0] -- register_copy
//SEG21 main::@2
b2:
//SEG22 [7] (byte~) main::$2 ← (byte) main::item#4 << (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$2 ] ) -- vbuaa=vbuxx_rol_4
txa
asl
asl
asl
asl
//SEG23 [8] (byte~) main::$3 ← (byte~) main::$2 | (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 main::$3 ] ) -- vbuaa=vbuaa_bor_vbuyy
sty $ff
ora $ff
//SEG24 [9] *((byte*) main::cur_item#4 + (byte) main::sub#2) ← (byte~) main::$3 [ main::item#4 main::cur_item#4 main::sub#2 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#2 ] ) -- pbuz1_derefidx_vbuyy=vbuaa
sta (cur_item),y
//SEG25 [10] (byte) main::sub#1 ← ++ (byte) main::sub#2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] ) -- vbuyy=_inc_vbuyy
iny
//SEG26 [11] if((byte) main::sub#1!=(const byte) ITEM_SIZE#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@2 [ main::item#4 main::cur_item#4 main::sub#1 ] ( main:2 [ main::item#4 main::cur_item#4 main::sub#1 ] ) -- vbuyy_neq_vbuc1_then_la1
cpy #ITEM_SIZE-1+1
bne b2
//SEG27 main::@3
//SEG28 [12] (byte*) main::cur_item#1 ← (byte*) main::cur_item#4 + (const byte) ITEM_SIZE#0 [ main::item#4 main::cur_item#1 ] ( main:2 [ main::item#4 main::cur_item#1 ] ) -- pbuz1=pbuz1_plus_vbuc1
lda cur_item
clc
adc #ITEM_SIZE
sta cur_item
bcc !+
inc cur_item+1
!:
//SEG29 [13] (byte) main::item#1 ← ++ (byte) main::item#4 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] ) -- vbuxx=_inc_vbuxx
inx
//SEG30 [14] if((byte) main::item#1!=(const byte) ITEM_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1+(byte/signed byte/word/signed word/dword/signed dword) 1) goto main::@1 [ main::item#1 main::cur_item#1 ] ( main:2 [ main::item#1 main::cur_item#1 ] ) -- vbuxx_neq_vbuc1_then_la1
cpx #ITEM_COUNT-1+1
bne b1
//SEG31 main::@return
//SEG32 [15] return [ ] ( main:2 [ ] )
rts
}
items: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

View File

@ -0,0 +1,31 @@
(label) @1
(label) @begin
(label) @end
(byte) ITEM_COUNT
(const byte) ITEM_COUNT#0 ITEM_COUNT = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) ITEM_SIZE
(const byte) ITEM_SIZE#0 ITEM_SIZE = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte[$0]) items
(const byte[$0]) items#0 items = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(void()) main()
(byte~) main::$2 reg byte a 202.0
(byte~) main::$3 reg byte a 202.0
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte*) main::cur_item
(byte*) main::cur_item#1 cur_item zp ZP_WORD:2 7.333333333333333
(byte*) main::cur_item#4 cur_item zp ZP_WORD:2 17.571428571428573
(byte) main::item
(byte) main::item#1 reg byte x 16.5
(byte) main::item#4 reg byte x 15.375
(byte) main::sub
(byte) main::sub#1 reg byte y 151.5
(byte) main::sub#2 reg byte y 101.0
reg byte x [ main::item#4 main::item#1 ]
zp ZP_WORD:2 [ main::cur_item#4 main::cur_item#1 ]
reg byte y [ main::sub#2 main::sub#1 ]
reg byte a [ main::$2 ]
reg byte a [ main::$3 ]

View File

@ -11,7 +11,7 @@ main: scope:[main] from @1
[4] *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) 'c' [ ] ( main:2 [ ] ) [4] *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) 'c' [ ] ( main:2 [ ] )
[5] *((const byte*) SCREEN#0) ← *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ ] ( main:2 [ ] ) [5] *((const byte*) SCREEN#0) ← *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ ] ( main:2 [ ] )
[6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] )
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const string) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const byte[]) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] )
to:main::@return to:main::@return
main::@return: scope:[main] from main main::@return: scope:[main] from main
[8] return [ ] ( main:2 [ ] ) [8] return [ ] ( main:2 [ ] )

View File

@ -114,7 +114,7 @@ Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0
Succesful SSA optimization Pass2RedundantPhiElimination Succesful SSA optimization Pass2RedundantPhiElimination
Constant (const byte[3]) b#0 = { fill( 3, 0) } Constant (const byte[3]) b#0 = { fill( 3, 0) }
Constant (const byte[]) c#0 = { 'c', 'm', 'l' } Constant (const byte[]) c#0 = { 'c', 'm', 'l' }
Constant (const string) d#0 = $0 Constant (const byte[]) d#0 = $0
Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte*) SCREEN#0 = ((byte*))1024
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) main::$0 = SCREEN#0+1 Constant (const byte*) main::$0 = SCREEN#0+1
@ -127,7 +127,7 @@ Consolidated array index constant in *(d#0+2)
Succesful SSA optimization Pass2ConstantAdditionElimination Succesful SSA optimization Pass2ConstantAdditionElimination
OPTIMIZING CONTROL FLOW GRAPH OPTIMIZING CONTROL FLOW GRAPH
Constant inlined main::$1 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined main::$1 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined $0 = (const string) d#0 Constant inlined $0 = (const byte[]) d#0
Constant inlined main::$0 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$0 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @1 @end main main::@return Block Sequence Planned @begin @1 @end main main::@return
@ -161,7 +161,7 @@ main: scope:[main] from @1
[4] *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) 'c' [ ] ( main:2 [ ] ) [4] *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) 'c' [ ] ( main:2 [ ] )
[5] *((const byte*) SCREEN#0) ← *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ ] ( main:2 [ ] ) [5] *((const byte*) SCREEN#0) ← *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ ] ( main:2 [ ] )
[6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] )
[7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const string) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const byte[]) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] )
to:main::@return to:main::@return
main::@return: scope:[main] from main main::@return: scope:[main] from main
[8] return [ ] ( main:2 [ ] ) [8] return [ ] ( main:2 [ ] )
@ -223,7 +223,7 @@ main: {
//SEG11 [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2 //SEG11 [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2
lda c+1 lda c+1
sta SCREEN+1 sta SCREEN+1
//SEG12 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const string) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2 //SEG12 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const byte[]) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2
lda d+2 lda d+2
sta SCREEN+2 sta SCREEN+2
jmp breturn jmp breturn
@ -240,7 +240,7 @@ REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) 'c' [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [4] *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte) 'c' [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [5] *((const byte*) SCREEN#0) ← *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [5] *((const byte*) SCREEN#0) ← *((const byte[3]) b#0+(byte/signed byte/word/signed word/dword/signed dword) 0) [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const string) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const byte[]) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) always clobbers reg byte a
REGISTER UPLIFT SCOPES REGISTER UPLIFT SCOPES
Uplift Scope [main] Uplift Scope [main]
@ -281,7 +281,7 @@ main: {
//SEG11 [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2 //SEG11 [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2
lda c+1 lda c+1
sta SCREEN+1 sta SCREEN+1
//SEG12 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const string) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2 //SEG12 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const byte[]) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2
lda d+2 lda d+2
sta SCREEN+2 sta SCREEN+2
jmp breturn jmp breturn
@ -321,7 +321,7 @@ FINAL SYMBOL TABLE
(byte[]) c (byte[]) c
(const byte[]) c#0 c = { (byte) 'c', (byte) 'm', (byte) 'l' } (const byte[]) c#0 c = { (byte) 'c', (byte) 'm', (byte) 'l' }
(byte[]) d (byte[]) d
(const string) d#0 d = (string) "cml" (const byte[]) d#0 d = (string) "cml"
(void()) main() (void()) main()
(label) main::@return (label) main::@return
@ -353,7 +353,7 @@ main: {
//SEG11 [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2 //SEG11 [6] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← *((const byte[]) c#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2
lda c+1 lda c+1
sta SCREEN+1 sta SCREEN+1
//SEG12 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const string) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2 //SEG12 [7] *((const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← *((const byte[]) d#0+(byte/signed byte/word/signed word/dword/signed dword) 2) [ ] ( main:2 [ ] ) -- _deref_pbuc1=_deref_pbuc2
lda d+2 lda d+2
sta SCREEN+2 sta SCREEN+2
//SEG13 main::@return //SEG13 main::@return

View File

@ -8,7 +8,7 @@
(byte[]) c (byte[]) c
(const byte[]) c#0 c = { (byte) 'c', (byte) 'm', (byte) 'l' } (const byte[]) c#0 c = { (byte) 'c', (byte) 'm', (byte) 'l' }
(byte[]) d (byte[]) d
(const string) d#0 d = (string) "cml" (const byte[]) d#0 d = (string) "cml"
(void()) main() (void()) main()
(label) main::@return (label) main::@return

View File

@ -26,10 +26,11 @@ void main() {
} while (x<(x1+1)); } while (x<(x1+1));
} }
SYMBOLS SYMBOLS
(word/signed word/dword/signed dword~) $0
(label) @1 (label) @1
(label) @begin (label) @begin
(label) @end (label) @end
(byte[1000]) SCREEN (byte[$0]) SCREEN
(byte) STAR (byte) STAR
(void()) main() (void()) main()
(byte~) main::$0 (byte~) main::$0
@ -64,11 +65,12 @@ SYMBOLS
(byte) main::y1 (byte) main::y1
(byte) main::yd (byte) main::yd
Promoting word/signed word/dword/signed dword to byte[1000] in SCREEN ← ((byte*)) 1024 Promoting word/signed word/dword/signed dword to byte[$0] in SCREEN ← ((byte*)) 1024
INITIAL CONTROL FLOW GRAPH INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from @begin: scope:[] from
(byte) STAR ← (byte/signed byte/word/signed word/dword/signed dword) 81 (byte) STAR ← (byte/signed byte/word/signed word/dword/signed dword) 81
(byte[1000]) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 (word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 25
(byte[$0]) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@1 to:@1
main: scope:[main] from main: scope:[main] from
(byte) main::x0 ← (byte/signed byte/word/signed word/dword/signed dword) 4 (byte) main::x0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
@ -84,7 +86,7 @@ main: scope:[main] from
(byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$2 (byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$2
(byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40
(byte*~) main::$4 ← (byte[1000]) SCREEN + (byte/signed word/word/dword/signed dword~) main::$3 (byte*~) main::$4 ← (byte[$0]) SCREEN + (byte/signed word/word/dword/signed dword~) main::$3
(byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x (byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x
(byte*) main::cursor ← (byte*~) main::$5 (byte*) main::cursor ← (byte*~) main::$5
to:main::@1 to:main::@1
@ -123,6 +125,7 @@ main::@return: scope:[main] from main::@4
to:@end to:@end
@end: scope:[] from @1 @end: scope:[] from @1
Eliminating unused variable (word/signed word/dword/signed dword~) $0 and assignment [1] (word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 25
Removing empty block main::@4 Removing empty block main::@4
PROCEDURE MODIFY VARIABLE ANALYSIS PROCEDURE MODIFY VARIABLE ANALYSIS
@ -133,7 +136,7 @@ Completing Phi functions...
CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from @begin: scope:[] from
(byte) STAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 81 (byte) STAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 81
(byte[1000]) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte[$0]) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@1 to:@1
main: scope:[main] from @1 main: scope:[main] from @1
(byte) STAR#2 ← phi( @1/(byte) STAR#4 ) (byte) STAR#2 ← phi( @1/(byte) STAR#4 )
@ -150,7 +153,7 @@ main: scope:[main] from @1
(byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word/dword/signed dword) 2 (byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::e#0 ← (byte/signed word/word/dword/signed dword~) main::$2 (byte) main::e#0 ← (byte/signed word/word/dword/signed dword~) main::$2
(byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word/dword/signed dword) 40 (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word/dword/signed dword) 40
(byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte/signed word/word/dword/signed dword~) main::$3 (byte*~) main::$4 ← (byte[$0]) SCREEN#0 + (byte/signed word/word/dword/signed dword~) main::$3
(byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x#0 (byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x#0
(byte*) main::cursor#0 ← (byte*~) main::$5 (byte*) main::cursor#0 ← (byte*~) main::$5
to:main::@1 to:main::@1
@ -219,8 +222,8 @@ SYMBOL TABLE SSA
(label) @2 (label) @2
(label) @begin (label) @begin
(label) @end (label) @end
(byte[1000]) SCREEN (byte[$0]) SCREEN
(byte[1000]) SCREEN#0 (byte[$0]) SCREEN#0
(byte) STAR (byte) STAR
(byte) STAR#0 (byte) STAR#0
(byte) STAR#1 (byte) STAR#1
@ -491,7 +494,7 @@ Loop head: main::@1 tails: main::@2 blocks: main::@2 main::@1 main::@3 depth: 1
VARIABLE REGISTER WEIGHTS VARIABLE REGISTER WEIGHTS
(byte[1000]) SCREEN (byte[$0]) SCREEN
(byte) STAR (byte) STAR
(void()) main() (void()) main()
(byte*) main::cursor (byte*) main::cursor
@ -831,7 +834,7 @@ FINAL SYMBOL TABLE
(label) @1 (label) @1
(label) @begin (label) @begin
(label) @end (label) @end
(byte[1000]) SCREEN (byte[$0]) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte) STAR (byte) STAR
(const byte) STAR#0 STAR = (byte/signed byte/word/signed word/dword/signed dword) 81 (const byte) STAR#0 STAR = (byte/signed byte/word/signed word/dword/signed dword) 81

View File

@ -1,7 +1,7 @@
(label) @1 (label) @1
(label) @begin (label) @begin
(label) @end (label) @end
(byte[1000]) SCREEN (byte[$0]) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte) STAR (byte) STAR
(const byte) STAR#0 STAR = (byte/signed byte/word/signed word/dword/signed dword) 81 (const byte) STAR#0 STAR = (byte/signed byte/word/signed word/dword/signed dword) 81

View File

@ -30,20 +30,21 @@ SYMBOLS
(label) @begin (label) @begin
(label) @end (label) @end
(void()) main() (void()) main()
(byte~) main::$0 (word/signed word/dword/signed dword~) main::$0
(byte~) main::$1 (byte~) main::$1
(byte/signed word/word/dword/signed dword~) main::$10 (bool~) main::$10
(word/signed dword/dword~) main::$11 (byte/signed word/word/dword/signed dword~) main::$11
(byte~) main::$12 (word/signed dword/dword~) main::$12
(byte/signed word/word/dword/signed dword~) main::$13 (byte~) main::$13
(bool~) main::$14 (byte/signed word/word/dword/signed dword~) main::$14
(byte/signed word/word/dword/signed dword~) main::$2 (bool~) main::$15
(byte~) main::$2
(byte/signed word/word/dword/signed dword~) main::$3 (byte/signed word/word/dword/signed dword~) main::$3
(byte/signed word/word/dword/signed dword~) main::$4 (byte/signed word/word/dword/signed dword~) main::$4
(byte/signed word/word/dword/signed dword~) main::$5 (byte/signed word/word/dword/signed dword~) main::$5
(word/signed dword/dword~) main::$6 (byte/signed word/word/dword/signed dword~) main::$6
(byte~) main::$7 (word/signed dword/dword~) main::$7
(bool~) main::$8 (byte~) main::$8
(bool~) main::$9 (bool~) main::$9
(label) main::@1 (label) main::@1
(label) main::@2 (label) main::@2
@ -53,7 +54,7 @@ SYMBOLS
(byte) main::STAR (byte) main::STAR
(byte) main::e (byte) main::e
(word) main::idx (word) main::idx
(byte[1000]) main::screen (byte[main::$0]) main::screen
(byte) main::x (byte) main::x
(byte) main::x0 (byte) main::x0
(byte) main::x1 (byte) main::x1
@ -63,53 +64,54 @@ SYMBOLS
(byte) main::y1 (byte) main::y1
(byte) main::yd (byte) main::yd
Promoting word/signed word/dword/signed dword to byte[1000] in main::screen ← ((byte*)) 1024 Promoting word/signed word/dword/signed dword to byte[main::$0] in main::screen ← ((byte*)) 1024
INITIAL CONTROL FLOW GRAPH INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from @begin: scope:[] from
to:@1 to:@1
main: scope:[main] from main: scope:[main] from
(byte) main::STAR ← (byte/signed byte/word/signed word/dword/signed dword) 81 (byte) main::STAR ← (byte/signed byte/word/signed word/dword/signed dword) 81
(byte[1000]) main::screen ← ((byte*)) (word/signed word/dword/signed dword) 1024 (word/signed word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 25
(byte[main::$0]) main::screen ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte) main::x0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) main::x0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) main::y0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) main::y0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) main::x1 ← (byte/signed byte/word/signed word/dword/signed dword) 39 (byte) main::x1 ← (byte/signed byte/word/signed word/dword/signed dword) 39
(byte) main::y1 ← (byte/signed byte/word/signed word/dword/signed dword) 24 (byte) main::y1 ← (byte/signed byte/word/signed word/dword/signed dword) 24
(byte~) main::$0 ← (byte) main::x1 - (byte) main::x0 (byte~) main::$1 ← (byte) main::x1 - (byte) main::x0
(byte) main::xd ← (byte~) main::$0 (byte) main::xd ← (byte~) main::$1
(byte~) main::$1 ← (byte) main::y1 - (byte) main::y0 (byte~) main::$2 ← (byte) main::y1 - (byte) main::y0
(byte) main::yd ← (byte~) main::$1 (byte) main::yd ← (byte~) main::$2
(byte) main::x ← (byte) main::x0 (byte) main::x ← (byte) main::x0
(byte) main::y ← (byte) main::y0 (byte) main::y ← (byte) main::y0
(byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2 (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::yd / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$2 (byte) main::e ← (byte/signed word/word/dword/signed dword~) main::$3
(byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40 (byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::y * (byte/signed byte/word/signed word/dword/signed dword) 40
(byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::x + (byte/signed word/word/dword/signed dword~) main::$3 (byte/signed word/word/dword/signed dword~) main::$5 ← (byte) main::x + (byte/signed word/word/dword/signed dword~) main::$4
(word) main::idx ← (byte/signed word/word/dword/signed dword~) main::$4 (word) main::idx ← (byte/signed word/word/dword/signed dword~) main::$5
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@2 main::@1: scope:[main] from main main::@2
*((byte[1000]) main::screen + (word) main::idx) ← (byte) main::STAR *((byte[main::$0]) main::screen + (word) main::idx) ← (byte) main::STAR
(byte/signed word/word/dword/signed dword~) main::$5 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::x + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::x ← (byte/signed word/word/dword/signed dword~) main::$5 (byte) main::x ← (byte/signed word/word/dword/signed dword~) main::$6
(word/signed dword/dword~) main::$6 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 1 (word/signed dword/dword~) main::$7 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 1
(word) main::idx ← (word/signed dword/dword~) main::$6 (word) main::idx ← (word/signed dword/dword~) main::$7
(byte~) main::$7 ← (byte) main::e + (byte) main::yd (byte~) main::$8 ← (byte) main::e + (byte) main::yd
(byte) main::e ← (byte~) main::$7 (byte) main::e ← (byte~) main::$8
(bool~) main::$8 ← (byte) main::xd < (byte) main::e (bool~) main::$9 ← (byte) main::xd < (byte) main::e
(bool~) main::$9 ← ! (bool~) main::$8 (bool~) main::$10 ← ! (bool~) main::$9
if((bool~) main::$9) goto main::@2 if((bool~) main::$10) goto main::@2
to:main::@3 to:main::@3
main::@2: scope:[main] from main::@1 main::@3 main::@2: scope:[main] from main::@1 main::@3
(byte/signed word/word/dword/signed dword~) main::$13 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte/signed word/word/dword/signed dword~) main::$14 ← (byte) main::x1 + (byte/signed byte/word/signed word/dword/signed dword) 1
(bool~) main::$14 ← (byte) main::x < (byte/signed word/word/dword/signed dword~) main::$13 (bool~) main::$15 ← (byte) main::x < (byte/signed word/word/dword/signed dword~) main::$14
if((bool~) main::$14) goto main::@1 if((bool~) main::$15) goto main::@1
to:main::@4 to:main::@4
main::@3: scope:[main] from main::@1 main::@3: scope:[main] from main::@1
(byte/signed word/word/dword/signed dword~) main::$10 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte/signed word/word/dword/signed dword~) main::$11 ← (byte) main::y + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::y ← (byte/signed word/word/dword/signed dword~) main::$10 (byte) main::y ← (byte/signed word/word/dword/signed dword~) main::$11
(word/signed dword/dword~) main::$11 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 40 (word/signed dword/dword~) main::$12 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 40
(word) main::idx ← (word/signed dword/dword~) main::$11 (word) main::idx ← (word/signed dword/dword~) main::$12
(byte~) main::$12 ← (byte) main::e - (byte) main::xd (byte~) main::$13 ← (byte) main::e - (byte) main::xd
(byte) main::e ← (byte~) main::$12 (byte) main::e ← (byte~) main::$13
to:main::@2 to:main::@2
main::@4: scope:[main] from main::@2 main::@4: scope:[main] from main::@2
to:main::@return to:main::@return
@ -121,6 +123,7 @@ main::@return: scope:[main] from main::@4
to:@end to:@end
@end: scope:[] from @1 @end: scope:[] from @1
Eliminating unused variable (word/signed word/dword/signed dword~) main::$0 and assignment [1] (word/signed word/dword/signed dword~) main::$0 ← (byte/signed byte/word/signed word/dword/signed dword) 40 * (byte/signed byte/word/signed word/dword/signed dword) 25
Removing empty block main::@4 Removing empty block main::@4
PROCEDURE MODIFY VARIABLE ANALYSIS PROCEDURE MODIFY VARIABLE ANALYSIS
@ -133,22 +136,22 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
to:@1 to:@1
main: scope:[main] from @1 main: scope:[main] from @1
(byte) main::STAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 81 (byte) main::STAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 81
(byte[1000]) main::screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte[main::$0]) main::screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte) main::x0#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) main::x0#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) main::y0#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) main::y0#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) main::x1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 39 (byte) main::x1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 39
(byte) main::y1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 24 (byte) main::y1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 24
(byte~) main::$0 ← (byte) main::x1#0 - (byte) main::x0#0 (byte~) main::$1 ← (byte) main::x1#0 - (byte) main::x0#0
(byte) main::xd#0 ← (byte~) main::$0 (byte) main::xd#0 ← (byte~) main::$1
(byte~) main::$1 ← (byte) main::y1#0 - (byte) main::y0#0 (byte~) main::$2 ← (byte) main::y1#0 - (byte) main::y0#0
(byte) main::yd#0 ← (byte~) main::$1 (byte) main::yd#0 ← (byte~) main::$2
(byte) main::x#0 ← (byte) main::x0#0 (byte) main::x#0 ← (byte) main::x0#0
(byte) main::y#0 ← (byte) main::y0#0 (byte) main::y#0 ← (byte) main::y0#0
(byte/signed word/word/dword/signed dword~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word/dword/signed dword) 2 (byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::yd#0 / (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) main::e#0 ← (byte/signed word/word/dword/signed dword~) main::$2 (byte) main::e#0 ← (byte/signed word/word/dword/signed dword~) main::$3
(byte/signed word/word/dword/signed dword~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word/dword/signed dword) 40 (byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::y#0 * (byte/signed byte/word/signed word/dword/signed dword) 40
(byte/signed word/word/dword/signed dword~) main::$4 ← (byte) main::x#0 + (byte/signed word/word/dword/signed dword~) main::$3 (byte/signed word/word/dword/signed dword~) main::$5 ← (byte) main::x#0 + (byte/signed word/word/dword/signed dword~) main::$4
(word) main::idx#0 ← (byte/signed word/word/dword/signed dword~) main::$4 (word) main::idx#0 ← (byte/signed word/word/dword/signed dword~) main::$5
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@2 main::@1: scope:[main] from main main::@2
(byte) main::y#3 ← phi( main/(byte) main::y#0 main::@2/(byte) main::y#4 ) (byte) main::y#3 ← phi( main/(byte) main::y#0 main::@2/(byte) main::y#4 )
@ -159,16 +162,16 @@ main::@1: scope:[main] from main main::@2
(byte) main::x#2 ← phi( main/(byte) main::x#0 main::@2/(byte) main::x#3 ) (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@2/(byte) main::x#3 )
(word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 ) (word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 )
(byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 main::@2/(byte) main::STAR#2 ) (byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 main::@2/(byte) main::STAR#2 )
*((byte[1000]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1 *((byte[main::$0]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1
(byte/signed word/word/dword/signed dword~) main::$5 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::x#2 + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::x#1 ← (byte/signed word/word/dword/signed dword~) main::$5 (byte) main::x#1 ← (byte/signed word/word/dword/signed dword~) main::$6
(word/signed dword/dword~) main::$6 ← (word) main::idx#3 + (byte/signed byte/word/signed word/dword/signed dword) 1 (word/signed dword/dword~) main::$7 ← (word) main::idx#3 + (byte/signed byte/word/signed word/dword/signed dword) 1
(word) main::idx#1 ← (word/signed dword/dword~) main::$6 (word) main::idx#1 ← (word/signed dword/dword~) main::$7
(byte~) main::$7 ← (byte) main::e#3 + (byte) main::yd#1 (byte~) main::$8 ← (byte) main::e#3 + (byte) main::yd#1
(byte) main::e#1 ← (byte~) main::$7 (byte) main::e#1 ← (byte~) main::$8
(bool~) main::$8 ← (byte) main::xd#1 < (byte) main::e#1 (bool~) main::$9 ← (byte) main::xd#1 < (byte) main::e#1
(bool~) main::$9 ← ! (bool~) main::$8 (bool~) main::$10 ← ! (bool~) main::$9
if((bool~) main::$9) goto main::@2 if((bool~) main::$10) goto main::@2
to:main::@3 to:main::@3
main::@2: scope:[main] from main::@1 main::@3 main::@2: scope:[main] from main::@1 main::@3
(byte) main::y#4 ← phi( main::@1/(byte) main::y#3 main::@3/(byte) main::y#1 ) (byte) main::y#4 ← phi( main::@1/(byte) main::y#3 main::@3/(byte) main::y#1 )
@ -179,9 +182,9 @@ main::@2: scope:[main] from main::@1 main::@3
(byte) main::STAR#2 ← phi( main::@1/(byte) main::STAR#1 main::@3/(byte) main::STAR#3 ) (byte) main::STAR#2 ← phi( main::@1/(byte) main::STAR#1 main::@3/(byte) main::STAR#3 )
(byte) main::x#3 ← phi( main::@1/(byte) main::x#1 main::@3/(byte) main::x#4 ) (byte) main::x#3 ← phi( main::@1/(byte) main::x#1 main::@3/(byte) main::x#4 )
(byte) main::x1#1 ← phi( main::@1/(byte) main::x1#2 main::@3/(byte) main::x1#3 ) (byte) main::x1#1 ← phi( main::@1/(byte) main::x1#2 main::@3/(byte) main::x1#3 )
(byte/signed word/word/dword/signed dword~) main::$13 ← (byte) main::x1#1 + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte/signed word/word/dword/signed dword~) main::$14 ← (byte) main::x1#1 + (byte/signed byte/word/signed word/dword/signed dword) 1
(bool~) main::$14 ← (byte) main::x#3 < (byte/signed word/word/dword/signed dword~) main::$13 (bool~) main::$15 ← (byte) main::x#3 < (byte/signed word/word/dword/signed dword~) main::$14
if((bool~) main::$14) goto main::@1 if((bool~) main::$15) goto main::@1
to:main::@return to:main::@return
main::@3: scope:[main] from main::@1 main::@3: scope:[main] from main::@1
(byte) main::yd#3 ← phi( main::@1/(byte) main::yd#1 ) (byte) main::yd#3 ← phi( main::@1/(byte) main::yd#1 )
@ -192,12 +195,12 @@ main::@3: scope:[main] from main::@1
(byte) main::e#4 ← phi( main::@1/(byte) main::e#1 ) (byte) main::e#4 ← phi( main::@1/(byte) main::e#1 )
(word) main::idx#4 ← phi( main::@1/(word) main::idx#1 ) (word) main::idx#4 ← phi( main::@1/(word) main::idx#1 )
(byte) main::y#2 ← phi( main::@1/(byte) main::y#3 ) (byte) main::y#2 ← phi( main::@1/(byte) main::y#3 )
(byte/signed word/word/dword/signed dword~) main::$10 ← (byte) main::y#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 (byte/signed word/word/dword/signed dword~) main::$11 ← (byte) main::y#2 + (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) main::y#1 ← (byte/signed word/word/dword/signed dword~) main::$10 (byte) main::y#1 ← (byte/signed word/word/dword/signed dword~) main::$11
(word/signed dword/dword~) main::$11 ← (word) main::idx#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 (word/signed dword/dword~) main::$12 ← (word) main::idx#4 + (byte/signed byte/word/signed word/dword/signed dword) 40
(word) main::idx#2 ← (word/signed dword/dword~) main::$11 (word) main::idx#2 ← (word/signed dword/dword~) main::$12
(byte~) main::$12 ← (byte) main::e#4 - (byte) main::xd#2 (byte~) main::$13 ← (byte) main::e#4 - (byte) main::xd#2
(byte) main::e#2 ← (byte~) main::$12 (byte) main::e#2 ← (byte~) main::$13
to:main::@2 to:main::@2
main::@return: scope:[main] from main::@2 main::@return: scope:[main] from main::@2
return return
@ -215,20 +218,20 @@ SYMBOL TABLE SSA
(label) @begin (label) @begin
(label) @end (label) @end
(void()) main() (void()) main()
(byte~) main::$0
(byte~) main::$1 (byte~) main::$1
(byte/signed word/word/dword/signed dword~) main::$10 (bool~) main::$10
(word/signed dword/dword~) main::$11 (byte/signed word/word/dword/signed dword~) main::$11
(byte~) main::$12 (word/signed dword/dword~) main::$12
(byte/signed word/word/dword/signed dword~) main::$13 (byte~) main::$13
(bool~) main::$14 (byte/signed word/word/dword/signed dword~) main::$14
(byte/signed word/word/dword/signed dword~) main::$2 (bool~) main::$15
(byte~) main::$2
(byte/signed word/word/dword/signed dword~) main::$3 (byte/signed word/word/dword/signed dword~) main::$3
(byte/signed word/word/dword/signed dword~) main::$4 (byte/signed word/word/dword/signed dword~) main::$4
(byte/signed word/word/dword/signed dword~) main::$5 (byte/signed word/word/dword/signed dword~) main::$5
(word/signed dword/dword~) main::$6 (byte/signed word/word/dword/signed dword~) main::$6
(byte~) main::$7 (word/signed dword/dword~) main::$7
(bool~) main::$8 (byte~) main::$8
(bool~) main::$9 (bool~) main::$9
(label) main::@1 (label) main::@1
(label) main::@2 (label) main::@2
@ -253,8 +256,8 @@ SYMBOL TABLE SSA
(word) main::idx#3 (word) main::idx#3
(word) main::idx#4 (word) main::idx#4
(word) main::idx#5 (word) main::idx#5
(byte[1000]) main::screen (byte[main::$0]) main::screen
(byte[1000]) main::screen#0 (byte[main::$0]) main::screen#0
(byte) main::x (byte) main::x
(byte) main::x#0 (byte) main::x#0
(byte) main::x#1 (byte) main::x#1
@ -292,25 +295,25 @@ SYMBOL TABLE SSA
OPTIMIZING CONTROL FLOW GRAPH OPTIMIZING CONTROL FLOW GRAPH
Culled Empty Block (label) @2 Culled Empty Block (label) @2
Succesful SSA optimization Pass2CullEmptyBlocks Succesful SSA optimization Pass2CullEmptyBlocks
Inversing boolean not (bool~) main::$9 ← (byte) main::xd#1 >= (byte) main::e#1 from (bool~) main::$8 ← (byte) main::xd#1 < (byte) main::e#1 Inversing boolean not (bool~) main::$10 ← (byte) main::xd#1 >= (byte) main::e#1 from (bool~) main::$9 ← (byte) main::xd#1 < (byte) main::e#1
Succesful SSA optimization Pass2UnaryNotSimplification Succesful SSA optimization Pass2UnaryNotSimplification
Alias (byte) main::xd#0 = (byte~) main::$0 Alias (byte) main::xd#0 = (byte~) main::$1
Alias (byte) main::yd#0 = (byte~) main::$1 Alias (byte) main::yd#0 = (byte~) main::$2
Alias (byte) main::x#0 = (byte) main::x0#0 Alias (byte) main::x#0 = (byte) main::x0#0
Alias (byte) main::y#0 = (byte) main::y0#0 Alias (byte) main::y#0 = (byte) main::y0#0
Alias (byte) main::e#0 = (byte/signed word/word/dword/signed dword~) main::$2 Alias (byte) main::e#0 = (byte/signed word/word/dword/signed dword~) main::$3
Alias (word) main::idx#0 = (byte/signed word/word/dword/signed dword~) main::$4 Alias (word) main::idx#0 = (byte/signed word/word/dword/signed dword~) main::$5
Alias (byte) main::x#1 = (byte/signed word/word/dword/signed dword~) main::$5 (byte) main::x#4 Alias (byte) main::x#1 = (byte/signed word/word/dword/signed dword~) main::$6 (byte) main::x#4
Alias (word) main::idx#1 = (word/signed dword/dword~) main::$6 (word) main::idx#4 Alias (word) main::idx#1 = (word/signed dword/dword~) main::$7 (word) main::idx#4
Alias (byte) main::e#1 = (byte~) main::$7 (byte) main::e#4 Alias (byte) main::e#1 = (byte~) main::$8 (byte) main::e#4
Alias (byte) main::y#2 = (byte) main::y#3 Alias (byte) main::y#2 = (byte) main::y#3
Alias (byte) main::xd#1 = (byte) main::xd#2 Alias (byte) main::xd#1 = (byte) main::xd#2
Alias (byte) main::x1#2 = (byte) main::x1#3 Alias (byte) main::x1#2 = (byte) main::x1#3
Alias (byte) main::STAR#1 = (byte) main::STAR#3 Alias (byte) main::STAR#1 = (byte) main::STAR#3
Alias (byte) main::yd#1 = (byte) main::yd#3 Alias (byte) main::yd#1 = (byte) main::yd#3
Alias (byte) main::y#1 = (byte/signed word/word/dword/signed dword~) main::$10 Alias (byte) main::y#1 = (byte/signed word/word/dword/signed dword~) main::$11
Alias (word) main::idx#2 = (word/signed dword/dword~) main::$11 Alias (word) main::idx#2 = (word/signed dword/dword~) main::$12
Alias (byte) main::e#2 = (byte~) main::$12 Alias (byte) main::e#2 = (byte~) main::$13
Succesful SSA optimization Pass2AliasElimination Succesful SSA optimization Pass2AliasElimination
Alias (byte) main::x1#1 = (byte) main::x1#2 Alias (byte) main::x1#1 = (byte) main::x1#2
Alias (byte) main::x#1 = (byte) main::x#3 Alias (byte) main::x#1 = (byte) main::x#3
@ -328,8 +331,8 @@ Redundant Phi (byte) main::yd#1 (byte) main::yd#0
Redundant Phi (byte) main::xd#1 (byte) main::xd#0 Redundant Phi (byte) main::xd#1 (byte) main::xd#0
Redundant Phi (byte) main::x1#1 (byte) main::x1#0 Redundant Phi (byte) main::x1#1 (byte) main::x1#0
Succesful SSA optimization Pass2RedundantPhiElimination Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) main::$9 if((byte) main::xd#0>=(byte) main::e#1) goto main::@2 Simple Condition (bool~) main::$10 if((byte) main::xd#0>=(byte) main::e#1) goto main::@2
Simple Condition (bool~) main::$14 if((byte) main::x#1<(byte/signed word/word/dword/signed dword~) main::$13) goto main::@1 Simple Condition (bool~) main::$15 if((byte) main::x#1<(byte/signed word/word/dword/signed dword~) main::$14) goto main::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) main::STAR#0 = 81 Constant (const byte) main::STAR#0 = 81
Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte*) main::screen#0 = ((byte*))1024
@ -340,11 +343,11 @@ Constant (const byte) main::y1#0 = 24
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::xd#0 = main::x1#0-main::x#0 Constant (const byte) main::xd#0 = main::x1#0-main::x#0
Constant (const byte) main::yd#0 = main::y1#0-main::y#0 Constant (const byte) main::yd#0 = main::y1#0-main::y#0
Constant (const byte/signed word/word/dword/signed dword) main::$3 = main::y#0*40 Constant (const byte/signed word/word/dword/signed dword) main::$4 = main::y#0*40
Constant (const byte/signed word/word/dword/signed dword) main::$13 = main::x1#0+1 Constant (const byte/signed word/word/dword/signed dword) main::$14 = main::x1#0+1
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::e#0 = main::yd#0/2 Constant (const byte) main::e#0 = main::yd#0/2
Constant (const word) main::idx#0 = main::x#0+main::$3 Constant (const word) main::idx#0 = main::x#0+main::$4
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
OPTIMIZING CONTROL FLOW GRAPH OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const byte) main::x#0
@ -360,10 +363,10 @@ Inlining constant with var siblings (const word) main::idx#0
Inlining constant with var siblings (const word) main::idx#0 Inlining constant with var siblings (const word) main::idx#0
Inlining constant with var siblings (const word) main::idx#0 Inlining constant with var siblings (const word) main::idx#0
Inlining constant with var siblings (const word) main::idx#0 Inlining constant with var siblings (const word) main::idx#0
Constant inlined main::$13 = (const byte) main::x1#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined main::idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 0+(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 0+(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40
Constant inlined main::$3 = (byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::$14 = (const byte) main::x1#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined main::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::$4 = (byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40
Constant inlined main::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::e#0 = (const byte) main::yd#0/(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined main::e#0 = (const byte) main::yd#0/(byte/signed byte/word/signed word/dword/signed dword) 2
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
@ -487,7 +490,7 @@ VARIABLE REGISTER WEIGHTS
(word) main::idx#2 11.0 (word) main::idx#2 11.0
(word) main::idx#3 11.0 (word) main::idx#3 11.0
(word) main::idx#5 16.5 (word) main::idx#5 16.5
(byte[1000]) main::screen (byte[main::$0]) main::screen
(byte) main::x (byte) main::x
(byte) main::x#1 3.666666666666667 (byte) main::x#1 3.666666666666667
(byte) main::x#2 11.0 (byte) main::x#2 11.0
@ -839,7 +842,7 @@ FINAL SYMBOL TABLE
(word) main::idx#2 idx zp ZP_WORD:2 11.0 (word) main::idx#2 idx zp ZP_WORD:2 11.0
(word) main::idx#3 idx zp ZP_WORD:2 11.0 (word) main::idx#3 idx zp ZP_WORD:2 11.0
(word) main::idx#5 idx zp ZP_WORD:2 16.5 (word) main::idx#5 idx zp ZP_WORD:2 16.5
(byte[1000]) main::screen (byte[main::$0]) main::screen
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
(byte) main::x (byte) main::x
(byte) main::x#1 reg byte x 3.666666666666667 (byte) main::x#1 reg byte x 3.666666666666667

View File

@ -18,7 +18,7 @@
(word) main::idx#2 idx zp ZP_WORD:2 11.0 (word) main::idx#2 idx zp ZP_WORD:2 11.0
(word) main::idx#3 idx zp ZP_WORD:2 11.0 (word) main::idx#3 idx zp ZP_WORD:2 11.0
(word) main::idx#5 idx zp ZP_WORD:2 16.5 (word) main::idx#5 idx zp ZP_WORD:2 16.5
(byte[1000]) main::screen (byte[main::$0]) main::screen
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
(byte) main::x (byte) main::x
(byte) main::x#1 reg byte x 3.666666666666667 (byte) main::x#1 reg byte x 3.666666666666667

View File

@ -602,7 +602,7 @@ render_preset_name::@33: scope:[render_preset_name] from render_preset_name::@3
[318] phi() [ ] ( main:2::form_mode:13::render_preset_name:271 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] main:2::form_mode:13::render_preset_name:305 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 ] ) [318] phi() [ ] ( main:2::form_mode:13::render_preset_name:271 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] main:2::form_mode:13::render_preset_name:305 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 ] )
to:render_preset_name::@22 to:render_preset_name::@22
render_preset_name::@22: scope:[render_preset_name] from render_preset_name render_preset_name::@23 render_preset_name::@24 render_preset_name::@25 render_preset_name::@26 render_preset_name::@27 render_preset_name::@28 render_preset_name::@29 render_preset_name::@30 render_preset_name::@31 render_preset_name::@32 render_preset_name::@33 render_preset_name::@22: scope:[render_preset_name] from render_preset_name render_preset_name::@23 render_preset_name::@24 render_preset_name::@25 render_preset_name::@26 render_preset_name::@27 render_preset_name::@28 render_preset_name::@29 render_preset_name::@30 render_preset_name::@31 render_preset_name::@32 render_preset_name::@33
[319] (byte*) render_preset_name::name#12 ← phi( render_preset_name/(const string) render_preset_name::name#0 render_preset_name::@31/(const string) render_preset_name::name#9 render_preset_name::@32/(const string) render_preset_name::name#10 render_preset_name::@23/(const string) render_preset_name::name#1 render_preset_name::@24/(const string) render_preset_name::name#2 render_preset_name::@33/(const string) render_preset_name::name#11 render_preset_name::@25/(const string) render_preset_name::name#3 render_preset_name::@26/(const string) render_preset_name::name#4 render_preset_name::@27/(const string) render_preset_name::name#5 render_preset_name::@28/(const string) render_preset_name::name#6 render_preset_name::@29/(const string) render_preset_name::name#7 render_preset_name::@30/(const string) render_preset_name::name#8 ) [ render_preset_name::name#12 ] ( main:2::form_mode:13::render_preset_name:271 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 render_preset_name::name#12 ] main:2::form_mode:13::render_preset_name:305 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 render_preset_name::name#12 ] ) [319] (byte*) render_preset_name::name#12 ← phi( render_preset_name/(const byte*) render_preset_name::name#0 render_preset_name::@31/(const byte*) render_preset_name::name#9 render_preset_name::@32/(const byte*) render_preset_name::name#10 render_preset_name::@23/(const byte*) render_preset_name::name#1 render_preset_name::@24/(const byte*) render_preset_name::name#2 render_preset_name::@33/(const byte*) render_preset_name::name#11 render_preset_name::@25/(const byte*) render_preset_name::name#3 render_preset_name::@26/(const byte*) render_preset_name::name#4 render_preset_name::@27/(const byte*) render_preset_name::name#5 render_preset_name::@28/(const byte*) render_preset_name::name#6 render_preset_name::@29/(const byte*) render_preset_name::name#7 render_preset_name::@30/(const byte*) render_preset_name::name#8 ) [ render_preset_name::name#12 ] ( main:2::form_mode:13::render_preset_name:271 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 render_preset_name::name#12 ] main:2::form_mode:13::render_preset_name:305 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 render_preset_name::name#12 ] )
[320] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#12 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:271 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:305 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] ) [320] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#12 [ print_str_at::str#1 ] ( main:2::form_mode:13::render_preset_name:271 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_at::str#1 ] main:2::form_mode:13::render_preset_name:305 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 print_str_at::str#1 ] )
[321] call print_str_at [ ] ( main:2::form_mode:13::render_preset_name:271 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] main:2::form_mode:13::render_preset_name:305 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 ] ) [321] call print_str_at [ ] ( main:2::form_mode:13::render_preset_name:271 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] main:2::form_mode:13::render_preset_name:305 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 ] )
to:render_preset_name::@return to:render_preset_name::@return
@ -636,7 +636,7 @@ form_render_values::@1: scope:[form_render_values] from form_render_values form
to:form_render_values::@3 to:form_render_values::@3
form_render_values::@3: scope:[form_render_values] from form_render_values::@1 form_render_values::@3: scope:[form_render_values] from form_render_values::@1
[335] (byte*) form_render_values::field#0 ← (byte*) form_field_ptr::return#2 [ form_render_values::idx#2 form_render_values::field#0 ] ( main:2::form_mode:13::form_render_values:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 form_render_values::field#0 ] main:2::form_mode:13::form_render_values:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 form_render_values::field#0 ] ) [335] (byte*) form_render_values::field#0 ← (byte*) form_field_ptr::return#2 [ form_render_values::idx#2 form_render_values::field#0 ] ( main:2::form_mode:13::form_render_values:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 form_render_values::field#0 ] main:2::form_mode:13::form_render_values:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 form_render_values::field#0 ] )
[336] *((byte*) form_render_values::field#0) ← *((const string) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) [ form_render_values::idx#2 ] ( main:2::form_mode:13::form_render_values:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 ] main:2::form_mode:13::form_render_values:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 ] ) [336] *((byte*) form_render_values::field#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_render_values::idx#2)) [ form_render_values::idx#2 ] ( main:2::form_mode:13::form_render_values:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#2 ] main:2::form_mode:13::form_render_values:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#2 ] )
[337] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#2 [ form_render_values::idx#1 ] ( main:2::form_mode:13::form_render_values:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#1 ] main:2::form_mode:13::form_render_values:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#1 ] ) [337] (byte) form_render_values::idx#1 ← ++ (byte) form_render_values::idx#2 [ form_render_values::idx#1 ] ( main:2::form_mode:13::form_render_values:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#1 ] main:2::form_mode:13::form_render_values:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#1 ] )
[338] if((byte) form_render_values::idx#1<(const byte) form_fields_cnt#0) goto form_render_values::@1 [ form_render_values::idx#1 ] ( main:2::form_mode:13::form_render_values:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#1 ] main:2::form_mode:13::form_render_values:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#1 ] ) [338] if((byte) form_render_values::idx#1<(const byte) form_fields_cnt#0) goto form_render_values::@1 [ form_render_values::idx#1 ] ( main:2::form_mode:13::form_render_values:269 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 form_render_values::idx#1 ] main:2::form_mode:13::form_render_values:303 [ form_cursor_count#16 keyboard_events_size#24 form_field_idx#18 form_mode::preset_current#1 form_render_values::idx#1 ] )
to:form_render_values::@return to:form_render_values::@return
@ -776,7 +776,7 @@ form_control::@26: scope:[form_control] from form_control::@25
[399] *((const byte[]) form_fields_val#0 + (byte) form_field_idx#28) ← *((const byte[]) form_fields_max#0 + (byte) form_field_idx#28) [ keyboard_events_size#24 form_field_idx#28 form_control::field#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:294 [ form_mode::preset_current#6 keyboard_events_size#24 form_field_idx#28 form_control::field#0 form_cursor_count#15 ] ) [399] *((const byte[]) form_fields_val#0 + (byte) form_field_idx#28) ← *((const byte[]) form_fields_max#0 + (byte) form_field_idx#28) [ keyboard_events_size#24 form_field_idx#28 form_control::field#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:294 [ form_mode::preset_current#6 keyboard_events_size#24 form_field_idx#28 form_control::field#0 form_cursor_count#15 ] )
to:form_control::@12 to:form_control::@12
form_control::@12: scope:[form_control] from form_control::@10 form_control::@25 form_control::@26 form_control::@28 form_control::@12: scope:[form_control] from form_control::@10 form_control::@25 form_control::@26 form_control::@28
[400] *((byte*) form_control::field#0) ← *((const string) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_field_idx#28)) [ keyboard_events_size#24 form_field_idx#28 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:294 [ form_mode::preset_current#6 keyboard_events_size#24 form_field_idx#28 form_cursor_count#15 ] ) [400] *((byte*) form_control::field#0) ← *((const byte[]) print_hextab#0 + *((const byte[]) form_fields_val#0 + (byte) form_field_idx#28)) [ keyboard_events_size#24 form_field_idx#28 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:294 [ form_mode::preset_current#6 keyboard_events_size#24 form_field_idx#28 form_cursor_count#15 ] )
to:form_control::@return to:form_control::@return
form_control::@10: scope:[form_control] from form_control::@24 form_control::@10: scope:[form_control] from form_control::@24
[401] *((const byte[]) form_fields_val#0 + (byte) form_field_idx#28) ← ++ *((const byte[]) form_fields_val#0 + (byte) form_field_idx#28) [ keyboard_events_size#24 form_field_idx#28 form_control::field#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:294 [ form_mode::preset_current#6 keyboard_events_size#24 form_field_idx#28 form_control::field#0 form_cursor_count#15 ] ) [401] *((const byte[]) form_fields_val#0 + (byte) form_field_idx#28) ← ++ *((const byte[]) form_fields_val#0 + (byte) form_field_idx#28) [ keyboard_events_size#24 form_field_idx#28 form_control::field#0 form_cursor_count#15 ] ( main:2::form_mode:13::form_control:294 [ form_mode::preset_current#6 keyboard_events_size#24 form_field_idx#28 form_control::field#0 form_cursor_count#15 ] )
@ -816,7 +816,7 @@ form_set_screen::@return: scope:[form_set_screen] from form_set_screen::@1
[418] return [ ] ( main:2::form_mode:13::form_set_screen:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] ) [418] return [ ] ( main:2::form_mode:13::form_set_screen:267 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 ] )
to:@return to:@return
print_str_lines: scope:[print_str_lines] from form_mode::@22 form_mode::@25 print_str_lines: scope:[print_str_lines] from form_mode::@22 form_mode::@25
[419] (byte*) print_str_lines::str#5 ← phi( form_mode::@22/(const string) FORM_COLS#0 form_mode::@25/(const string) FORM_TEXT#0 ) [ print_str_lines::str#5 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:259 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_set_screen::screen#2 ] ) [419] (byte*) print_str_lines::str#5 ← phi( form_mode::@22/(const byte[]) FORM_COLS#0 form_mode::@25/(const byte[]) FORM_TEXT#0 ) [ print_str_lines::str#5 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:259 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_set_screen::screen#2 ] )
[420] (byte*~) print_char_cursor#77 ← (byte*) print_set_screen::screen#2 [ print_str_lines::str#5 print_char_cursor#77 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:259 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#77 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#77 print_set_screen::screen#2 ] ) [420] (byte*~) print_char_cursor#77 ← (byte*) print_set_screen::screen#2 [ print_str_lines::str#5 print_char_cursor#77 print_set_screen::screen#2 ] ( main:2::form_mode:13::print_str_lines:259 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#77 print_set_screen::screen#2 ] main:2::form_mode:13::print_str_lines:265 [ form_cursor_count#1 keyboard_events_size#27 form_field_idx#1 print_str_lines::str#5 print_char_cursor#77 print_set_screen::screen#2 ] )
to:print_str_lines::@1 to:print_str_lines::@1
print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lines::@9 print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lines::@9

File diff suppressed because one or more lines are too long

View File

@ -86,13 +86,13 @@
(byte*) FORM_CHARSET (byte*) FORM_CHARSET
(const byte*) FORM_CHARSET#0 FORM_CHARSET = ((byte*))(word/signed word/dword/signed dword) 6144 (const byte*) FORM_CHARSET#0 FORM_CHARSET = ((byte*))(word/signed word/dword/signed dword) 6144
(byte[]) FORM_COLS (byte[]) FORM_COLS
(const string) FORM_COLS#0 FORM_COLS = (string) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+(string) " @"+(string) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+(string) " @"+(string) " nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+(string) " nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+(string) " nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+(string) " nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+(string) " nnnnnnnnnnnn mmmmmmmmmm @"+(string) " nnnnnnnnnnnn jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) "@" (const byte[]) FORM_COLS#0 FORM_COLS = (string) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+(string) " @"+(string) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+(string) " @"+(string) " nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+(string) " nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+(string) " nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+(string) " nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+(string) " nnnnnnnnnnnn mmmmmmmmmm @"+(string) " nnnnnnnnnnnn jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) " nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+(string) "@"
(signed byte) FORM_CURSOR_BLINK (signed byte) FORM_CURSOR_BLINK
(const signed byte) FORM_CURSOR_BLINK#0 FORM_CURSOR_BLINK = (byte/signed byte/word/signed word/dword/signed dword) 40 (const signed byte) FORM_CURSOR_BLINK#0 FORM_CURSOR_BLINK = (byte/signed byte/word/signed word/dword/signed dword) 40
(byte*) FORM_SCREEN (byte*) FORM_SCREEN
(const byte*) FORM_SCREEN#0 FORM_SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) FORM_SCREEN#0 FORM_SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[]) FORM_TEXT (byte[]) FORM_TEXT
(const string) FORM_TEXT#0 FORM_TEXT = (string) " C64 DTV Graphics Mode Explorer @"+(string) " @"+(string) " PRESET 0 Standard Charset @"+(string) " @"+(string) " CONTROL PLANE A VIC II @"+(string) " bmm 0 pattern p0 screen s0 @"+(string) " mcm 0 start 00 gfx g0 @"+(string) " ecm 0 step 00 colors c0 @"+(string) " hicolor 0 modulo 00 @"+(string) " linear 0 COLORS @"+(string) " color off 0 PLANE B palet 0 @"+(string) " chunky 0 pattern p0 bgcol0 00 @"+(string) " border off 0 start 00 bgcol1 00 @"+(string) " overscan 0 step 00 bgcol2 00 @"+(string) " modulo 00 bgcol3 00 @"+(string) "@" (const byte[]) FORM_TEXT#0 FORM_TEXT = (string) " C64 DTV Graphics Mode Explorer @"+(string) " @"+(string) " PRESET 0 Standard Charset @"+(string) " @"+(string) " CONTROL PLANE A VIC II @"+(string) " bmm 0 pattern p0 screen s0 @"+(string) " mcm 0 start 00 gfx g0 @"+(string) " ecm 0 step 00 colors c0 @"+(string) " hicolor 0 modulo 00 @"+(string) " linear 0 COLORS @"+(string) " color off 0 PLANE B palet 0 @"+(string) " chunky 0 pattern p0 bgcol0 00 @"+(string) " border off 0 start 00 bgcol1 00 @"+(string) " overscan 0 step 00 bgcol2 00 @"+(string) " modulo 00 bgcol3 00 @"+(string) "@"
(byte) KEY_COMMODORE (byte) KEY_COMMODORE
(const byte) KEY_COMMODORE#0 KEY_COMMODORE = (byte/signed byte/word/signed word/dword/signed dword) 61 (const byte) KEY_COMMODORE#0 KEY_COMMODORE = (byte/signed byte/word/signed word/dword/signed dword) 61
(byte) KEY_CRSR_DOWN (byte) KEY_CRSR_DOWN
@ -1309,7 +1309,7 @@
(byte*) print_cls::sc#1 sc zp ZP_WORD:3 101.0 (byte*) print_cls::sc#1 sc zp ZP_WORD:3 101.0
(byte*) print_cls::sc#2 sc zp ZP_WORD:3 152.5 (byte*) print_cls::sc#2 sc zp ZP_WORD:3 152.5
(byte[]) print_hextab (byte[]) print_hextab
(const string) print_hextab#0 print_hextab = (string) "0123456789abcdef" (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor (byte*) print_line_cursor
(byte*) print_line_cursor#2 print_line_cursor zp ZP_WORD:16 8.749999999999998 (byte*) print_line_cursor#2 print_line_cursor zp ZP_WORD:16 8.749999999999998
(byte*) print_line_cursor#21 print_line_cursor zp ZP_WORD:16 2004.0 (byte*) print_line_cursor#21 print_line_cursor zp ZP_WORD:16 2004.0
@ -1366,19 +1366,19 @@
(byte) render_preset_name::idx#1 reg byte a 202.0 (byte) render_preset_name::idx#1 reg byte a 202.0
(byte) render_preset_name::idx#10 reg byte a 11.363636363636362 (byte) render_preset_name::idx#10 reg byte a 11.363636363636362
(byte*) render_preset_name::name (byte*) render_preset_name::name
(const string) render_preset_name::name#0 name#0 = (string) "Standard Charset @" (const byte*) render_preset_name::name#0 name#0 = (string) "Standard Charset @"
(const string) render_preset_name::name#1 name#1 = (string) "Extended Color Charset @" (const byte*) render_preset_name::name#1 name#1 = (string) "Extended Color Charset @"
(const string) render_preset_name::name#10 name#10 = (string) "8bpp Pixel Cell @" (const byte*) render_preset_name::name#10 name#10 = (string) "8bpp Pixel Cell @"
(const string) render_preset_name::name#11 name#11 = (string) "Standard Charset @" (const byte*) render_preset_name::name#11 name#11 = (string) "Standard Charset @"
(byte*) render_preset_name::name#12 name zp ZP_WORD:3 2.0 (byte*) render_preset_name::name#12 name zp ZP_WORD:3 2.0
(const string) render_preset_name::name#2 name#2 = (string) "Standard Bitmap @" (const byte*) render_preset_name::name#2 name#2 = (string) "Standard Bitmap @"
(const string) render_preset_name::name#3 name#3 = (string) "Multicolor Bitmap @" (const byte*) render_preset_name::name#3 name#3 = (string) "Multicolor Bitmap @"
(const string) render_preset_name::name#4 name#4 = (string) "Hicolor Charset @" (const byte*) render_preset_name::name#4 name#4 = (string) "Hicolor Charset @"
(const string) render_preset_name::name#5 name#5 = (string) "Hicolor Extended Color Charset@" (const byte*) render_preset_name::name#5 name#5 = (string) "Hicolor Extended Color Charset@"
(const string) render_preset_name::name#6 name#6 = (string) "Twoplane Bitmap @" (const byte*) render_preset_name::name#6 name#6 = (string) "Twoplane Bitmap @"
(const string) render_preset_name::name#7 name#7 = (string) "Chunky 8bpp @" (const byte*) render_preset_name::name#7 name#7 = (string) "Chunky 8bpp @"
(const string) render_preset_name::name#8 name#8 = (string) "Sixs Fred @" (const byte*) render_preset_name::name#8 name#8 = (string) "Sixs Fred @"
(const string) render_preset_name::name#9 name#9 = (string) "Sixs Fred 2 @" (const byte*) render_preset_name::name#9 name#9 = (string) "Sixs Fred 2 @"
reg byte y [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 gfx_mode::dtv_control#3 ] reg byte y [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 gfx_mode::dtv_control#3 ]
reg byte y [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ] reg byte y [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ]

View File

@ -1503,7 +1503,7 @@ print_str_lines: scope:[print_str_lines] from menu::@48
print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lines::@9 print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lines::@9
[866] (byte*) print_line_cursor#17 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*) print_line_cursor#19 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) [866] (byte*) print_line_cursor#17 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*) print_line_cursor#19 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] )
[866] (byte*) print_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*~) print_char_cursor#101 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) [866] (byte*) print_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*~) print_char_cursor#101 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] )
[866] (byte*) print_str_lines::str#2 ← phi( print_str_lines/(const string) MENU_TEXT#0 print_str_lines::@9/(byte*) print_str_lines::str#0 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) [866] (byte*) print_str_lines::str#2 ← phi( print_str_lines/(const byte[]) MENU_TEXT#0 print_str_lines::@9/(byte*) print_str_lines::str#0 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] )
[867] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@4 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) [867] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@4 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] )
to:print_str_lines::@return to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1

View File

@ -14337,9 +14337,9 @@ Constant (const string) $18 = "C64DTV Graphics Modes CCLHBME@"+"
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) $19 = "C64DTV Graphics Modes CCLHBME@"+" OHIIMCC@"+" LUNCMMM@"+"----------------------------------------@"+"1. Standard Char (V) 0000000@"+"2. Extended Color Char (V) 0000001@"+"3. Multicolor Char (V) 0000010@"+"4. Standard Bitmap (V) 0000100@"+"5. Multicolor Bitmap (V) 0000110@"+"6. High Color Standard Char (H) 0001000@"+"7. High Extended Color Char (H) 0001001@"+"8. High Multicolor Char (H) 0001010@"+"9. High Multicolor Bitmap (H) 0001110@"+"a. Sixs Fred 2 (D) 0010111@"+"b. Two Plane Bitmap (D) 0011101@"+"c. Sixs Fred (2 Plane MC BM) (D) 0011111@"+"d. 8bpp Pixel Cell (D) 0111011@"+"e. Chunky 8bpp Bitmap (D) 1111011@"+"----------------------------------------@"+" (V) vicII (H) vicII+hicol (D) c64dtv@" Constant (const string) $19 = "C64DTV Graphics Modes CCLHBME@"+" OHIIMCC@"+" LUNCMMM@"+"----------------------------------------@"+"1. Standard Char (V) 0000000@"+"2. Extended Color Char (V) 0000001@"+"3. Multicolor Char (V) 0000010@"+"4. Standard Bitmap (V) 0000100@"+"5. Multicolor Bitmap (V) 0000110@"+"6. High Color Standard Char (H) 0001000@"+"7. High Extended Color Char (H) 0001001@"+"8. High Multicolor Char (H) 0001010@"+"9. High Multicolor Bitmap (H) 0001110@"+"a. Sixs Fred 2 (D) 0010111@"+"b. Two Plane Bitmap (D) 0011101@"+"c. Sixs Fred (2 Plane MC BM) (D) 0011111@"+"d. 8bpp Pixel Cell (D) 0111011@"+"e. Chunky 8bpp Bitmap (D) 1111011@"+"----------------------------------------@"+" (V) vicII (H) vicII+hicol (D) c64dtv@"
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) MENU_TEXT#0 = "C64DTV Graphics Modes CCLHBME@"+" OHIIMCC@"+" LUNCMMM@"+"----------------------------------------@"+"1. Standard Char (V) 0000000@"+"2. Extended Color Char (V) 0000001@"+"3. Multicolor Char (V) 0000010@"+"4. Standard Bitmap (V) 0000100@"+"5. Multicolor Bitmap (V) 0000110@"+"6. High Color Standard Char (H) 0001000@"+"7. High Extended Color Char (H) 0001001@"+"8. High Multicolor Char (H) 0001010@"+"9. High Multicolor Bitmap (H) 0001110@"+"a. Sixs Fred 2 (D) 0010111@"+"b. Two Plane Bitmap (D) 0011101@"+"c. Sixs Fred (2 Plane MC BM) (D) 0011111@"+"d. 8bpp Pixel Cell (D) 0111011@"+"e. Chunky 8bpp Bitmap (D) 1111011@"+"----------------------------------------@"+" (V) vicII (H) vicII+hicol (D) c64dtv@"+"@" Constant (const byte[]) MENU_TEXT#0 = "C64DTV Graphics Modes CCLHBME@"+" OHIIMCC@"+" LUNCMMM@"+"----------------------------------------@"+"1. Standard Char (V) 0000000@"+"2. Extended Color Char (V) 0000001@"+"3. Multicolor Char (V) 0000010@"+"4. Standard Bitmap (V) 0000100@"+"5. Multicolor Bitmap (V) 0000110@"+"6. High Color Standard Char (H) 0001000@"+"7. High Extended Color Char (H) 0001001@"+"8. High Multicolor Char (H) 0001010@"+"9. High Multicolor Bitmap (H) 0001110@"+"a. Sixs Fred 2 (D) 0010111@"+"b. Two Plane Bitmap (D) 0011101@"+"c. Sixs Fred (2 Plane MC BM) (D) 0011111@"+"d. 8bpp Pixel Cell (D) 0111011@"+"e. Chunky 8bpp Bitmap (D) 1111011@"+"----------------------------------------@"+" (V) vicII (H) vicII+hicol (D) c64dtv@"+"@"
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) print_str_lines::str#1 = MENU_TEXT#0 Constant (const byte*) print_str_lines::str#1 = MENU_TEXT#0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in assignment *(mode_stdbitmap::lines_x#0+1 + mode_stdbitmap::$28) Consolidated array index constant in assignment *(mode_stdbitmap::lines_x#0+1 + mode_stdbitmap::$28)
Consolidated array index constant in assignment *(mode_stdbitmap::lines_y#0+1 + mode_stdbitmap::$29) Consolidated array index constant in assignment *(mode_stdbitmap::lines_y#0+1 + mode_stdbitmap::$29)
@ -15128,9 +15128,9 @@ Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankI
Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0
Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0
Inlining constant with different constant siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 Inlining constant with different constant siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0
Inlining constant with var siblings (const string) print_str_lines::str#1 Inlining constant with var siblings (const byte*) print_str_lines::str#1
Inlining constant with var siblings (const string) print_str_lines::str#1 Inlining constant with var siblings (const byte*) print_str_lines::str#1
Inlining constant with var siblings (const string) print_str_lines::str#1 Inlining constant with var siblings (const byte*) print_str_lines::str#1
Inlining constant with var siblings (const byte*) print_cls::sc#0 Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte*) print_cls::sc#0 Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0 Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0
@ -15649,7 +15649,7 @@ Constant inlined mode_ecmchar::cx#0 = (byte/signed byte/word/signed word/dword/s
Constant inlined mode_8bppchunkybmm::$7 = (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0 Constant inlined mode_8bppchunkybmm::$7 = (const byte) VIC_ECM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0
Constant inlined mode_8bppchunkybmm::$4 = (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0 Constant inlined mode_8bppchunkybmm::$4 = (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0
Constant inlined mode_8bppchunkybmm::$5 = (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0|(const byte) DTV_COLORRAM_OFF#0 Constant inlined mode_8bppchunkybmm::$5 = (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0|(const byte) DTV_CHUNKY#0|(const byte) DTV_COLORRAM_OFF#0
Constant inlined print_str_lines::str#1 = (const string) MENU_TEXT#0 Constant inlined print_str_lines::str#1 = (const byte[]) MENU_TEXT#0
Constant inlined mode_twoplanebitmap::ax#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined mode_twoplanebitmap::ax#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined mode_sixsfred2::ax#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined mode_sixsfred2::ax#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined keyboard_key_pressed::key#10 = (const byte) KEY_D#0 Constant inlined keyboard_key_pressed::key#10 = (const byte) KEY_D#0
@ -17954,7 +17954,7 @@ print_str_lines: scope:[print_str_lines] from menu::@48
print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lines::@9 print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lines::@9
[866] (byte*) print_line_cursor#17 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*) print_line_cursor#19 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) [866] (byte*) print_line_cursor#17 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*) print_line_cursor#19 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] )
[866] (byte*) print_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*~) print_char_cursor#101 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) [866] (byte*) print_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*~) print_char_cursor#101 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] )
[866] (byte*) print_str_lines::str#2 ← phi( print_str_lines/(const string) MENU_TEXT#0 print_str_lines::@9/(byte*) print_str_lines::str#0 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) [866] (byte*) print_str_lines::str#2 ← phi( print_str_lines/(const byte[]) MENU_TEXT#0 print_str_lines::@9/(byte*) print_str_lines::str#0 ) [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] )
[867] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@4 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ) [867] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@4 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] ( main:2::menu:9::print_str_lines:33 [ print_str_lines::str#2 print_char_cursor#19 print_line_cursor#17 ] )
to:print_str_lines::@return to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1 print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
@ -25137,7 +25137,7 @@ print_str_lines: {
sta print_char_cursor sta print_char_cursor
lda #>menu.SCREEN lda #>menu.SCREEN
sta print_char_cursor+1 sta print_char_cursor+1
//SEG1610 [866] phi (byte*) print_str_lines::str#2 = (const string) MENU_TEXT#0 [phi:print_str_lines->print_str_lines::@1#2] -- pbuz1=pbuc1 //SEG1610 [866] phi (byte*) print_str_lines::str#2 = (const byte[]) MENU_TEXT#0 [phi:print_str_lines->print_str_lines::@1#2] -- pbuz1=pbuc1
lda #<MENU_TEXT lda #<MENU_TEXT
sta str sta str
lda #>MENU_TEXT lda #>MENU_TEXT
@ -31231,7 +31231,7 @@ print_str_lines: {
sta print_char_cursor sta print_char_cursor
lda #>menu.SCREEN lda #>menu.SCREEN
sta print_char_cursor+1 sta print_char_cursor+1
//SEG1610 [866] phi (byte*) print_str_lines::str#2 = (const string) MENU_TEXT#0 [phi:print_str_lines->print_str_lines::@1#2] -- pbuz1=pbuc1 //SEG1610 [866] phi (byte*) print_str_lines::str#2 = (const byte[]) MENU_TEXT#0 [phi:print_str_lines->print_str_lines::@1#2] -- pbuz1=pbuc1
lda #<MENU_TEXT lda #<MENU_TEXT
sta str sta str
lda #>MENU_TEXT lda #>MENU_TEXT
@ -32410,7 +32410,7 @@ FINAL SYMBOL TABLE
(byte) LIGHT_GREEN (byte) LIGHT_GREEN
(const byte) LIGHT_GREEN#0 LIGHT_GREEN = (byte/signed byte/word/signed word/dword/signed dword) 13 (const byte) LIGHT_GREEN#0 LIGHT_GREEN = (byte/signed byte/word/signed word/dword/signed dword) 13
(byte[]) MENU_TEXT (byte[]) MENU_TEXT
(const string) MENU_TEXT#0 MENU_TEXT = (string) "C64DTV Graphics Modes CCLHBME@"+(string) " OHIIMCC@"+(string) " LUNCMMM@"+(string) "----------------------------------------@"+(string) "1. Standard Char (V) 0000000@"+(string) "2. Extended Color Char (V) 0000001@"+(string) "3. Multicolor Char (V) 0000010@"+(string) "4. Standard Bitmap (V) 0000100@"+(string) "5. Multicolor Bitmap (V) 0000110@"+(string) "6. High Color Standard Char (H) 0001000@"+(string) "7. High Extended Color Char (H) 0001001@"+(string) "8. High Multicolor Char (H) 0001010@"+(string) "9. High Multicolor Bitmap (H) 0001110@"+(string) "a. Sixs Fred 2 (D) 0010111@"+(string) "b. Two Plane Bitmap (D) 0011101@"+(string) "c. Sixs Fred (2 Plane MC BM) (D) 0011111@"+(string) "d. 8bpp Pixel Cell (D) 0111011@"+(string) "e. Chunky 8bpp Bitmap (D) 1111011@"+(string) "----------------------------------------@"+(string) " (V) vicII (H) vicII+hicol (D) c64dtv@"+(string) "@" (const byte[]) MENU_TEXT#0 MENU_TEXT = (string) "C64DTV Graphics Modes CCLHBME@"+(string) " OHIIMCC@"+(string) " LUNCMMM@"+(string) "----------------------------------------@"+(string) "1. Standard Char (V) 0000000@"+(string) "2. Extended Color Char (V) 0000001@"+(string) "3. Multicolor Char (V) 0000010@"+(string) "4. Standard Bitmap (V) 0000100@"+(string) "5. Multicolor Bitmap (V) 0000110@"+(string) "6. High Color Standard Char (H) 0001000@"+(string) "7. High Extended Color Char (H) 0001001@"+(string) "8. High Multicolor Char (H) 0001010@"+(string) "9. High Multicolor Bitmap (H) 0001110@"+(string) "a. Sixs Fred 2 (D) 0010111@"+(string) "b. Two Plane Bitmap (D) 0011101@"+(string) "c. Sixs Fred (2 Plane MC BM) (D) 0011111@"+(string) "d. 8bpp Pixel Cell (D) 0111011@"+(string) "e. Chunky 8bpp Bitmap (D) 1111011@"+(string) "----------------------------------------@"+(string) " (V) vicII (H) vicII+hicol (D) c64dtv@"+(string) "@"
(byte*) PROCPORT (byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1 (const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) PROCPORT_DDR (byte*) PROCPORT_DDR
@ -37276,7 +37276,7 @@ print_str_lines: {
sta print_char_cursor sta print_char_cursor
lda #>menu.SCREEN lda #>menu.SCREEN
sta print_char_cursor+1 sta print_char_cursor+1
//SEG1610 [866] phi (byte*) print_str_lines::str#2 = (const string) MENU_TEXT#0 [phi:print_str_lines->print_str_lines::@1#2] -- pbuz1=pbuc1 //SEG1610 [866] phi (byte*) print_str_lines::str#2 = (const byte[]) MENU_TEXT#0 [phi:print_str_lines->print_str_lines::@1#2] -- pbuz1=pbuc1
lda #<MENU_TEXT lda #<MENU_TEXT
sta str sta str
lda #>MENU_TEXT lda #>MENU_TEXT

View File

@ -122,7 +122,7 @@
(byte) LIGHT_GREEN (byte) LIGHT_GREEN
(const byte) LIGHT_GREEN#0 LIGHT_GREEN = (byte/signed byte/word/signed word/dword/signed dword) 13 (const byte) LIGHT_GREEN#0 LIGHT_GREEN = (byte/signed byte/word/signed word/dword/signed dword) 13
(byte[]) MENU_TEXT (byte[]) MENU_TEXT
(const string) MENU_TEXT#0 MENU_TEXT = (string) "C64DTV Graphics Modes CCLHBME@"+(string) " OHIIMCC@"+(string) " LUNCMMM@"+(string) "----------------------------------------@"+(string) "1. Standard Char (V) 0000000@"+(string) "2. Extended Color Char (V) 0000001@"+(string) "3. Multicolor Char (V) 0000010@"+(string) "4. Standard Bitmap (V) 0000100@"+(string) "5. Multicolor Bitmap (V) 0000110@"+(string) "6. High Color Standard Char (H) 0001000@"+(string) "7. High Extended Color Char (H) 0001001@"+(string) "8. High Multicolor Char (H) 0001010@"+(string) "9. High Multicolor Bitmap (H) 0001110@"+(string) "a. Sixs Fred 2 (D) 0010111@"+(string) "b. Two Plane Bitmap (D) 0011101@"+(string) "c. Sixs Fred (2 Plane MC BM) (D) 0011111@"+(string) "d. 8bpp Pixel Cell (D) 0111011@"+(string) "e. Chunky 8bpp Bitmap (D) 1111011@"+(string) "----------------------------------------@"+(string) " (V) vicII (H) vicII+hicol (D) c64dtv@"+(string) "@" (const byte[]) MENU_TEXT#0 MENU_TEXT = (string) "C64DTV Graphics Modes CCLHBME@"+(string) " OHIIMCC@"+(string) " LUNCMMM@"+(string) "----------------------------------------@"+(string) "1. Standard Char (V) 0000000@"+(string) "2. Extended Color Char (V) 0000001@"+(string) "3. Multicolor Char (V) 0000010@"+(string) "4. Standard Bitmap (V) 0000100@"+(string) "5. Multicolor Bitmap (V) 0000110@"+(string) "6. High Color Standard Char (H) 0001000@"+(string) "7. High Extended Color Char (H) 0001001@"+(string) "8. High Multicolor Char (H) 0001010@"+(string) "9. High Multicolor Bitmap (H) 0001110@"+(string) "a. Sixs Fred 2 (D) 0010111@"+(string) "b. Two Plane Bitmap (D) 0011101@"+(string) "c. Sixs Fred (2 Plane MC BM) (D) 0011111@"+(string) "d. 8bpp Pixel Cell (D) 0111011@"+(string) "e. Chunky 8bpp Bitmap (D) 1111011@"+(string) "----------------------------------------@"+(string) " (V) vicII (H) vicII+hicol (D) c64dtv@"+(string) "@"
(byte*) PROCPORT (byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1 (const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) PROCPORT_DDR (byte*) PROCPORT_DDR

View File

@ -3469,10 +3469,10 @@ Constant (const byte) KEY_Q#0 = 62
Constant (const byte[8]) keyboard_matrix_row_bitmask#0 = { 254, 253, 251, 247, 239, 223, 191, 127 } Constant (const byte[8]) keyboard_matrix_row_bitmask#0 = { 254, 253, 251, 247, 239, 223, 191, 127 }
Constant (const byte[8]) keyboard_matrix_col_bitmask#0 = { 1, 2, 4, 8, 16, 32, 64, 128 } Constant (const byte[8]) keyboard_matrix_col_bitmask#0 = { 1, 2, 4, 8, 16, 32, 64, 128 }
Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const string) print_str_at::str#0 = main::str Constant (const byte*) print_str_at::str#0 = main::str
Constant (const string) print_str_at::str#1 = main::str1 Constant (const byte*) print_str_at::str#1 = main::str1
Constant (const string) print_str_at::str#2 = main::str2 Constant (const byte*) print_str_at::str#2 = main::str2
Constant (const string) print_str_at::str#3 = main::str3 Constant (const byte*) print_str_at::str#3 = main::str3
Constant (const byte) main::i#0 = 0 Constant (const byte) main::i#0 = 0
Constant (const byte) plot_chargen::ch#0 = 32 Constant (const byte) plot_chargen::ch#0 = 32
Constant (const byte) plot_chargen::shift#0 = 0 Constant (const byte) plot_chargen::shift#0 = 0
@ -3696,18 +3696,18 @@ Inlining constant with var siblings (const byte) main::pressed#0
Inlining constant with var siblings (const byte) main::pressed#0 Inlining constant with var siblings (const byte) main::pressed#0
Inlining constant with var siblings (const byte*) main::sc#0 Inlining constant with var siblings (const byte*) main::sc#0
Inlining constant with var siblings (const byte*) main::sc#0 Inlining constant with var siblings (const byte*) main::sc#0
Inlining constant with var siblings (const string) print_str_at::str#0 Inlining constant with var siblings (const byte*) print_str_at::str#0
Inlining constant with var siblings (const string) print_str_at::str#0 Inlining constant with var siblings (const byte*) print_str_at::str#0
Inlining constant with var siblings (const string) print_str_at::str#0 Inlining constant with var siblings (const byte*) print_str_at::str#0
Inlining constant with var siblings (const string) print_str_at::str#1 Inlining constant with var siblings (const byte*) print_str_at::str#1
Inlining constant with var siblings (const string) print_str_at::str#1 Inlining constant with var siblings (const byte*) print_str_at::str#1
Inlining constant with var siblings (const string) print_str_at::str#1 Inlining constant with var siblings (const byte*) print_str_at::str#1
Inlining constant with var siblings (const string) print_str_at::str#2 Inlining constant with var siblings (const byte*) print_str_at::str#2
Inlining constant with var siblings (const string) print_str_at::str#2 Inlining constant with var siblings (const byte*) print_str_at::str#2
Inlining constant with var siblings (const string) print_str_at::str#2 Inlining constant with var siblings (const byte*) print_str_at::str#2
Inlining constant with var siblings (const string) print_str_at::str#3 Inlining constant with var siblings (const byte*) print_str_at::str#3
Inlining constant with var siblings (const string) print_str_at::str#3 Inlining constant with var siblings (const byte*) print_str_at::str#3
Inlining constant with var siblings (const string) print_str_at::str#3 Inlining constant with var siblings (const byte*) print_str_at::str#3
Inlining constant with var siblings (const byte*) print_str_at::at#0 Inlining constant with var siblings (const byte*) print_str_at::at#0
Inlining constant with var siblings (const byte*) print_str_at::at#0 Inlining constant with var siblings (const byte*) print_str_at::at#0
Inlining constant with var siblings (const byte*) print_str_at::at#0 Inlining constant with var siblings (const byte*) print_str_at::at#0

View File

@ -12,7 +12,7 @@ main: scope:[main] from @1
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const string) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
to:main::@return to:main::@return

View File

@ -123,7 +123,7 @@ Constant (const byte*) main::screen#0 = ((byte*))1024
Constant (const byte) main::l#0 = 'l' Constant (const byte) main::l#0 = 'l'
Constant (const byte) main::i#0 = 0 Constant (const byte) main::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) main::msg#0 = "cm"+'l' Constant (const byte[]) main::msg#0 = "cm"+'l'
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Eliminating unused constant (const string) main::$2 Eliminating unused constant (const string) main::$2
Eliminating unused constant (const byte) main::l#0 Eliminating unused constant (const byte) main::l#0
@ -174,7 +174,7 @@ main: scope:[main] from @1
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const string) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
to:main::@return to:main::@return
@ -255,7 +255,7 @@ main: {
jmp b1 jmp b1
//SEG14 main::@1 //SEG14 main::@1
b1: b1:
//SEG15 [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const string) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 //SEG15 [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
ldy i ldy i
lda msg,y lda msg,y
sta screen,y sta screen,y
@ -274,9 +274,9 @@ main: {
} }
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const string) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const string) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES REGISTER UPLIFT SCOPES
@ -322,7 +322,7 @@ main: {
jmp b1 jmp b1
//SEG14 main::@1 //SEG14 main::@1
b1: b1:
//SEG15 [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const string) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG15 [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda msg,x lda msg,x
sta screen,x sta screen,x
//SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
@ -371,7 +371,7 @@ FINAL SYMBOL TABLE
(byte) main::i#2 reg byte x 22.0 (byte) main::i#2 reg byte x 22.0
(byte) main::l (byte) main::l
(byte[]) main::msg (byte[]) main::msg
(const string) main::msg#0 msg = (string) "cm"+(byte) 'l' (const byte[]) main::msg#0 msg = (string) "cm"+(byte) 'l'
(byte*) main::screen (byte*) main::screen
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024
@ -404,7 +404,7 @@ main: {
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy //SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG14 main::@1 //SEG14 main::@1
b1: b1:
//SEG15 [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const string) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG15 [6] *((const byte*) main::screen#0 + (byte) main::i#2) ← *((const byte[]) main::msg#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda msg,x lda msg,x
sta screen,x sta screen,x
//SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx

View File

@ -9,7 +9,7 @@
(byte) main::i#2 reg byte x 22.0 (byte) main::i#2 reg byte x 22.0
(byte) main::l (byte) main::l
(byte[]) main::msg (byte[]) main::msg
(const string) main::msg#0 msg = (string) "cm"+(byte) 'l' (const byte[]) main::msg#0 msg = (string) "cm"+(byte) 'l'
(byte*) main::screen (byte*) main::screen
(const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) main::screen#0 screen = ((byte*))(word/signed word/dword/signed dword) 1024

View File

@ -91,7 +91,7 @@ Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$0 =
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$2 = 22%3 Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$2 = 22%3
Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte*) main::screen#0 = ((byte*))1024
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$1 = 6*main::$0 Constant (const byte/signed word/word/dword/signed dword/signed byte) main::$1 = 6*main::$0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::b#0 = main::$1+main::$2 Constant (const byte) main::b#0 = main::$1+main::$2
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification

View File

@ -12,5 +12,8 @@ main: {
cpx #8 cpx #8
bne b1 bne b1
rts rts
s5: .text "cam"+"e"+"l"+'o'+""+'t'+'!' s: .text "e"+"l"
s4: .text ""+'t'+'!'
s3: .text "cam"+s+'o'
s5: .text s3+s4
} }

View File

@ -12,7 +12,7 @@ main: scope:[main] from @1
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const string) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[8] 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 ] ) [8] 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::@return to:main::@return

View File

@ -172,29 +172,26 @@ Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0
Succesful SSA optimization Pass2RedundantPhiElimination Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) main::$6 if((byte) main::i#1!=rangelast(0,7)) goto main::@1 Simple Condition (bool~) main::$6 if((byte) main::i#1!=rangelast(0,7)) goto main::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const string) main::s#0 = "e"+"l" Constant (const byte[]) main::s#0 = "e"+"l"
Constant (const byte) main::e#0 = '!' Constant (const byte) main::e#0 = '!'
Constant (const string) main::$3 = ""+'t' Constant (const string) main::$3 = ""+'t'
Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte*) main::SCREEN#0 = ((byte*))1024
Constant (const byte) main::i#0 = 0 Constant (const byte) main::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) main::s2#0 = "e"+"l"+'o' Constant (const byte[]) main::s2#0 = main::s#0+'o'
Constant (const string) main::s4#0 = ""+'t'+'!' Constant (const byte[]) main::s4#0 = ""+'t'+'!'
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) main::s3#0 = "cam"+"e"+"l"+'o' Constant (const byte[]) main::s3#0 = "cam"+main::s#0+'o'
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) main::s5#0 = "cam"+"e"+"l"+'o'+""+'t'+'!' Constant (const byte[]) main::s5#0 = main::s3#0+main::s4#0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Eliminating unused constant (const string) main::$7 Eliminating unused constant (const string) main::$7
Eliminating unused constant (const string) main::$8 Eliminating unused constant (const string) main::$8
Eliminating unused constant (const string) main::$9 Eliminating unused constant (const string) main::$9
Eliminating unused constant (const string) main::$10 Eliminating unused constant (const string) main::$10
Eliminating unused constant (const string) main::s#0
Eliminating unused constant (const byte) main::e#0 Eliminating unused constant (const byte) main::e#0
Eliminating unused constant (const string) main::$3 Eliminating unused constant (const string) main::$3
Eliminating unused constant (const string) main::s2#0 Eliminating unused constant (const byte[]) main::s2#0
Eliminating unused constant (const string) main::s4#0
Eliminating unused constant (const string) main::s3#0
Succesful SSA optimization PassNEliminateUnusedVars Succesful SSA optimization PassNEliminateUnusedVars
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8 Resolved ranged comparison value if(main::i#1!=rangelast(0,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
@ -242,7 +239,7 @@ main: scope:[main] from @1
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const string) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[8] 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 ] ) [8] 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::@return to:main::@return
@ -327,7 +324,7 @@ main: {
jmp b1 jmp b1
//SEG14 main::@1 //SEG14 main::@1
b1: b1:
//SEG15 [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const string) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 //SEG15 [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
ldy i ldy i
lda s5,y lda s5,y
sta SCREEN,y sta SCREEN,y
@ -342,13 +339,16 @@ main: {
breturn: breturn:
//SEG19 [9] return [ ] ( main:2 [ ] ) //SEG19 [9] return [ ] ( main:2 [ ] )
rts rts
s5: .text "cam"+"e"+"l"+'o'+""+'t'+'!' s: .text "e"+"l"
s4: .text ""+'t'+'!'
s3: .text "cam"+s+'o'
s5: .text s3+s4
} }
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const string) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const string) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES REGISTER UPLIFT SCOPES
@ -394,7 +394,7 @@ main: {
jmp b1 jmp b1
//SEG14 main::@1 //SEG14 main::@1
b1: b1:
//SEG15 [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const string) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG15 [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda s5,x lda s5,x
sta SCREEN,x sta SCREEN,x
//SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
@ -407,7 +407,10 @@ main: {
breturn: breturn:
//SEG19 [9] return [ ] ( main:2 [ ] ) //SEG19 [9] return [ ] ( main:2 [ ] )
rts rts
s5: .text "cam"+"e"+"l"+'o'+""+'t'+'!' s: .text "e"+"l"
s4: .text ""+'t'+'!'
s3: .text "cam"+s+'o'
s5: .text s3+s4
} }
ASSEMBLER OPTIMIZATIONS ASSEMBLER OPTIMIZATIONS
@ -445,11 +448,14 @@ FINAL SYMBOL TABLE
(byte) main::i#1 reg byte x 16.5 (byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 22.0 (byte) main::i#2 reg byte x 22.0
(byte[]) main::s (byte[]) main::s
(const byte[]) main::s#0 s = (string) "e"+(string) "l"
(byte[]) main::s2 (byte[]) main::s2
(byte[]) main::s3 (byte[]) main::s3
(const byte[]) main::s3#0 s3 = (string) "cam"+(const byte[]) main::s#0+(byte) 'o'
(byte[]) main::s4 (byte[]) main::s4
(const byte[]) main::s4#0 s4 = (string) ""+(byte) 't'+(byte) '!'
(byte[]) main::s5 (byte[]) main::s5
(const string) main::s5#0 s5 = (string) "cam"+(string) "e"+(string) "l"+(byte) 'o'+(string) ""+(byte) 't'+(byte) '!' (const byte[]) main::s5#0 s5 = (const byte[]) main::s3#0+(const byte[]) main::s4#0
reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i#2 main::i#1 ]
@ -480,7 +486,7 @@ main: {
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy //SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG14 main::@1 //SEG14 main::@1
b1: b1:
//SEG15 [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const string) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG15 [6] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::s5#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda s5,x lda s5,x
sta SCREEN,x sta SCREEN,x
//SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG16 [7] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
@ -491,6 +497,9 @@ main: {
//SEG18 main::@return //SEG18 main::@return
//SEG19 [9] return [ ] ( main:2 [ ] ) //SEG19 [9] return [ ] ( main:2 [ ] )
rts rts
s5: .text "cam"+"e"+"l"+'o'+""+'t'+'!' s: .text "e"+"l"
s4: .text ""+'t'+'!'
s3: .text "cam"+s+'o'
s5: .text s3+s4
} }

View File

@ -11,10 +11,13 @@
(byte) main::i#1 reg byte x 16.5 (byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 22.0 (byte) main::i#2 reg byte x 22.0
(byte[]) main::s (byte[]) main::s
(const byte[]) main::s#0 s = (string) "e"+(string) "l"
(byte[]) main::s2 (byte[]) main::s2
(byte[]) main::s3 (byte[]) main::s3
(const byte[]) main::s3#0 s3 = (string) "cam"+(const byte[]) main::s#0+(byte) 'o'
(byte[]) main::s4 (byte[]) main::s4
(const byte[]) main::s4#0 s4 = (string) ""+(byte) 't'+(byte) '!'
(byte[]) main::s5 (byte[]) main::s5
(const string) main::s5#0 s5 = (string) "cam"+(string) "e"+(string) "l"+(byte) 'o'+(string) ""+(byte) 't'+(byte) '!' (const byte[]) main::s5#0 s5 = (const byte[]) main::s3#0+(const byte[]) main::s4#0
reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i#2 main::i#1 ]

View File

@ -1914,30 +1914,30 @@ Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte) GREEN#0 = 5 Constant (const byte) GREEN#0 = 5
Constant (const byte) RED#0 = 2 Constant (const byte) RED#0 = 2
Constant (const byte) test_bytes::bb#0 = 0 Constant (const byte) test_bytes::bb#0 = 0
Constant (const string) assert_byte::msg#0 = test_bytes::msg Constant (const byte*) assert_byte::msg#0 = test_bytes::msg
Constant (const byte) assert_byte::c#0 = 0 Constant (const byte) assert_byte::c#0 = 0
Constant (const string) assert_byte::msg#1 = test_bytes::msg1 Constant (const byte*) assert_byte::msg#1 = test_bytes::msg1
Constant (const byte) assert_byte::c#1 = 2 Constant (const byte) assert_byte::c#1 = 2
Constant (const string) assert_byte::msg#2 = test_bytes::msg2 Constant (const byte*) assert_byte::msg#2 = test_bytes::msg2
Constant (const byte) assert_byte::c#2 = 254 Constant (const byte) assert_byte::c#2 = 254
Constant (const string) print_str::str#2 = assert_byte::str Constant (const byte*) print_str::str#2 = assert_byte::str
Constant (const string) print_str::str#3 = assert_byte::str1 Constant (const byte*) print_str::str#3 = assert_byte::str1
Constant (const string) print_str::str#4 = assert_byte::str2 Constant (const byte*) print_str::str#4 = assert_byte::str2
Constant (const signed byte) test_sbytes::bb#0 = 0 Constant (const signed byte) test_sbytes::bb#0 = 0
Constant (const string) assert_sbyte::msg#0 = test_sbytes::msg Constant (const byte*) assert_sbyte::msg#0 = test_sbytes::msg
Constant (const signed byte) assert_sbyte::c#0 = 0 Constant (const signed byte) assert_sbyte::c#0 = 0
Constant (const string) assert_sbyte::msg#1 = test_sbytes::msg1 Constant (const byte*) assert_sbyte::msg#1 = test_sbytes::msg1
Constant (const signed byte) assert_sbyte::c#1 = 2 Constant (const signed byte) assert_sbyte::c#1 = 2
Constant (const signed byte) assert_sbyte::c#2 = -2 Constant (const signed byte) assert_sbyte::c#2 = -2
Constant (const string) assert_sbyte::msg#2 = test_sbytes::msg2 Constant (const byte*) assert_sbyte::msg#2 = test_sbytes::msg2
Constant (const string) assert_sbyte::msg#3 = test_sbytes::msg3 Constant (const byte*) assert_sbyte::msg#3 = test_sbytes::msg3
Constant (const signed byte) assert_sbyte::c#3 = 2 Constant (const signed byte) assert_sbyte::c#3 = 2
Constant (const signed byte/signed word/signed dword) test_sbytes::$8 = -127 Constant (const signed byte/signed word/signed dword) test_sbytes::$8 = -127
Constant (const string) assert_sbyte::msg#4 = test_sbytes::msg4 Constant (const byte*) assert_sbyte::msg#4 = test_sbytes::msg4
Constant (const signed byte) assert_sbyte::c#4 = 2 Constant (const signed byte) assert_sbyte::c#4 = 2
Constant (const string) print_str::str#6 = assert_sbyte::str Constant (const byte*) print_str::str#6 = assert_sbyte::str
Constant (const string) print_str::str#7 = assert_sbyte::str1 Constant (const byte*) print_str::str#7 = assert_sbyte::str1
Constant (const string) print_str::str#8 = assert_sbyte::str2 Constant (const byte*) print_str::str#8 = assert_sbyte::str2
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000
@ -1953,7 +1953,7 @@ Constant (const signed byte) assert_sbyte::b#1 = test_sbytes::bc#0
Constant (const signed byte) test_sbytes::bd#0 = test_sbytes::bc#0-4 Constant (const signed byte) test_sbytes::bd#0 = test_sbytes::bc#0-4
Constant (const signed byte) test_sbytes::bf#0 = ((signed byte))test_sbytes::$9 Constant (const signed byte) test_sbytes::bf#0 = ((signed byte))test_sbytes::$9
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const signed byte/signed word/signed dword) test_bytes::$4 = test_bytes::$3-4 Constant (const signed word/signed byte/signed dword) test_bytes::$4 = test_bytes::$3-4
Constant (const signed byte) assert_sbyte::b#2 = test_sbytes::bd#0 Constant (const signed byte) assert_sbyte::b#2 = test_sbytes::bd#0
Constant (const signed byte) test_sbytes::be#0 = -test_sbytes::bd#0 Constant (const signed byte) test_sbytes::be#0 = -test_sbytes::bd#0
Constant (const signed byte) assert_sbyte::b#4 = test_sbytes::bf#0 Constant (const signed byte) assert_sbyte::b#4 = test_sbytes::bf#0
@ -1988,60 +1988,60 @@ Not aliassing across scopes: print_line_cursor#47 print_line_cursor#50
Not aliassing across scopes: print_str::str#1 assert_byte::msg#3 Not aliassing across scopes: print_str::str#1 assert_byte::msg#3
Not aliassing across scopes: print_str::str#5 assert_sbyte::msg#5 Not aliassing across scopes: print_str::str#5 assert_sbyte::msg#5
OPTIMIZING CONTROL FLOW GRAPH OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const string) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#3 Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3 Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3 Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3 Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3 Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#4 Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4 Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4 Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4 Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4 Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#7 Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7 Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7 Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7 Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7 Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#8 Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8 Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8 Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8 Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8 Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const byte*) print_cls::sc#0 Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte*) print_cls::sc#0 Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const string) assert_byte::msg#0 Inlining constant with var siblings (const byte*) assert_byte::msg#0
Inlining constant with var siblings (const byte) assert_byte::c#0 Inlining constant with var siblings (const byte) assert_byte::c#0
Inlining constant with different constant siblings (const byte) assert_byte::c#0 Inlining constant with different constant siblings (const byte) assert_byte::c#0
Inlining constant with different constant siblings (const byte) assert_byte::c#0 Inlining constant with different constant siblings (const byte) assert_byte::c#0
Inlining constant with var siblings (const string) assert_byte::msg#1 Inlining constant with var siblings (const byte*) assert_byte::msg#1
Inlining constant with var siblings (const byte) assert_byte::c#1 Inlining constant with var siblings (const byte) assert_byte::c#1
Inlining constant with different constant siblings (const byte) assert_byte::c#1 Inlining constant with different constant siblings (const byte) assert_byte::c#1
Inlining constant with different constant siblings (const byte) assert_byte::c#1 Inlining constant with different constant siblings (const byte) assert_byte::c#1
Inlining constant with var siblings (const string) assert_byte::msg#2 Inlining constant with var siblings (const byte*) assert_byte::msg#2
Inlining constant with var siblings (const byte) assert_byte::c#2 Inlining constant with var siblings (const byte) assert_byte::c#2
Inlining constant with different constant siblings (const byte) assert_byte::c#2 Inlining constant with different constant siblings (const byte) assert_byte::c#2
Inlining constant with different constant siblings (const byte) assert_byte::c#2 Inlining constant with different constant siblings (const byte) assert_byte::c#2
Inlining constant with var siblings (const byte) assert_byte::b#0 Inlining constant with var siblings (const byte) assert_byte::b#0
Inlining constant with var siblings (const byte) assert_byte::b#1 Inlining constant with var siblings (const byte) assert_byte::b#1
Inlining constant with var siblings (const byte) assert_byte::b#2 Inlining constant with var siblings (const byte) assert_byte::b#2
Inlining constant with var siblings (const string) assert_sbyte::msg#0 Inlining constant with var siblings (const byte*) assert_sbyte::msg#0
Inlining constant with var siblings (const signed byte) assert_sbyte::c#0 Inlining constant with var siblings (const signed byte) assert_sbyte::c#0
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#0 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#0
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#0 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#0
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#0 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#0
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#0 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#0
Inlining constant with var siblings (const string) assert_sbyte::msg#1 Inlining constant with var siblings (const byte*) assert_sbyte::msg#1
Inlining constant with var siblings (const signed byte) assert_sbyte::c#1 Inlining constant with var siblings (const signed byte) assert_sbyte::c#1
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#1 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#1
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#1 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#1
@ -2050,12 +2050,12 @@ Inlining constant with different constant siblings (const signed byte) assert_sb
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#2 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#2
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#2 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#2
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#2 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#2
Inlining constant with var siblings (const string) assert_sbyte::msg#2 Inlining constant with var siblings (const byte*) assert_sbyte::msg#2
Inlining constant with var siblings (const string) assert_sbyte::msg#3 Inlining constant with var siblings (const byte*) assert_sbyte::msg#3
Inlining constant with var siblings (const signed byte) assert_sbyte::c#3 Inlining constant with var siblings (const signed byte) assert_sbyte::c#3
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#3 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#3
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#3 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#3
Inlining constant with var siblings (const string) assert_sbyte::msg#4 Inlining constant with var siblings (const byte*) assert_sbyte::msg#4
Inlining constant with var siblings (const signed byte) assert_sbyte::c#4 Inlining constant with var siblings (const signed byte) assert_sbyte::c#4
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#4 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#4
Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#4 Inlining constant with different constant siblings (const signed byte) assert_sbyte::c#4

View File

@ -8,13 +8,13 @@
@end: scope:[] from @1 @end: scope:[] from @1
[3] phi() [ ] ( ) [3] phi() [ ] ( )
main: scope:[main] from @1 main: scope:[main] from @1
[4] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] )
[5] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) [5] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] )
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] )
[8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) [8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[10] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [10] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
to:main::@return to:main::@return

View File

@ -112,7 +112,7 @@ Culled Empty Block (label) @2
Succesful SSA optimization Pass2CullEmptyBlocks Succesful SSA optimization Pass2CullEmptyBlocks
Simple Condition (bool~) main::$3 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 15) goto main::@1 Simple Condition (bool~) main::$3 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 15) goto main::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) fibs#0 = ((byte*))4352 Constant (const byte[15]) fibs#0 = ((byte*))4352
Constant (const byte) main::i#0 = 0 Constant (const byte) main::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in *(fibs#0+0) Consolidated array index constant in *(fibs#0+0)
@ -162,13 +162,13 @@ FINAL CONTROL FLOW GRAPH
@end: scope:[] from @1 @end: scope:[] from @1
[3] phi() [ ] ( ) [3] phi() [ ] ( )
main: scope:[main] from @1 main: scope:[main] from @1
[4] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] )
[5] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) [5] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] )
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [6] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] )
[8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) [8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] )
[9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[10] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [10] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 15) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
to:main::@return to:main::@return
@ -238,10 +238,10 @@ bend:
main: { main: {
.label _2 = 3 .label _2 = 3
.label i = 2 .label i = 2
//SEG9 [4] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG9 [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #0 lda #0
sta fibs+0 sta fibs+0
//SEG10 [5] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG10 [5] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #1 lda #1
sta fibs+1 sta fibs+1
//SEG11 [6] phi from main to main::@1 [phi:main->main::@1] //SEG11 [6] phi from main to main::@1 [phi:main->main::@1]
@ -256,13 +256,13 @@ main: {
jmp b1 jmp b1
//SEG15 main::@1 //SEG15 main::@1
b1: b1:
//SEG16 [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz2 //SEG16 [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuz1=pbuc1_derefidx_vbuz2_plus_pbuc2_derefidx_vbuz2
ldy i ldy i
lda fibs,y lda fibs,y
clc clc
adc fibs+1,y adc fibs+1,y
sta _2 sta _2
//SEG17 [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 //SEG17 [8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
lda _2 lda _2
ldy i ldy i
sta fibs+2,y sta fibs+2,y
@ -280,13 +280,13 @@ main: {
} }
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [5] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [5] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a Statement [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [4] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [5] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [5] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a Statement [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ main::$2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , Potential registers zp ZP_BYTE:3 [ main::$2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
@ -320,10 +320,10 @@ bend_from_b1:
bend: bend:
//SEG8 main //SEG8 main
main: { main: {
//SEG9 [4] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG9 [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #0 lda #0
sta fibs+0 sta fibs+0
//SEG10 [5] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG10 [5] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #1 lda #1
sta fibs+1 sta fibs+1
//SEG11 [6] phi from main to main::@1 [phi:main->main::@1] //SEG11 [6] phi from main to main::@1 [phi:main->main::@1]
@ -337,11 +337,11 @@ main: {
jmp b1 jmp b1
//SEG15 main::@1 //SEG15 main::@1
b1: b1:
//SEG16 [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx //SEG16 [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx
lda fibs,x lda fibs,x
clc clc
adc fibs+1,x adc fibs+1,x
//SEG17 [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa //SEG17 [8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
sta fibs+2,x sta fibs+2,x
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
inx inx
@ -380,7 +380,7 @@ FINAL SYMBOL TABLE
(label) @begin (label) @begin
(label) @end (label) @end
(byte[15]) fibs (byte[15]) fibs
(const byte*) fibs#0 fibs = ((byte*))(word/signed word/dword/signed dword) 4352 (const byte[15]) fibs#0 fibs = ((byte*))(word/signed word/dword/signed dword) 4352
(void()) main() (void()) main()
(byte~) main::$2 reg byte a 22.0 (byte~) main::$2 reg byte a 22.0
(label) main::@1 (label) main::@1
@ -411,10 +411,10 @@ Score: 269
//SEG7 @end //SEG7 @end
//SEG8 main //SEG8 main
main: { main: {
//SEG9 [4] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG9 [4] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #0 lda #0
sta fibs+0 sta fibs+0
//SEG10 [5] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG10 [5] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 1 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #1 lda #1
sta fibs+1 sta fibs+1
//SEG11 [6] phi from main to main::@1 [phi:main->main::@1] //SEG11 [6] phi from main to main::@1 [phi:main->main::@1]
@ -424,11 +424,11 @@ main: {
//SEG14 [6] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy //SEG14 [6] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG15 main::@1 //SEG15 main::@1
b1: b1:
//SEG16 [7] (byte~) main::$2 ← *((const byte*) fibs#0 + (byte) main::i#2) + *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx //SEG16 [7] (byte~) main::$2 ← *((const byte[15]) fibs#0 + (byte) main::i#2) + *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 1 + (byte) main::i#2) [ main::i#2 main::$2 ] ( main:2 [ main::i#2 main::$2 ] ) -- vbuaa=pbuc1_derefidx_vbuxx_plus_pbuc2_derefidx_vbuxx
lda fibs,x lda fibs,x
clc clc
adc fibs+1,x adc fibs+1,x
//SEG17 [8] *((const byte*) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa //SEG17 [8] *((const byte[15]) fibs#0+(byte/signed byte/word/signed word/dword/signed dword) 2 + (byte) main::i#2) ← (byte~) main::$2 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
sta fibs+2,x sta fibs+2,x
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
inx inx

View File

@ -2,7 +2,7 @@
(label) @begin (label) @begin
(label) @end (label) @end
(byte[15]) fibs (byte[15]) fibs
(const byte*) fibs#0 fibs = ((byte*))(word/signed word/dword/signed dword) 4352 (const byte[15]) fibs#0 fibs = ((byte*))(word/signed word/dword/signed dword) 4352
(void()) main() (void()) main()
(byte~) main::$2 reg byte a 22.0 (byte~) main::$2 reg byte a 22.0
(label) main::@1 (label) main::@1

View File

@ -98,5 +98,5 @@ prepare: {
bne b1 bne b1
rts rts
} }
buffer1: .fill $100, 0 buffer1: .fill $10*$10, 0
buffer2: .fill $100, 0 buffer2: .fill $10*$10, 0

View File

@ -41,7 +41,7 @@ plot::@1: scope:[plot] from plot plot::@3
plot::@2: scope:[plot] from plot::@1 plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2
[17] (byte) plot::x#2 ← phi( plot::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 plot::@2/(byte) plot::x#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) [17] (byte) plot::x#2 ← phi( plot::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 plot::@2/(byte) plot::x#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
[17] (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) [17] (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
[18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[256]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[16*16]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
[19] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ) [19] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] )
[20] (byte) plot::x#1 ← ++ (byte) plot::x#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ) [20] (byte) plot::x#1 ← ++ (byte) plot::x#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] )
[21] if((byte) plot::x#1<(byte/signed byte/word/signed word/dword/signed dword) 16) goto plot::@2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ) [21] if((byte) plot::x#1<(byte/signed byte/word/signed word/dword/signed dword) 16) goto plot::@2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] )
@ -66,7 +66,7 @@ flip::@2: scope:[flip] from flip::@1 flip::@2
[28] (byte) flip::c#2 ← phi( flip::@1/(byte/signed byte/word/signed word/dword/signed dword) 16 flip::@2/(byte) flip::c#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) [28] (byte) flip::c#2 ← phi( flip::@1/(byte/signed byte/word/signed word/dword/signed dword) 16 flip::@2/(byte) flip::c#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
[28] (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) [28] (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
[28] (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) [28] (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
[29] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[256]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) [29] *((const byte[16*16]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[16*16]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
[30] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ) [30] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] )
[31] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ) [31] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] )
[32] (byte) flip::c#1 ← -- (byte) flip::c#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ) [32] (byte) flip::c#1 ← -- (byte) flip::c#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] )
@ -79,7 +79,7 @@ flip::@4: scope:[flip] from flip::@2
to:flip::@3 to:flip::@3
flip::@3: scope:[flip] from flip::@3 flip::@4 flip::@3: scope:[flip] from flip::@3 flip::@4
[37] (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) [37] (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] )
[38] *((const byte[256]) buffer1#0 + (byte) flip::i#2) ← *((const byte[256]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) [38] *((const byte[16*16]) buffer1#0 + (byte) flip::i#2) ← *((const byte[16*16]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] )
[39] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] ) [39] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] )
[40] if((byte) flip::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto flip::@3 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] ) [40] if((byte) flip::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto flip::@3 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] )
to:flip::@return to:flip::@return
@ -91,7 +91,7 @@ prepare: scope:[prepare] from main
to:prepare::@1 to:prepare::@1
prepare::@1: scope:[prepare] from prepare prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1
[43] (byte) prepare::i#2 ← phi( prepare/(byte/signed byte/word/signed word/dword/signed dword) 0 prepare::@1/(byte) prepare::i#1 ) [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) [43] (byte) prepare::i#2 ← phi( prepare/(byte/signed byte/word/signed word/dword/signed dword) 0 prepare::@1/(byte) prepare::i#1 ) [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] )
[44] *((const byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) [44] *((const byte[16*16]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] )
[45] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) [45] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] )
[46] if((byte) prepare::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto prepare::@1 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) [46] if((byte) prepare::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto prepare::@1 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] )
to:prepare::@return to:prepare::@return

View File

@ -55,6 +55,8 @@ Adding pre/post-modifier (byte) flip::dstIdx ← -- (byte) flip::dstIdx
Adding pre/post-modifier (byte) plot::i ← ++ (byte) plot::i Adding pre/post-modifier (byte) plot::i ← ++ (byte) plot::i
Adding pre/post-modifier (byte) plot::x ← ++ (byte) plot::x Adding pre/post-modifier (byte) plot::x ← ++ (byte) plot::x
SYMBOLS SYMBOLS
(word/signed word/dword/signed dword~) $0
(word/signed word/dword/signed dword~) $1
(label) @1 (label) @1
(label) @2 (label) @2
(label) @3 (label) @3
@ -63,8 +65,8 @@ SYMBOLS
(label) @end (label) @end
(byte*) RASTER (byte*) RASTER
(byte*) SCREEN (byte*) SCREEN
(byte[256]) buffer1 (byte[$0]) buffer1
(byte[256]) buffer2 (byte[$1]) buffer2
(void()) flip() (void()) flip()
(byte/signed word/word/dword/signed dword~) flip::$0 (byte/signed word/word/dword/signed dword~) flip::$0
(bool~) flip::$1 (bool~) flip::$1
@ -126,8 +128,10 @@ Promoting word/dword/signed dword to byte* in RASTER ← ((byte*)) 53266
Promoting word/signed word/dword/signed dword to byte* in SCREEN ← ((byte*)) 1024 Promoting word/signed word/dword/signed dword to byte* in SCREEN ← ((byte*)) 1024
INITIAL CONTROL FLOW GRAPH INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from @begin: scope:[] from
(byte[256]) buffer1 ← { fill( 256, 0) } (word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 16 * (byte/signed byte/word/signed word/dword/signed dword) 16
(byte[256]) buffer2 ← { fill( 256, 0) } (byte[$0]) buffer1 ← { fill( $0, 0) }
(word/signed word/dword/signed dword~) $1 ← (byte/signed byte/word/signed word/dword/signed dword) 16 * (byte/signed byte/word/signed word/dword/signed dword) 16
(byte[$1]) buffer2 ← { fill( $1, 0) }
(byte*) RASTER ← ((byte*)) (word/dword/signed dword) 53266 (byte*) RASTER ← ((byte*)) (word/dword/signed dword) 53266
(byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@1 to:@1
@ -170,7 +174,7 @@ prepare: scope:[prepare] from
(byte) prepare::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) prepare::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:prepare::@1 to:prepare::@1
prepare::@1: scope:[prepare] from prepare prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1
*((byte[256]) buffer1 + (byte) prepare::i) ← (byte) prepare::i *((byte[$0]) buffer1 + (byte) prepare::i) ← (byte) prepare::i
(byte) prepare::i ← (byte) prepare::i + rangenext(0,255) (byte) prepare::i ← (byte) prepare::i + rangenext(0,255)
(bool~) prepare::$0 ← (byte) prepare::i != rangelast(0,255) (bool~) prepare::$0 ← (byte) prepare::i != rangelast(0,255)
if((bool~) prepare::$0) goto prepare::@1 if((bool~) prepare::$0) goto prepare::@1
@ -191,7 +195,7 @@ flip::@1: scope:[flip] from flip flip::@4
(byte) flip::c ← (byte/signed byte/word/signed word/dword/signed dword) 16 (byte) flip::c ← (byte/signed byte/word/signed word/dword/signed dword) 16
to:flip::@2 to:flip::@2
flip::@2: scope:[flip] from flip::@1 flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2
*((byte[256]) buffer2 + (byte) flip::dstIdx) ← *((byte[256]) buffer1 + (byte) flip::srcIdx) *((byte[$1]) buffer2 + (byte) flip::dstIdx) ← *((byte[$0]) buffer1 + (byte) flip::srcIdx)
(byte) flip::srcIdx ← ++ (byte) flip::srcIdx (byte) flip::srcIdx ← ++ (byte) flip::srcIdx
(byte/signed word/word/dword/signed dword~) flip::$0 ← (byte) flip::dstIdx + (byte/signed byte/word/signed word/dword/signed dword) 16 (byte/signed word/word/dword/signed dword~) flip::$0 ← (byte) flip::dstIdx + (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) flip::dstIdx ← (byte/signed word/word/dword/signed dword~) flip::$0 (byte) flip::dstIdx ← (byte/signed word/word/dword/signed dword~) flip::$0
@ -209,7 +213,7 @@ flip::@5: scope:[flip] from flip::@4
(byte) flip::i ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) flip::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:flip::@3 to:flip::@3
flip::@3: scope:[flip] from flip::@3 flip::@5 flip::@3: scope:[flip] from flip::@3 flip::@5
*((byte[256]) buffer1 + (byte) flip::i) ← *((byte[256]) buffer2 + (byte) flip::i) *((byte[$0]) buffer1 + (byte) flip::i) ← *((byte[$1]) buffer2 + (byte) flip::i)
(byte) flip::i ← (byte) flip::i + rangenext(0,255) (byte) flip::i ← (byte) flip::i + rangenext(0,255)
(bool~) flip::$3 ← (byte) flip::i != rangelast(0,255) (bool~) flip::$3 ← (byte) flip::i != rangelast(0,255)
if((bool~) flip::$3) goto flip::@3 if((bool~) flip::$3) goto flip::@3
@ -233,7 +237,7 @@ plot::@1: scope:[plot] from plot plot::@3
(byte) plot::x ← (byte/signed byte/word/signed word/dword/signed dword) 0 (byte) plot::x ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:plot::@2 to:plot::@2
plot::@2: scope:[plot] from plot::@1 plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2
*((byte*) plot::line + (byte) plot::x) ← *((byte[256]) buffer1 + (byte) plot::i) *((byte*) plot::line + (byte) plot::x) ← *((byte[$0]) buffer1 + (byte) plot::i)
(byte) plot::i ← ++ (byte) plot::i (byte) plot::i ← ++ (byte) plot::i
(byte) plot::x ← ++ (byte) plot::x (byte) plot::x ← ++ (byte) plot::x
(bool~) plot::$3 ← (byte) plot::x < (byte/signed byte/word/signed word/dword/signed dword) 16 (bool~) plot::$3 ← (byte) plot::x < (byte/signed byte/word/signed word/dword/signed dword) 16
@ -282,8 +286,10 @@ Completing Phi functions...
CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from @begin: scope:[] from
(byte[256]) buffer1#0 ← { fill( 256, 0) } (word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 16 * (byte/signed byte/word/signed word/dword/signed dword) 16
(byte[256]) buffer2#0 ← { fill( 256, 0) } (byte[$0]) buffer1#0 ← { fill( $0, 0) }
(word/signed word/dword/signed dword~) $1 ← (byte/signed byte/word/signed word/dword/signed dword) 16 * (byte/signed byte/word/signed word/dword/signed dword) 16
(byte[$1]) buffer2#0 ← { fill( $1, 0) }
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266 (byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@4 to:@4
@ -351,7 +357,7 @@ prepare: scope:[prepare] from main
to:prepare::@1 to:prepare::@1
prepare::@1: scope:[prepare] from prepare prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1
(byte) prepare::i#2 ← phi( prepare/(byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) (byte) prepare::i#2 ← phi( prepare/(byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 )
*((byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 *((byte[$0]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2
(byte) prepare::i#1 ← (byte) prepare::i#2 + rangenext(0,255) (byte) prepare::i#1 ← (byte) prepare::i#2 + rangenext(0,255)
(bool~) prepare::$0 ← (byte) prepare::i#1 != rangelast(0,255) (bool~) prepare::$0 ← (byte) prepare::i#1 != rangelast(0,255)
if((bool~) prepare::$0) goto prepare::@1 if((bool~) prepare::$0) goto prepare::@1
@ -375,7 +381,7 @@ flip::@2: scope:[flip] from flip::@1 flip::@2
(byte) flip::c#2 ← phi( flip::@1/(byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::c#2 ← phi( flip::@1/(byte) flip::c#0 flip::@2/(byte) flip::c#1 )
(byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 )
(byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 )
*((byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#0 + (byte) flip::srcIdx#2) *((byte[$1]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[$0]) buffer1#0 + (byte) flip::srcIdx#2)
(byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2
(byte/signed word/word/dword/signed dword~) flip::$0 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 (byte/signed word/word/dword/signed dword~) flip::$0 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) flip::dstIdx#1 ← (byte/signed word/word/dword/signed dword~) flip::$0 (byte) flip::dstIdx#1 ← (byte/signed word/word/dword/signed dword~) flip::$0
@ -397,7 +403,7 @@ flip::@5: scope:[flip] from flip::@4
to:flip::@3 to:flip::@3
flip::@3: scope:[flip] from flip::@3 flip::@5 flip::@3: scope:[flip] from flip::@3 flip::@5
(byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(byte) flip::i#0 ) (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(byte) flip::i#0 )
*((byte[256]) buffer1#0 + (byte) flip::i#2) ← *((byte[256]) buffer2#0 + (byte) flip::i#2) *((byte[$0]) buffer1#0 + (byte) flip::i#2) ← *((byte[$1]) buffer2#0 + (byte) flip::i#2)
(byte) flip::i#1 ← (byte) flip::i#2 + rangenext(0,255) (byte) flip::i#1 ← (byte) flip::i#2 + rangenext(0,255)
(bool~) flip::$3 ← (byte) flip::i#1 != rangelast(0,255) (bool~) flip::$3 ← (byte) flip::i#1 != rangelast(0,255)
if((bool~) flip::$3) goto flip::@3 if((bool~) flip::$3) goto flip::@3
@ -425,7 +431,7 @@ plot::@2: scope:[plot] from plot::@1 plot::@2
(byte) plot::x#2 ← phi( plot::@1/(byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte) plot::x#2 ← phi( plot::@1/(byte) plot::x#0 plot::@2/(byte) plot::x#1 )
(byte*) plot::line#2 ← phi( plot::@1/(byte*) plot::line#4 plot::@2/(byte*) plot::line#2 ) (byte*) plot::line#2 ← phi( plot::@1/(byte*) plot::line#4 plot::@2/(byte*) plot::line#2 )
(byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 )
*((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#0 + (byte) plot::i#2) *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[$0]) buffer1#0 + (byte) plot::i#2)
(byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::i#1 ← ++ (byte) plot::i#2
(byte) plot::x#1 ← ++ (byte) plot::x#2 (byte) plot::x#1 ← ++ (byte) plot::x#2
(bool~) plot::$3 ← (byte) plot::x#1 < (byte/signed byte/word/signed word/dword/signed dword) 16 (bool~) plot::$3 ← (byte) plot::x#1 < (byte/signed byte/word/signed word/dword/signed dword) 16
@ -454,6 +460,8 @@ plot::@return: scope:[plot] from plot::@3
@end: scope:[] from @5 @end: scope:[] from @5
SYMBOL TABLE SSA SYMBOL TABLE SSA
(word/signed word/dword/signed dword~) $0
(word/signed word/dword/signed dword~) $1
(label) @4 (label) @4
(label) @5 (label) @5
(label) @begin (label) @begin
@ -485,10 +493,10 @@ SYMBOL TABLE SSA
(byte*) SCREEN#7 (byte*) SCREEN#7
(byte*) SCREEN#8 (byte*) SCREEN#8
(byte*) SCREEN#9 (byte*) SCREEN#9
(byte[256]) buffer1 (byte[$0]) buffer1
(byte[256]) buffer1#0 (byte[$0]) buffer1#0
(byte[256]) buffer2 (byte[$1]) buffer2
(byte[256]) buffer2#0 (byte[$1]) buffer2#0
(void()) flip() (void()) flip()
(byte/signed word/word/dword/signed dword~) flip::$0 (byte/signed word/word/dword/signed dword~) flip::$0
(bool~) flip::$1 (bool~) flip::$1
@ -646,8 +654,8 @@ Simple Condition (bool~) flip::$3 if((byte) flip::i#1!=rangelast(0,255)) goto fl
Simple Condition (bool~) plot::$3 if((byte) plot::x#1<(byte/signed byte/word/signed word/dword/signed dword) 16) goto plot::@2 Simple Condition (bool~) plot::$3 if((byte) plot::x#1<(byte/signed byte/word/signed word/dword/signed dword) 16) goto plot::@2
Simple Condition (bool~) plot::$5 if((byte) plot::y#1!=rangelast(16,1)) goto plot::@1 Simple Condition (bool~) plot::$5 if((byte) plot::y#1!=rangelast(16,1)) goto plot::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte[256]) buffer1#0 = { fill( 256, 0) } Constant (const word/signed word/dword/signed dword) $0 = 16*16
Constant (const byte[256]) buffer2#0 = { fill( 256, 0) } Constant (const word/signed word/dword/signed dword) $1 = 16*16
Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const byte) main::c#0 = 25 Constant (const byte) main::c#0 = 25
@ -662,6 +670,9 @@ Constant (const byte) plot::i#0 = 0
Constant (const byte) plot::y#0 = 16 Constant (const byte) plot::y#0 = 16
Constant (const byte) plot::x#0 = 0 Constant (const byte) plot::x#0 = 0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte[$0]) buffer1#0 = { fill( $0, 0) }
Constant (const byte[$1]) buffer2#0 = { fill( $1, 0) }
Succesful SSA optimization Pass2ConstantIdentification
Consolidated constant in assignment plot::line#0 Consolidated constant in assignment plot::line#0
Succesful SSA optimization Pass2ConstantAdditionElimination Succesful SSA optimization Pass2ConstantAdditionElimination
if() condition always true - replacing block destination if(true) goto main::@1 if() condition always true - replacing block destination if(true) goto main::@1
@ -739,6 +750,8 @@ Constant inlined plot::$0 = (byte/signed byte/word/signed word/dword/signed dwor
Constant inlined plot::$1 = (const byte*) SCREEN#0 Constant inlined plot::$1 = (const byte*) SCREEN#0
Constant inlined plot::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined plot::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined plot::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 16 Constant inlined plot::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 16
Constant inlined $0 = (byte/signed byte/word/signed word/dword/signed dword) 16*(byte/signed byte/word/signed word/dword/signed dword) 16
Constant inlined $1 = (byte/signed byte/word/signed word/dword/signed dword) 16*(byte/signed byte/word/signed word/dword/signed dword) 16
Constant inlined flip::dstIdx#0 = (byte/signed byte/word/signed word/dword/signed dword) 15 Constant inlined flip::dstIdx#0 = (byte/signed byte/word/signed word/dword/signed dword) 15
Constant inlined flip::r#0 = (byte/signed byte/word/signed word/dword/signed dword) 16 Constant inlined flip::r#0 = (byte/signed byte/word/signed word/dword/signed dword) 16
Constant inlined main::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 25 Constant inlined main::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 25
@ -871,7 +884,7 @@ plot::@1: scope:[plot] from plot plot::@3
plot::@2: scope:[plot] from plot::@1 plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2
[17] (byte) plot::x#2 ← phi( plot::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 plot::@2/(byte) plot::x#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) [17] (byte) plot::x#2 ← phi( plot::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 plot::@2/(byte) plot::x#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
[17] (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) [17] (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
[18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[256]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[16*16]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] )
[19] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ) [19] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] )
[20] (byte) plot::x#1 ← ++ (byte) plot::x#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ) [20] (byte) plot::x#1 ← ++ (byte) plot::x#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] )
[21] if((byte) plot::x#1<(byte/signed byte/word/signed word/dword/signed dword) 16) goto plot::@2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ) [21] if((byte) plot::x#1<(byte/signed byte/word/signed word/dword/signed dword) 16) goto plot::@2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#1 ] )
@ -896,7 +909,7 @@ flip::@2: scope:[flip] from flip::@1 flip::@2
[28] (byte) flip::c#2 ← phi( flip::@1/(byte/signed byte/word/signed word/dword/signed dword) 16 flip::@2/(byte) flip::c#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) [28] (byte) flip::c#2 ← phi( flip::@1/(byte/signed byte/word/signed word/dword/signed dword) 16 flip::@2/(byte) flip::c#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
[28] (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) [28] (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
[28] (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) [28] (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
[29] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[256]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) [29] *((const byte[16*16]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[16*16]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] )
[30] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ) [30] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] )
[31] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ) [31] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] )
[32] (byte) flip::c#1 ← -- (byte) flip::c#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ) [32] (byte) flip::c#1 ← -- (byte) flip::c#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#1 flip::c#1 ] )
@ -909,7 +922,7 @@ flip::@4: scope:[flip] from flip::@2
to:flip::@3 to:flip::@3
flip::@3: scope:[flip] from flip::@3 flip::@4 flip::@3: scope:[flip] from flip::@3 flip::@4
[37] (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) [37] (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(byte/signed byte/word/signed word/dword/signed dword) 0 ) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] )
[38] *((const byte[256]) buffer1#0 + (byte) flip::i#2) ← *((const byte[256]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) [38] *((const byte[16*16]) buffer1#0 + (byte) flip::i#2) ← *((const byte[16*16]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] )
[39] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] ) [39] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] )
[40] if((byte) flip::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto flip::@3 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] ) [40] if((byte) flip::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto flip::@3 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] )
to:flip::@return to:flip::@return
@ -921,7 +934,7 @@ prepare: scope:[prepare] from main
to:prepare::@1 to:prepare::@1
prepare::@1: scope:[prepare] from prepare prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1
[43] (byte) prepare::i#2 ← phi( prepare/(byte/signed byte/word/signed word/dword/signed dword) 0 prepare::@1/(byte) prepare::i#1 ) [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) [43] (byte) prepare::i#2 ← phi( prepare/(byte/signed byte/word/signed word/dword/signed dword) 0 prepare::@1/(byte) prepare::i#1 ) [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] )
[44] *((const byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) [44] *((const byte[16*16]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] )
[45] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) [45] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] )
[46] if((byte) prepare::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto prepare::@1 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) [46] if((byte) prepare::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto prepare::@1 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] )
to:prepare::@return to:prepare::@return
@ -1017,8 +1030,8 @@ Loop head: prepare::@1 tails: prepare::@1 blocks: prepare::@1 depth: 1
VARIABLE REGISTER WEIGHTS VARIABLE REGISTER WEIGHTS
(byte*) RASTER (byte*) RASTER
(byte*) SCREEN (byte*) SCREEN
(byte[256]) buffer1 (byte[$0]) buffer1
(byte[256]) buffer2 (byte[$1]) buffer2
(void()) flip() (void()) flip()
(byte) flip::c (byte) flip::c
(byte) flip::c#1 1501.5 (byte) flip::c#1 1501.5
@ -1225,7 +1238,7 @@ plot: {
jmp b2 jmp b2
//SEG48 plot::@2 //SEG48 plot::@2
b2: b2:
//SEG49 [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[256]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3 //SEG49 [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[16*16]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3
ldy i ldy i
lda buffer1,y lda buffer1,y
ldy x ldy x
@ -1303,7 +1316,7 @@ flip: {
jmp b2 jmp b2
//SEG77 flip::@2 //SEG77 flip::@2
b2: b2:
//SEG78 [29] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[256]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 //SEG78 [29] *((const byte[16*16]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[16*16]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy srcIdx ldy srcIdx
lda buffer1,y lda buffer1,y
ldy dstIdx ldy dstIdx
@ -1342,7 +1355,7 @@ flip: {
jmp b3 jmp b3
//SEG91 flip::@3 //SEG91 flip::@3
b3: b3:
//SEG92 [38] *((const byte[256]) buffer1#0 + (byte) flip::i#2) ← *((const byte[256]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 //SEG92 [38] *((const byte[16*16]) buffer1#0 + (byte) flip::i#2) ← *((const byte[16*16]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
ldy i ldy i
lda buffer2,y lda buffer2,y
sta buffer1,y sta buffer1,y
@ -1372,7 +1385,7 @@ prepare: {
jmp b1 jmp b1
//SEG102 prepare::@1 //SEG102 prepare::@1
b1: b1:
//SEG103 [44] *((const byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1 //SEG103 [44] *((const byte[16*16]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz1
ldy i ldy i
tya tya
sta buffer1,y sta buffer1,y
@ -1387,33 +1400,33 @@ prepare: {
//SEG107 [47] return [ ] ( main:2::prepare:5 [ ] ) //SEG107 [47] return [ ] ( main:2::prepare:5 [ ] )
rts rts
} }
buffer1: .fill $100, 0 buffer1: .fill $10*$10, 0
buffer2: .fill $100, 0 buffer2: .fill $10*$10, 0
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 254) goto main::@3 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 254) goto main::@3 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::c#4 main::c#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::c#4 main::c#1 ]
Statement [8] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@4 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a Statement [8] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@4 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a
Statement [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[256]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) always clobbers reg byte a Statement [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[16*16]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ plot::i#2 plot::i#3 plot::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ plot::i#2 plot::i#3 plot::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ plot::x#2 plot::x#1 ]
Statement [22] (byte*) plot::line#1 ← (byte*) plot::line#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ plot::y#4 plot::i#1 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#1 plot::line#1 ] ) always clobbers reg byte a Statement [22] (byte*) plot::line#1 ← (byte*) plot::line#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ plot::y#4 plot::i#1 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#1 plot::line#1 ] ) always clobbers reg byte a
Statement [29] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[256]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) always clobbers reg byte a Statement [29] *((const byte[16*16]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[16*16]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ flip::r#4 flip::r#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:10 [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:11 [ flip::c#2 flip::c#1 ]
Statement [31] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ) always clobbers reg byte a Statement [31] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ) always clobbers reg byte a
Statement [38] *((const byte[256]) buffer1#0 + (byte) flip::i#2) ← *((const byte[256]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) always clobbers reg byte a Statement [38] *((const byte[16*16]) buffer1#0 + (byte) flip::i#2) ← *((const byte[16*16]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ flip::i#2 flip::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:12 [ flip::i#2 flip::i#1 ]
Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 254) goto main::@3 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a Statement [7] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 254) goto main::@3 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a
Statement [8] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@4 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a Statement [8] if(*((const byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@4 [ main::c#4 ] ( main:2 [ main::c#4 ] ) always clobbers reg byte a
Statement [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[256]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) always clobbers reg byte a Statement [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[16*16]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) always clobbers reg byte a
Statement [22] (byte*) plot::line#1 ← (byte*) plot::line#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ plot::y#4 plot::i#1 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#1 plot::line#1 ] ) always clobbers reg byte a Statement [22] (byte*) plot::line#1 ← (byte*) plot::line#4 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ plot::y#4 plot::i#1 plot::line#1 ] ( main:2::plot:14 [ plot::y#4 plot::i#1 plot::line#1 ] ) always clobbers reg byte a
Statement [29] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[256]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) always clobbers reg byte a Statement [29] *((const byte[16*16]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[16*16]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) always clobbers reg byte a
Statement [31] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ) always clobbers reg byte a Statement [31] (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word/dword/signed dword) 16 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::c#2 flip::dstIdx#1 ] ) always clobbers reg byte a
Statement [38] *((const byte[256]) buffer1#0 + (byte) flip::i#2) ← *((const byte[256]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) always clobbers reg byte a Statement [38] *((const byte[16*16]) buffer1#0 + (byte) flip::i#2) ← *((const byte[16*16]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::c#4 main::c#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:2 [ main::c#4 main::c#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:3 [ plot::line#4 plot::line#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_WORD:3 [ plot::line#4 plot::line#1 ] : zp ZP_WORD:3 ,
Potential registers zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:5 [ plot::y#4 plot::y#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y ,
@ -1572,7 +1585,7 @@ plot: {
jmp b2 jmp b2
//SEG48 plot::@2 //SEG48 plot::@2
b2: b2:
//SEG49 [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[256]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx //SEG49 [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[16*16]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx
lda buffer1,x lda buffer1,x
sta (line),y sta (line),y
//SEG50 [19] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ) -- vbuxx=_inc_vbuxx //SEG50 [19] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ) -- vbuxx=_inc_vbuxx
@ -1642,7 +1655,7 @@ flip: {
jmp b2 jmp b2
//SEG77 flip::@2 //SEG77 flip::@2
b2: b2:
//SEG78 [29] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[256]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy //SEG78 [29] *((const byte[16*16]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[16*16]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
lda buffer1,y lda buffer1,y
sta buffer2,x sta buffer2,x
//SEG79 [30] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ) -- vbuyy=_inc_vbuyy //SEG79 [30] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ) -- vbuyy=_inc_vbuyy
@ -1678,7 +1691,7 @@ flip: {
jmp b3 jmp b3
//SEG91 flip::@3 //SEG91 flip::@3
b3: b3:
//SEG92 [38] *((const byte[256]) buffer1#0 + (byte) flip::i#2) ← *((const byte[256]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG92 [38] *((const byte[16*16]) buffer1#0 + (byte) flip::i#2) ← *((const byte[16*16]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda buffer2,x lda buffer2,x
sta buffer1,x sta buffer1,x
//SEG93 [39] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG93 [39] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] ) -- vbuxx=_inc_vbuxx
@ -1705,7 +1718,7 @@ prepare: {
jmp b1 jmp b1
//SEG102 prepare::@1 //SEG102 prepare::@1
b1: b1:
//SEG103 [44] *((const byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuxx //SEG103 [44] *((const byte[16*16]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuxx
txa txa
sta buffer1,x sta buffer1,x
//SEG104 [45] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG104 [45] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) -- vbuxx=_inc_vbuxx
@ -1719,8 +1732,8 @@ prepare: {
//SEG107 [47] return [ ] ( main:2::prepare:5 [ ] ) //SEG107 [47] return [ ] ( main:2::prepare:5 [ ] )
rts rts
} }
buffer1: .fill $100, 0 buffer1: .fill $10*$10, 0
buffer2: .fill $100, 0 buffer2: .fill $10*$10, 0
ASSEMBLER OPTIMIZATIONS ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b4 Removing instruction jmp b4
@ -1810,10 +1823,10 @@ FINAL SYMBOL TABLE
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266 (const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte*) SCREEN (byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[256]) buffer1 (byte[$0]) buffer1
(const byte[256]) buffer1#0 buffer1 = { fill( 256, 0) } (const byte[16*16]) buffer1#0 buffer1 = { fill( 16*16, 0) }
(byte[256]) buffer2 (byte[$1]) buffer2
(const byte[256]) buffer2#0 buffer2 = { fill( 256, 0) } (const byte[16*16]) buffer2#0 buffer2 = { fill( 16*16, 0) }
(void()) flip() (void()) flip()
(label) flip::@1 (label) flip::@1
(label) flip::@2 (label) flip::@2
@ -1974,7 +1987,7 @@ plot: {
//SEG47 [17] phi (byte) plot::i#2 = (byte) plot::i#1 [phi:plot::@2->plot::@2#1] -- register_copy //SEG47 [17] phi (byte) plot::i#2 = (byte) plot::i#1 [phi:plot::@2->plot::@2#1] -- register_copy
//SEG48 plot::@2 //SEG48 plot::@2
b2: b2:
//SEG49 [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[256]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx //SEG49 [18] *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte[16*16]) buffer1#0 + (byte) plot::i#2) [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#2 plot::x#2 ] ) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx
lda buffer1,x lda buffer1,x
sta (line),y sta (line),y
//SEG50 [19] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ) -- vbuxx=_inc_vbuxx //SEG50 [19] (byte) plot::i#1 ← ++ (byte) plot::i#2 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ( main:2::plot:14 [ plot::line#4 plot::y#4 plot::i#1 plot::x#2 ] ) -- vbuxx=_inc_vbuxx
@ -2032,7 +2045,7 @@ flip: {
//SEG76 [28] phi (byte) flip::srcIdx#2 = (byte) flip::srcIdx#1 [phi:flip::@2->flip::@2#2] -- register_copy //SEG76 [28] phi (byte) flip::srcIdx#2 = (byte) flip::srcIdx#1 [phi:flip::@2->flip::@2#2] -- register_copy
//SEG77 flip::@2 //SEG77 flip::@2
b2: b2:
//SEG78 [29] *((const byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[256]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy //SEG78 [29] *((const byte[16*16]) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte[16*16]) buffer1#0 + (byte) flip::srcIdx#2) [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#2 flip::dstIdx#3 flip::c#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
lda buffer1,y lda buffer1,y
sta buffer2,x sta buffer2,x
//SEG79 [30] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ) -- vbuyy=_inc_vbuyy //SEG79 [30] (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ( main:2::flip:12 [ flip::r#4 flip::srcIdx#1 flip::dstIdx#3 flip::c#2 ] ) -- vbuyy=_inc_vbuyy
@ -2062,7 +2075,7 @@ flip: {
//SEG90 [37] phi (byte) flip::i#2 = (byte) flip::i#1 [phi:flip::@3->flip::@3#0] -- register_copy //SEG90 [37] phi (byte) flip::i#2 = (byte) flip::i#1 [phi:flip::@3->flip::@3#0] -- register_copy
//SEG91 flip::@3 //SEG91 flip::@3
b3: b3:
//SEG92 [38] *((const byte[256]) buffer1#0 + (byte) flip::i#2) ← *((const byte[256]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG92 [38] *((const byte[16*16]) buffer1#0 + (byte) flip::i#2) ← *((const byte[16*16]) buffer2#0 + (byte) flip::i#2) [ flip::i#2 ] ( main:2::flip:12 [ flip::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda buffer2,x lda buffer2,x
sta buffer1,x sta buffer1,x
//SEG93 [39] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG93 [39] (byte) flip::i#1 ← ++ (byte) flip::i#2 [ flip::i#1 ] ( main:2::flip:12 [ flip::i#1 ] ) -- vbuxx=_inc_vbuxx
@ -2083,7 +2096,7 @@ prepare: {
//SEG101 [43] phi (byte) prepare::i#2 = (byte) prepare::i#1 [phi:prepare::@1->prepare::@1#0] -- register_copy //SEG101 [43] phi (byte) prepare::i#2 = (byte) prepare::i#1 [phi:prepare::@1->prepare::@1#0] -- register_copy
//SEG102 prepare::@1 //SEG102 prepare::@1
b1: b1:
//SEG103 [44] *((const byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuxx //SEG103 [44] *((const byte[16*16]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 [ prepare::i#2 ] ( main:2::prepare:5 [ prepare::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuxx
txa txa
sta buffer1,x sta buffer1,x
//SEG104 [45] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) -- vbuxx=_inc_vbuxx //SEG104 [45] (byte) prepare::i#1 ← ++ (byte) prepare::i#2 [ prepare::i#1 ] ( main:2::prepare:5 [ prepare::i#1 ] ) -- vbuxx=_inc_vbuxx
@ -2095,6 +2108,6 @@ prepare: {
//SEG107 [47] return [ ] ( main:2::prepare:5 [ ] ) //SEG107 [47] return [ ] ( main:2::prepare:5 [ ] )
rts rts
} }
buffer1: .fill $100, 0 buffer1: .fill $10*$10, 0
buffer2: .fill $100, 0 buffer2: .fill $10*$10, 0

View File

@ -5,10 +5,10 @@
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266 (const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte*) SCREEN (byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[256]) buffer1 (byte[$0]) buffer1
(const byte[256]) buffer1#0 buffer1 = { fill( 256, 0) } (const byte[16*16]) buffer1#0 buffer1 = { fill( 16*16, 0) }
(byte[256]) buffer2 (byte[$1]) buffer2
(const byte[256]) buffer2#0 buffer2 = { fill( 256, 0) } (const byte[16*16]) buffer2#0 buffer2 = { fill( 16*16, 0) }
(void()) flip() (void()) flip()
(label) flip::@1 (label) flip::@1
(label) flip::@2 (label) flip::@2

View File

@ -0,0 +1,45 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
jsr main
main: {
.label SCREEN = $400
.label w = 2
.label sw = 2
lda #<0
sta w
sta w+1
b1:
lda w
sta SCREEN+0
lda w+1
sta SCREEN+1
inc w
bne !+
inc w+1
!:
lda w
bne b1
lda w+1
bne b1
lda #<-$7fff
sta sw
lda #>-$7fff
sta sw+1
b2:
lda sw
sta SCREEN+3
lda sw+1
sta SCREEN+4
inc sw
bne !+
inc sw+1
!:
lda sw+1
cmp #>$7fff
bne b2
lda sw
cmp #<$7fff
bne b2
rts
}

View File

@ -0,0 +1,33 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@1
@1: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main [ ] ( )
to:@end
@end: scope:[] from @1
[3] phi() [ ] ( )
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/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(word) main::w#1 ) [ main::w#2 ] ( main:2 [ main::w#2 ] )
[6] (byte~) main::$0 ← < (word) main::w#2 [ main::w#2 main::$0 ] ( main:2 [ main::w#2 main::$0 ] )
[7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ main::w#2 ] ( main:2 [ main::w#2 ] )
[8] (byte~) main::$1 ← > (word) main::w#2 [ main::w#2 main::$1 ] ( main:2 [ main::w#2 main::$1 ] )
[9] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ main::w#2 ] ( main:2 [ main::w#2 ] )
[10] (word) main::w#1 ← ++ (word) main::w#2 [ main::w#1 ] ( main:2 [ main::w#1 ] )
[11] if((word) main::w#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 [ main::w#1 ] ( main:2 [ main::w#1 ] )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[12] (signed word) main::sw#2 ← phi( main::@2/(signed word) main::sw#1 main::@1/-(word/signed word/dword/signed dword) 32767 ) [ main::sw#2 ] ( main:2 [ main::sw#2 ] )
[13] (byte~) main::$4 ← < (signed word) main::sw#2 [ main::sw#2 main::$4 ] ( main:2 [ main::sw#2 main::$4 ] )
[14] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$4 [ main::sw#2 ] ( main:2 [ main::sw#2 ] )
[15] (byte~) main::$5 ← > (signed word) main::sw#2 [ main::sw#2 main::$5 ] ( main:2 [ main::sw#2 main::$5 ] )
[16] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte~) main::$5 [ main::sw#2 ] ( main:2 [ main::sw#2 ] )
[17] (signed word) main::sw#1 ← ++ (signed word) main::sw#2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] )
[18] if((signed word) main::sw#1!=(word/signed word/dword/signed dword) 32767) goto main::@2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] )
to:main::@return
main::@return: scope:[main] from main::@2
[19] return [ ] ( main:2 [ ] )
to:@return

View File

@ -0,0 +1,696 @@
PARSING src/test/java/dk/camelot64/kickc/test/kc/forrangedwords.kc
void main() {
byte* SCREEN = $0400;
for( word w: 0..$ffff) {
SCREEN[0] = <w;
SCREEN[1] = >w;
}
for( signed word sw: -$7fff..$7ffe) {
SCREEN[3] = <sw;
SCREEN[4] = >sw;
}
}
SYMBOLS
(label) @1
(label) @begin
(label) @end
(void()) main()
(byte~) main::$0
(byte~) main::$1
(bool~) main::$2
(signed word/signed dword~) main::$3
(byte~) main::$4
(byte~) main::$5
(bool~) main::$6
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@return
(byte*) main::SCREEN
(signed word) main::sw
(word) main::w
Promoting word/signed word/dword/signed dword to byte* in main::SCREEN ← ((byte*)) 1024
INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from
to:@1
main: scope:[main] from
(byte*) main::SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
(word) main::w ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@1
main::@1: scope:[main] from main main::@1
(byte~) main::$0 ← < (word) main::w
*((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0
(byte~) main::$1 ← > (word) main::w
*((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1
(word) main::w ← (word) main::w + rangenext(0,65535)
(bool~) main::$2 ← (word) main::w != rangelast(0,65535)
if((bool~) main::$2) goto main::@1
to:main::@3
main::@3: scope:[main] from main::@1
(signed word/signed dword~) main::$3 ← - (word/signed word/dword/signed dword) 32767
(signed word) main::sw ← (signed word/signed dword~) main::$3
to:main::@2
main::@2: scope:[main] from main::@2 main::@3
(byte~) main::$4 ← < (signed word) main::sw
*((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$4
(byte~) main::$5 ← > (signed word) main::sw
*((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte~) main::$5
(signed word) main::sw ← (signed word) main::sw + rangenext(main::$3,32766)
(bool~) main::$6 ← (signed word) main::sw != rangelast(main::$3,32766)
if((bool~) main::$6) goto main::@2
to:main::@4
main::@4: scope:[main] from main::@2
to:main::@return
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
call main
to:@end
@end: scope:[] from @1
Removing empty block main::@4
PROCEDURE MODIFY VARIABLE ANALYSIS
Completing Phi functions...
Completing Phi functions...
CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from
to:@1
main: scope:[main] from @1
(byte*) main::SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(word) main::w#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@1
main::@1: scope:[main] from main main::@1
(byte*) main::SCREEN#1 ← phi( main/(byte*) main::SCREEN#0 main::@1/(byte*) main::SCREEN#1 )
(word) main::w#2 ← phi( main/(word) main::w#0 main::@1/(word) main::w#1 )
(byte~) main::$0 ← < (word) main::w#2
*((byte*) main::SCREEN#1 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0
(byte~) main::$1 ← > (word) main::w#2
*((byte*) main::SCREEN#1 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1
(word) main::w#1 ← (word) main::w#2 + rangenext(0,65535)
(bool~) main::$2 ← (word) main::w#1 != rangelast(0,65535)
if((bool~) main::$2) goto main::@1
to:main::@3
main::@3: scope:[main] from main::@1
(byte*) main::SCREEN#3 ← phi( main::@1/(byte*) main::SCREEN#1 )
(signed word/signed dword~) main::$3 ← - (word/signed word/dword/signed dword) 32767
(signed word) main::sw#0 ← (signed word/signed dword~) main::$3
to:main::@2
main::@2: scope:[main] from main::@2 main::@3
(byte*) main::SCREEN#2 ← phi( main::@2/(byte*) main::SCREEN#2 main::@3/(byte*) main::SCREEN#3 )
(signed word) main::sw#2 ← phi( main::@2/(signed word) main::sw#1 main::@3/(signed word) main::sw#0 )
(byte~) main::$4 ← < (signed word) main::sw#2
*((byte*) main::SCREEN#2 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$4
(byte~) main::$5 ← > (signed word) main::sw#2
*((byte*) main::SCREEN#2 + (byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte~) main::$5
(signed word) main::sw#1 ← (signed word) main::sw#2 + rangenext(main::$3,32766)
(bool~) main::$6 ← (signed word) main::sw#1 != rangelast(main::$3,32766)
if((bool~) main::$6) goto main::@2
to:main::@return
main::@return: scope:[main] from main::@2
return
to:@return
@1: scope:[] from @begin
call main
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @begin
(label) @end
(void()) main()
(byte~) main::$0
(byte~) main::$1
(bool~) main::$2
(signed word/signed dword~) main::$3
(byte~) main::$4
(byte~) main::$5
(bool~) main::$6
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte*) main::SCREEN
(byte*) main::SCREEN#0
(byte*) main::SCREEN#1
(byte*) main::SCREEN#2
(byte*) main::SCREEN#3
(signed word) main::sw
(signed word) main::sw#0
(signed word) main::sw#1
(signed word) main::sw#2
(word) main::w
(word) main::w#0
(word) main::w#1
(word) main::w#2
OPTIMIZING CONTROL FLOW GRAPH
Culled Empty Block (label) @2
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing identity: main::SCREEN#2 main::SCREEN#2
Alias (byte*) main::SCREEN#1 = (byte*) main::SCREEN#3
Alias (signed word) main::sw#0 = (signed word/signed dword~) main::$3
Succesful SSA optimization Pass2AliasElimination
Not aliassing identity: main::SCREEN#2 main::SCREEN#2
Self Phi Eliminated (byte*) main::SCREEN#1
Self Phi Eliminated (byte*) main::SCREEN#2
Succesful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0
Redundant Phi (byte*) main::SCREEN#2 (byte*) main::SCREEN#1
Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) main::$2 if((word) main::w#1!=rangelast(0,65535)) goto main::@1
Simple Condition (bool~) main::$6 if((signed word) main::sw#1!=rangelast(main::sw#0,32766)) goto main::@2
Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) main::SCREEN#0 = ((byte*))1024
Constant (const word) main::w#0 = 0
Constant (const signed word) main::sw#0 = -32767
Succesful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in *(main::SCREEN#0+0)
Consolidated array index constant in *(main::SCREEN#0+1)
Consolidated array index constant in *(main::SCREEN#0+3)
Consolidated array index constant in *(main::SCREEN#0+4)
Succesful SSA optimization Pass2ConstantAdditionElimination
Resolved ranged next value main::w#1 ← ++ main::w#2 to ++
Resolved ranged comparison value if(main::w#1!=rangelast(0,65535)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0
Resolved ranged next value main::sw#1 ← ++ main::sw#2 to ++
Resolved ranged comparison value if(main::sw#1!=rangelast(main::sw#0,32766)) goto main::@2 to (word/signed word/dword/signed dword) 32767
Culled Empty Block (label) main::@3
Succesful SSA optimization Pass2CullEmptyBlocks
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 signed word) main::sw#0
Inlining constant with var siblings (const signed word) main::sw#0
Constant inlined main::w#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::sw#0 = -(word/signed word/dword/signed dword) 32767
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return
Added new block during phi lifting main::@5(between main::@1 and main::@1)
Added new block during phi lifting main::@6(between main::@2 and main::@2)
Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return main::@6 main::@5
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
CALL GRAPH
Calls in [] to main:2
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Created 2 initial phi equivalence classes
Coalesced [20] main::sw#3 ← main::sw#1
Coalesced [21] main::w#3 ← main::w#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@5
Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return
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...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@1
@1: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main [ ] ( )
to:@end
@end: scope:[] from @1
[3] phi() [ ] ( )
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/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(word) main::w#1 ) [ main::w#2 ] ( main:2 [ main::w#2 ] )
[6] (byte~) main::$0 ← < (word) main::w#2 [ main::w#2 main::$0 ] ( main:2 [ main::w#2 main::$0 ] )
[7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ main::w#2 ] ( main:2 [ main::w#2 ] )
[8] (byte~) main::$1 ← > (word) main::w#2 [ main::w#2 main::$1 ] ( main:2 [ main::w#2 main::$1 ] )
[9] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ main::w#2 ] ( main:2 [ main::w#2 ] )
[10] (word) main::w#1 ← ++ (word) main::w#2 [ main::w#1 ] ( main:2 [ main::w#1 ] )
[11] if((word) main::w#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 [ main::w#1 ] ( main:2 [ main::w#1 ] )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[12] (signed word) main::sw#2 ← phi( main::@2/(signed word) main::sw#1 main::@1/-(word/signed word/dword/signed dword) 32767 ) [ main::sw#2 ] ( main:2 [ main::sw#2 ] )
[13] (byte~) main::$4 ← < (signed word) main::sw#2 [ main::sw#2 main::$4 ] ( main:2 [ main::sw#2 main::$4 ] )
[14] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$4 [ main::sw#2 ] ( main:2 [ main::sw#2 ] )
[15] (byte~) main::$5 ← > (signed word) main::sw#2 [ main::sw#2 main::$5 ] ( main:2 [ main::sw#2 main::$5 ] )
[16] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte~) main::$5 [ main::sw#2 ] ( main:2 [ main::sw#2 ] )
[17] (signed word) main::sw#1 ← ++ (signed word) main::sw#2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] )
[18] if((signed word) main::sw#1!=(word/signed word/dword/signed dword) 32767) goto main::@2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] )
to:main::@return
main::@return: scope:[main] from main::@2
[19] return [ ] ( main:2 [ ] )
to:@return
DOMINATORS
@begin dominated by @begin
@1 dominated by @1 @begin
@end dominated by @1 @begin @end
main dominated by @1 @begin main
main::@1 dominated by @1 @begin main::@1 main
main::@2 dominated by @1 @begin main::@1 main::@2 main
main::@return dominated by main::@return @1 @begin main::@1 main::@2 main
NATURAL LOOPS
Found back edge: Loop head: main::@1 tails: main::@1 blocks: null
Found back edge: Loop head: main::@2 tails: main::@2 blocks: null
Populated: Loop head: main::@1 tails: main::@1 blocks: main::@1
Populated: Loop head: main::@2 tails: main::@2 blocks: main::@2
Loop head: main::@1 tails: main::@1 blocks: main::@1
Loop head: main::@2 tails: main::@2 blocks: main::@2
NATURAL LOOPS WITH DEPTH
Found 0 loops in scope []
Found 2 loops in scope [main]
Loop head: main::@1 tails: main::@1 blocks: main::@1
Loop head: main::@2 tails: main::@2 blocks: main::@2
Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1
Loop head: main::@2 tails: main::@2 blocks: main::@2 depth: 1
VARIABLE REGISTER WEIGHTS
(void()) main()
(byte~) main::$0 22.0
(byte~) main::$1 22.0
(byte~) main::$4 22.0
(byte~) main::$5 22.0
(byte*) main::SCREEN
(signed word) main::sw
(signed word) main::sw#1 16.5
(signed word) main::sw#2 8.8
(word) main::w
(word) main::w#1 16.5
(word) main::w#2 8.8
Initial phi equivalence classes
[ main::w#2 main::w#1 ]
[ main::sw#2 main::sw#1 ]
Added variable main::$0 to zero page equivalence class [ main::$0 ]
Added variable main::$1 to zero page equivalence class [ main::$1 ]
Added variable main::$4 to zero page equivalence class [ main::$4 ]
Added variable main::$5 to zero page equivalence class [ main::$5 ]
Complete equivalence classes
[ main::w#2 main::w#1 ]
[ main::sw#2 main::sw#1 ]
[ main::$0 ]
[ main::$1 ]
[ main::$4 ]
[ main::$5 ]
Allocated zp ZP_WORD:2 [ main::w#2 main::w#1 ]
Allocated zp ZP_WORD:4 [ main::sw#2 main::sw#1 ]
Allocated zp ZP_BYTE:6 [ main::$0 ]
Allocated zp ZP_BYTE:7 [ main::$1 ]
Allocated zp ZP_BYTE:8 [ main::$4 ]
Allocated zp ZP_BYTE:9 [ main::$5 ]
INITIAL ASM
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 [2] call main [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
main_from_b1:
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
.label SCREEN = $400
.label _0 = 6
.label _1 = 7
.label _4 = 8
.label _5 = 9
.label w = 2
.label sw = 4
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (word) main::w#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1
lda #<0
sta w
lda #>0
sta w+1
jmp b1
//SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
b1_from_b1:
//SEG13 [5] phi (word) main::w#2 = (word) main::w#1 [phi:main::@1->main::@1#0] -- register_copy
jmp b1
//SEG14 main::@1
b1:
//SEG15 [6] (byte~) main::$0 ← < (word) main::w#2 [ main::w#2 main::$0 ] ( main:2 [ main::w#2 main::$0 ] ) -- vbuz1=_lo_vwuz2
lda w
sta _0
//SEG16 [7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ main::w#2 ] ( main:2 [ main::w#2 ] ) -- _deref_pbuc1=vbuz1
lda _0
sta SCREEN+0
//SEG17 [8] (byte~) main::$1 ← > (word) main::w#2 [ main::w#2 main::$1 ] ( main:2 [ main::w#2 main::$1 ] ) -- vbuz1=_hi_vwuz2
lda w+1
sta _1
//SEG18 [9] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ main::w#2 ] ( main:2 [ main::w#2 ] ) -- _deref_pbuc1=vbuz1
lda _1
sta SCREEN+1
//SEG19 [10] (word) main::w#1 ← ++ (word) main::w#2 [ main::w#1 ] ( main:2 [ main::w#1 ] ) -- vwuz1=_inc_vwuz1
inc w
bne !+
inc w+1
!:
//SEG20 [11] if((word) main::w#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 [ main::w#1 ] ( main:2 [ main::w#1 ] ) -- vwuz1_neq_0_then_la1
lda w
bne b1_from_b1
lda w+1
bne b1_from_b1
//SEG21 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
//SEG22 [12] phi (signed word) main::sw#2 = -(word/signed word/dword/signed dword) 32767 [phi:main::@1->main::@2#0] -- vwsz1=vwsc1
lda #<-$7fff
sta sw
lda #>-$7fff
sta sw+1
jmp b2
//SEG23 [12] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
b2_from_b2:
//SEG24 [12] phi (signed word) main::sw#2 = (signed word) main::sw#1 [phi:main::@2->main::@2#0] -- register_copy
jmp b2
//SEG25 main::@2
b2:
//SEG26 [13] (byte~) main::$4 ← < (signed word) main::sw#2 [ main::sw#2 main::$4 ] ( main:2 [ main::sw#2 main::$4 ] ) -- vbuz1=_lo_vwsz2
lda sw
sta _4
//SEG27 [14] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$4 [ main::sw#2 ] ( main:2 [ main::sw#2 ] ) -- _deref_pbuc1=vbuz1
lda _4
sta SCREEN+3
//SEG28 [15] (byte~) main::$5 ← > (signed word) main::sw#2 [ main::sw#2 main::$5 ] ( main:2 [ main::sw#2 main::$5 ] ) -- vbuz1=_hi_vwsz2
lda sw+1
sta _5
//SEG29 [16] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte~) main::$5 [ main::sw#2 ] ( main:2 [ main::sw#2 ] ) -- _deref_pbuc1=vbuz1
lda _5
sta SCREEN+4
//SEG30 [17] (signed word) main::sw#1 ← ++ (signed word) main::sw#2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] ) -- vwsz1=_inc_vwsz1
inc sw
bne !+
inc sw+1
!:
//SEG31 [18] if((signed word) main::sw#1!=(word/signed word/dword/signed dword) 32767) goto main::@2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] ) -- vwsz1_neq_vwuc1_then_la1
lda sw+1
cmp #>$7fff
bne b2_from_b2
lda sw
cmp #<$7fff
bne b2_from_b2
jmp breturn
//SEG32 main::@return
breturn:
//SEG33 [19] return [ ] ( main:2 [ ] )
rts
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] (byte~) main::$0 ← < (word) main::w#2 [ main::w#2 main::$0 ] ( main:2 [ main::w#2 main::$0 ] ) always clobbers reg byte a
Statement [8] (byte~) main::$1 ← > (word) main::w#2 [ main::w#2 main::$1 ] ( main:2 [ main::w#2 main::$1 ] ) always clobbers reg byte a
Statement [11] if((word) main::w#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 [ main::w#1 ] ( main:2 [ main::w#1 ] ) always clobbers reg byte a
Statement [13] (byte~) main::$4 ← < (signed word) main::sw#2 [ main::sw#2 main::$4 ] ( main:2 [ main::sw#2 main::$4 ] ) always clobbers reg byte a
Statement [15] (byte~) main::$5 ← > (signed word) main::sw#2 [ main::sw#2 main::$5 ] ( main:2 [ main::sw#2 main::$5 ] ) always clobbers reg byte a
Statement [18] if((signed word) main::sw#1!=(word/signed word/dword/signed dword) 32767) goto main::@2 [ main::sw#1 ] ( main:2 [ main::sw#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_WORD:4 [ main::sw#2 main::sw#1 ] : zp ZP_WORD:4 ,
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 [ main::$1 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:8 [ main::$4 ] : zp ZP_BYTE:8 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:9 [ main::$5 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 25.3: zp ZP_WORD:2 [ main::w#2 main::w#1 ] 25.3: zp ZP_WORD:4 [ main::sw#2 main::sw#1 ] 22: zp ZP_BYTE:6 [ main::$0 ] 22: zp ZP_BYTE:7 [ main::$1 ] 22: zp ZP_BYTE:8 [ main::$4 ] 22: zp ZP_BYTE:9 [ main::$5 ]
Uplift Scope []
Uplifting [main] best 1158 combination zp ZP_WORD:2 [ main::w#2 main::w#1 ] zp ZP_WORD:4 [ main::sw#2 main::sw#1 ] reg byte a [ main::$0 ] reg byte a [ main::$1 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ]
Limited combination testing to 100 combinations of 256 possible.
Uplifting [] best 1158 combination
Coalescing zero page register [ zp ZP_WORD:2 [ main::w#2 main::w#1 ] ] with [ zp ZP_WORD:4 [ main::sw#2 main::sw#1 ] ]
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 [2] call main [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
main_from_b1:
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
.label SCREEN = $400
.label w = 2
.label sw = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (word) main::w#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1
lda #<0
sta w
lda #>0
sta w+1
jmp b1
//SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
b1_from_b1:
//SEG13 [5] phi (word) main::w#2 = (word) main::w#1 [phi:main::@1->main::@1#0] -- register_copy
jmp b1
//SEG14 main::@1
b1:
//SEG15 [6] (byte~) main::$0 ← < (word) main::w#2 [ main::w#2 main::$0 ] ( main:2 [ main::w#2 main::$0 ] ) -- vbuaa=_lo_vwuz1
lda w
//SEG16 [7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ main::w#2 ] ( main:2 [ main::w#2 ] ) -- _deref_pbuc1=vbuaa
sta SCREEN+0
//SEG17 [8] (byte~) main::$1 ← > (word) main::w#2 [ main::w#2 main::$1 ] ( main:2 [ main::w#2 main::$1 ] ) -- vbuaa=_hi_vwuz1
lda w+1
//SEG18 [9] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ main::w#2 ] ( main:2 [ main::w#2 ] ) -- _deref_pbuc1=vbuaa
sta SCREEN+1
//SEG19 [10] (word) main::w#1 ← ++ (word) main::w#2 [ main::w#1 ] ( main:2 [ main::w#1 ] ) -- vwuz1=_inc_vwuz1
inc w
bne !+
inc w+1
!:
//SEG20 [11] if((word) main::w#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 [ main::w#1 ] ( main:2 [ main::w#1 ] ) -- vwuz1_neq_0_then_la1
lda w
bne b1_from_b1
lda w+1
bne b1_from_b1
//SEG21 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
//SEG22 [12] phi (signed word) main::sw#2 = -(word/signed word/dword/signed dword) 32767 [phi:main::@1->main::@2#0] -- vwsz1=vwsc1
lda #<-$7fff
sta sw
lda #>-$7fff
sta sw+1
jmp b2
//SEG23 [12] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
b2_from_b2:
//SEG24 [12] phi (signed word) main::sw#2 = (signed word) main::sw#1 [phi:main::@2->main::@2#0] -- register_copy
jmp b2
//SEG25 main::@2
b2:
//SEG26 [13] (byte~) main::$4 ← < (signed word) main::sw#2 [ main::sw#2 main::$4 ] ( main:2 [ main::sw#2 main::$4 ] ) -- vbuaa=_lo_vwsz1
lda sw
//SEG27 [14] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$4 [ main::sw#2 ] ( main:2 [ main::sw#2 ] ) -- _deref_pbuc1=vbuaa
sta SCREEN+3
//SEG28 [15] (byte~) main::$5 ← > (signed word) main::sw#2 [ main::sw#2 main::$5 ] ( main:2 [ main::sw#2 main::$5 ] ) -- vbuaa=_hi_vwsz1
lda sw+1
//SEG29 [16] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte~) main::$5 [ main::sw#2 ] ( main:2 [ main::sw#2 ] ) -- _deref_pbuc1=vbuaa
sta SCREEN+4
//SEG30 [17] (signed word) main::sw#1 ← ++ (signed word) main::sw#2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] ) -- vwsz1=_inc_vwsz1
inc sw
bne !+
inc sw+1
!:
//SEG31 [18] if((signed word) main::sw#1!=(word/signed word/dword/signed dword) 32767) goto main::@2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] ) -- vwsz1_neq_vwuc1_then_la1
lda sw+1
cmp #>$7fff
bne b2_from_b2
lda sw
cmp #<$7fff
bne b2_from_b2
jmp breturn
//SEG32 main::@return
breturn:
//SEG33 [19] return [ ] ( main:2 [ ] )
rts
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #>0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b2_from_b2 with b2
Replacing label b2_from_b2 with b2
Removing instruction bbegin:
Removing instruction b1_from_bbegin:
Removing instruction main_from_b1:
Removing instruction bend_from_b1:
Removing instruction b1_from_b1:
Removing instruction b2_from_b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b1:
Removing instruction bend:
Removing instruction b1_from_main:
Removing instruction b2_from_b1:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp b1
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(void()) main()
(byte~) main::$0 reg byte a 22.0
(byte~) main::$1 reg byte a 22.0
(byte~) main::$4 reg byte a 22.0
(byte~) main::$5 reg byte a 22.0
(label) main::@1
(label) main::@2
(label) main::@return
(byte*) main::SCREEN
(const byte*) main::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(signed word) main::sw
(signed word) main::sw#1 sw zp ZP_WORD:2 16.5
(signed word) main::sw#2 sw zp ZP_WORD:2 8.8
(word) main::w
(word) main::w#1 w zp ZP_WORD:2 16.5
(word) main::w#2 w zp ZP_WORD:2 8.8
zp ZP_WORD:2 [ main::w#2 main::w#1 main::sw#2 main::sw#1 ]
reg byte a [ main::$0 ]
reg byte a [ main::$1 ]
reg byte a [ main::$4 ]
reg byte a [ main::$5 ]
FINAL ASSEMBLER
Score: 982
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
//SEG4 @1
//SEG5 [2] call main [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
//SEG8 @end
//SEG9 main
main: {
.label SCREEN = $400
.label w = 2
.label sw = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
//SEG11 [5] phi (word) main::w#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1
lda #<0
sta w
sta w+1
//SEG12 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
//SEG13 [5] phi (word) main::w#2 = (word) main::w#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG14 main::@1
b1:
//SEG15 [6] (byte~) main::$0 ← < (word) main::w#2 [ main::w#2 main::$0 ] ( main:2 [ main::w#2 main::$0 ] ) -- vbuaa=_lo_vwuz1
lda w
//SEG16 [7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$0 [ main::w#2 ] ( main:2 [ main::w#2 ] ) -- _deref_pbuc1=vbuaa
sta SCREEN+0
//SEG17 [8] (byte~) main::$1 ← > (word) main::w#2 [ main::w#2 main::$1 ] ( main:2 [ main::w#2 main::$1 ] ) -- vbuaa=_hi_vwuz1
lda w+1
//SEG18 [9] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$1 [ main::w#2 ] ( main:2 [ main::w#2 ] ) -- _deref_pbuc1=vbuaa
sta SCREEN+1
//SEG19 [10] (word) main::w#1 ← ++ (word) main::w#2 [ main::w#1 ] ( main:2 [ main::w#1 ] ) -- vwuz1=_inc_vwuz1
inc w
bne !+
inc w+1
!:
//SEG20 [11] if((word) main::w#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 [ main::w#1 ] ( main:2 [ main::w#1 ] ) -- vwuz1_neq_0_then_la1
lda w
bne b1
lda w+1
bne b1
//SEG21 [12] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
//SEG22 [12] phi (signed word) main::sw#2 = -(word/signed word/dword/signed dword) 32767 [phi:main::@1->main::@2#0] -- vwsz1=vwsc1
lda #<-$7fff
sta sw
lda #>-$7fff
sta sw+1
//SEG23 [12] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
//SEG24 [12] phi (signed word) main::sw#2 = (signed word) main::sw#1 [phi:main::@2->main::@2#0] -- register_copy
//SEG25 main::@2
b2:
//SEG26 [13] (byte~) main::$4 ← < (signed word) main::sw#2 [ main::sw#2 main::$4 ] ( main:2 [ main::sw#2 main::$4 ] ) -- vbuaa=_lo_vwsz1
lda sw
//SEG27 [14] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$4 [ main::sw#2 ] ( main:2 [ main::sw#2 ] ) -- _deref_pbuc1=vbuaa
sta SCREEN+3
//SEG28 [15] (byte~) main::$5 ← > (signed word) main::sw#2 [ main::sw#2 main::$5 ] ( main:2 [ main::sw#2 main::$5 ] ) -- vbuaa=_hi_vwsz1
lda sw+1
//SEG29 [16] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte~) main::$5 [ main::sw#2 ] ( main:2 [ main::sw#2 ] ) -- _deref_pbuc1=vbuaa
sta SCREEN+4
//SEG30 [17] (signed word) main::sw#1 ← ++ (signed word) main::sw#2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] ) -- vwsz1=_inc_vwsz1
inc sw
bne !+
inc sw+1
!:
//SEG31 [18] if((signed word) main::sw#1!=(word/signed word/dword/signed dword) 32767) goto main::@2 [ main::sw#1 ] ( main:2 [ main::sw#1 ] ) -- vwsz1_neq_vwuc1_then_la1
lda sw+1
cmp #>$7fff
bne b2
lda sw
cmp #<$7fff
bne b2
//SEG32 main::@return
//SEG33 [19] return [ ] ( main:2 [ ] )
rts
}

View File

@ -0,0 +1,25 @@
(label) @1
(label) @begin
(label) @end
(void()) main()
(byte~) main::$0 reg byte a 22.0
(byte~) main::$1 reg byte a 22.0
(byte~) main::$4 reg byte a 22.0
(byte~) main::$5 reg byte a 22.0
(label) main::@1
(label) main::@2
(label) main::@return
(byte*) main::SCREEN
(const byte*) main::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(signed word) main::sw
(signed word) main::sw#1 sw zp ZP_WORD:2 16.5
(signed word) main::sw#2 sw zp ZP_WORD:2 8.8
(word) main::w
(word) main::w#1 w zp ZP_WORD:2 16.5
(word) main::w#2 w zp ZP_WORD:2 8.8
zp ZP_WORD:2 [ main::w#2 main::w#1 main::sw#2 main::sw#1 ]
reg byte a [ main::$0 ]
reg byte a [ main::$1 ]
reg byte a [ main::$4 ]
reg byte a [ main::$5 ]

View File

@ -793,15 +793,15 @@ Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#2)!=(byte) '@
Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_char_cursor#0 = ((byte*))1024 Constant (const byte*) print_char_cursor#0 = ((byte*))1024
Constant (const string) print_str::str#1 = main::str Constant (const byte*) print_str::str#1 = main::str
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@2
Culled Empty Block (label) @16 Culled Empty Block (label) @16
Succesful SSA optimization Pass2CullEmptyBlocks Succesful SSA optimization Pass2CullEmptyBlocks
OPTIMIZING CONTROL FLOW GRAPH OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#1
Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#1
Inlining constant with var siblings (const byte*) print_char_cursor#0 Inlining constant with var siblings (const byte*) print_char_cursor#0
Inlining constant with var siblings (const byte*) print_char_cursor#0 Inlining constant with var siblings (const byte*) print_char_cursor#0
Constant inlined print_char_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined print_char_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024

View File

@ -24,10 +24,10 @@ print2: scope:[print2] from main main::@1
print2::@1: scope:[print2] from print2 print2::@1 print2::@1: scope:[print2] from print2 print2::@1
[10] (byte) print2::j#2 ← phi( print2/(byte/signed byte/word/signed word/dword/signed dword) 0 print2::@1/(byte) print2::j#1 ) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) [10] (byte) print2::j#2 ← phi( print2/(byte/signed byte/word/signed word/dword/signed dword) 0 print2::@1/(byte) print2::j#1 ) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] )
[10] (byte) print2::i#2 ← phi( print2/(byte/signed byte/word/signed word/dword/signed dword) 0 print2::@1/(byte) print2::i#1 ) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) [10] (byte) print2::i#2 ← phi( print2/(byte/signed byte/word/signed word/dword/signed dword) 0 print2::@1/(byte) print2::i#1 ) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] )
[11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const string) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] )
[12] (byte) print2::j#1 ← (byte) print2::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print2::at#3 print2::i#2 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#1 ] ) [12] (byte) print2::j#1 ← (byte) print2::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print2::at#3 print2::i#2 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#1 ] )
[13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) [13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] )
[14] if(*((const string) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) [14] if(*((const byte*) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] )
to:print2::@return to:print2::@return
print2::@return: scope:[print2] from print2::@1 print2::@return: scope:[print2] from print2::@1
[15] return [ ] ( main:2::print2:5 [ ] main:2::print2:7 [ ] ) [15] return [ ] ( main:2::print2:5 [ ] main:2::print2:7 [ ] )

View File

@ -209,14 +209,14 @@ Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) print2::$0 if(*((byte*) print2::msg#3 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 Simple Condition (bool~) print2::$0 if(*((byte*) print2::msg#3 + (byte) print2::i#1)!=(byte) '@') goto print2::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte*) screen#0 = ((byte*))1024
Constant (const string) main::hello#0 = main::$3 Constant (const byte*) main::hello#0 = main::$3
Constant (const byte) print2::j#0 = 0 Constant (const byte) print2::j#0 = 0
Constant (const byte) print2::i#0 = 0 Constant (const byte) print2::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print2::at#0 = screen#0 Constant (const byte*) print2::at#0 = screen#0
Constant (const string) print2::msg#0 = main::hello#0 Constant (const byte*) print2::msg#0 = main::hello#0
Constant (const byte*) print2::at#1 = screen#0+80 Constant (const byte*) print2::at#1 = screen#0+80
Constant (const string) print2::msg#1 = main::hello#0 Constant (const byte*) print2::msg#1 = main::hello#0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
OPTIMIZING CONTROL FLOW GRAPH OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const byte) print2::j#0 Inlining constant with var siblings (const byte) print2::j#0
@ -225,18 +225,18 @@ Inlining constant with var siblings (const byte) print2::i#0
Inlining constant with var siblings (const byte) print2::i#0 Inlining constant with var siblings (const byte) print2::i#0
Inlining constant with var siblings (const byte*) print2::at#0 Inlining constant with var siblings (const byte*) print2::at#0
Inlining constant with different constant siblings (const byte*) print2::at#0 Inlining constant with different constant siblings (const byte*) print2::at#0
Inlining constant with var siblings (const string) print2::msg#0 Inlining constant with var siblings (const byte*) print2::msg#0
Inlining constant with var siblings (const byte*) print2::at#1 Inlining constant with var siblings (const byte*) print2::at#1
Inlining constant with var siblings (const string) print2::msg#1 Inlining constant with var siblings (const byte*) print2::msg#1
Constant inlined print2::msg#1 = (const string) main::hello#0 Constant inlined print2::msg#1 = (const byte*) main::hello#0
Constant inlined print2::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined print2::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print2::msg#0 = (const string) main::hello#0 Constant inlined print2::msg#0 = (const byte*) main::hello#0
Constant inlined print2::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined print2::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print2::at#1 = (const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 80 Constant inlined print2::at#1 = (const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 80
Constant inlined main::$3 = (const string) main::hello#0 Constant inlined main::$3 = (const byte*) main::hello#0
Constant inlined print2::at#0 = (const byte*) screen#0 Constant inlined print2::at#0 = (const byte*) screen#0
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
Identical Phi Values (byte*) print2::msg#3 (const string) main::hello#0 Identical Phi Values (byte*) print2::msg#3 (const byte*) main::hello#0
Succesful SSA optimization Pass2IdenticalPhiElimination Succesful SSA optimization Pass2IdenticalPhiElimination
Block Sequence Planned @begin @2 @end main main::@1 main::@return print2 print2::@1 print2::@return Block Sequence Planned @begin @2 @end main main::@1 main::@return print2 print2::@1 print2::@return
Added new block during phi lifting print2::@3(between print2::@1 and print2::@1) Added new block during phi lifting print2::@3(between print2::@1 and print2::@1)
@ -301,10 +301,10 @@ print2: scope:[print2] from main main::@1
print2::@1: scope:[print2] from print2 print2::@1 print2::@1: scope:[print2] from print2 print2::@1
[10] (byte) print2::j#2 ← phi( print2/(byte/signed byte/word/signed word/dword/signed dword) 0 print2::@1/(byte) print2::j#1 ) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) [10] (byte) print2::j#2 ← phi( print2/(byte/signed byte/word/signed word/dword/signed dword) 0 print2::@1/(byte) print2::j#1 ) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] )
[10] (byte) print2::i#2 ← phi( print2/(byte/signed byte/word/signed word/dword/signed dword) 0 print2::@1/(byte) print2::i#1 ) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) [10] (byte) print2::i#2 ← phi( print2/(byte/signed byte/word/signed word/dword/signed dword) 0 print2::@1/(byte) print2::i#1 ) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] )
[11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const string) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] )
[12] (byte) print2::j#1 ← (byte) print2::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print2::at#3 print2::i#2 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#1 ] ) [12] (byte) print2::j#1 ← (byte) print2::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print2::at#3 print2::i#2 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#1 ] )
[13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) [13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] )
[14] if(*((const string) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) [14] if(*((const byte*) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] )
to:print2::@return to:print2::@return
print2::@return: scope:[print2] from print2::@1 print2::@return: scope:[print2] from print2::@1
[15] return [ ] ( main:2::print2:5 [ ] main:2::print2:7 [ ] ) [15] return [ ] ( main:2::print2:5 [ ] main:2::print2:7 [ ] )
@ -437,7 +437,7 @@ print2: {
jmp b1 jmp b1
//SEG27 print2::@1 //SEG27 print2::@1
b1: b1:
//SEG28 [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const string) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3 //SEG28 [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_vbuz3
ldy i ldy i
lda main.hello,y lda main.hello,y
ldy j ldy j
@ -449,7 +449,7 @@ print2: {
sta j sta j
//SEG30 [13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- vbuz1=_inc_vbuz1 //SEG30 [13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- vbuz1=_inc_vbuz1
inc i inc i
//SEG31 [14] if(*((const string) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 //SEG31 [14] if(*((const byte*) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
ldy i ldy i
lda main.hello,y lda main.hello,y
cmp #'@' cmp #'@'
@ -462,12 +462,12 @@ print2: {
} }
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const string) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) always clobbers reg byte a Statement [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ]
Statement [14] if(*((const string) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) always clobbers reg byte a Statement [14] if(*((const byte*) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) always clobbers reg byte a
Statement [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const string) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) always clobbers reg byte a Statement [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) always clobbers reg byte a
Statement [14] if(*((const string) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) always clobbers reg byte a Statement [14] if(*((const byte*) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) always clobbers reg byte a
Potential registers zp ZP_WORD:2 [ print2::at#3 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:2 [ print2::at#3 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ print2::i#2 print2::i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:5 [ print2::j#2 print2::j#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y ,
@ -553,7 +553,7 @@ print2: {
jmp b1 jmp b1
//SEG27 print2::@1 //SEG27 print2::@1
b1: b1:
//SEG28 [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const string) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx //SEG28 [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx
lda main.hello,x lda main.hello,x
sta (at),y sta (at),y
//SEG29 [12] (byte) print2::j#1 ← (byte) print2::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print2::at#3 print2::i#2 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#1 ] ) -- vbuyy=vbuyy_plus_2 //SEG29 [12] (byte) print2::j#1 ← (byte) print2::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print2::at#3 print2::i#2 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#1 ] ) -- vbuyy=vbuyy_plus_2
@ -561,7 +561,7 @@ print2: {
iny iny
//SEG30 [13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- vbuxx=_inc_vbuxx //SEG30 [13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- vbuxx=_inc_vbuxx
inx inx
//SEG31 [14] if(*((const string) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 //SEG31 [14] if(*((const byte*) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1
lda main.hello,x lda main.hello,x
cmp #'@' cmp #'@'
bne b1_from_b1 bne b1_from_b1
@ -608,7 +608,7 @@ FINAL SYMBOL TABLE
(label) main::@1 (label) main::@1
(label) main::@return (label) main::@return
(byte*) main::hello (byte*) main::hello
(const string) main::hello#0 hello = (string) "hello world!@" (const byte*) main::hello#0 hello = (string) "hello world!@"
(void()) print2((byte*) print2::at , (byte*) print2::msg) (void()) print2((byte*) print2::at , (byte*) print2::msg)
(label) print2::@1 (label) print2::@1
(label) print2::@return (label) print2::@return
@ -684,7 +684,7 @@ print2: {
//SEG26 [10] phi (byte) print2::i#2 = (byte) print2::i#1 [phi:print2::@1->print2::@1#1] -- register_copy //SEG26 [10] phi (byte) print2::i#2 = (byte) print2::i#1 [phi:print2::@1->print2::@1#1] -- register_copy
//SEG27 print2::@1 //SEG27 print2::@1
b1: b1:
//SEG28 [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const string) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx //SEG28 [11] *((byte*) print2::at#3 + (byte) print2::j#2) ← *((const byte*) main::hello#0 + (byte) print2::i#2) [ print2::at#3 print2::i#2 print2::j#2 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#2 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#2 ] ) -- pbuz1_derefidx_vbuyy=pbuc1_derefidx_vbuxx
lda main.hello,x lda main.hello,x
sta (at),y sta (at),y
//SEG29 [12] (byte) print2::j#1 ← (byte) print2::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print2::at#3 print2::i#2 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#1 ] ) -- vbuyy=vbuyy_plus_2 //SEG29 [12] (byte) print2::j#1 ← (byte) print2::j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ print2::at#3 print2::i#2 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#2 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#2 print2::j#1 ] ) -- vbuyy=vbuyy_plus_2
@ -692,7 +692,7 @@ print2: {
iny iny
//SEG30 [13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- vbuxx=_inc_vbuxx //SEG30 [13] (byte) print2::i#1 ← ++ (byte) print2::i#2 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- vbuxx=_inc_vbuxx
inx inx
//SEG31 [14] if(*((const string) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1 //SEG31 [14] if(*((const byte*) main::hello#0 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 [ print2::at#3 print2::i#1 print2::j#1 ] ( main:2::print2:5 [ print2::at#3 print2::i#1 print2::j#1 ] main:2::print2:7 [ print2::at#3 print2::i#1 print2::j#1 ] ) -- pbuc1_derefidx_vbuxx_neq_vbuc2_then_la1
lda main.hello,x lda main.hello,x
cmp #'@' cmp #'@'
bne b1 bne b1

View File

@ -5,7 +5,7 @@
(label) main::@1 (label) main::@1
(label) main::@return (label) main::@return
(byte*) main::hello (byte*) main::hello
(const string) main::hello#0 hello = (string) "hello world!@" (const byte*) main::hello#0 hello = (string) "hello world!@"
(void()) print2((byte*) print2::at , (byte*) print2::msg) (void()) print2((byte*) print2::at , (byte*) print2::msg)
(label) print2::@1 (label) print2::@1
(label) print2::@return (label) print2::@return

View File

@ -22,7 +22,7 @@ main::@4: scope:[main] from main::@1
[9] call print_ln [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) [9] call print_ln [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] )
to:main::@5 to:main::@5
main::@5: scope:[main] from main::@4 main::@5: scope:[main] from main::@4
[10] *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) [10] *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] )
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ print_line_cursor#1 main::i#1 ] ( main:2 [ print_line_cursor#1 main::i#1 ] ) [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ print_line_cursor#1 main::i#1 ] ( main:2 [ print_line_cursor#1 main::i#1 ] )
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@6 [ print_line_cursor#1 main::i#1 ] ( main:2 [ print_line_cursor#1 main::i#1 ] ) [12] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@6 [ print_line_cursor#1 main::i#1 ] ( main:2 [ print_line_cursor#1 main::i#1 ] )
to:main::@return to:main::@return
@ -48,7 +48,7 @@ print_str: scope:[print_str] from main::@1
to:print_str::@1 to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2 print_str::@1: scope:[print_str] from print_str print_str::@2
[21] (byte*) print_char_cursor#12 ← phi( print_str/(byte*) print_char_cursor#25 print_str::@2/(byte*) print_char_cursor#1 ) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) [21] (byte*) print_char_cursor#12 ← phi( print_str/(byte*) print_char_cursor#25 print_str::@2/(byte*) print_char_cursor#1 ) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] )
[21] (byte*) print_str::str#2 ← phi( print_str/(const string) txt#0 print_str::@2/(byte*) print_str::str#0 ) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) [21] (byte*) print_str::str#2 ← phi( print_str/(const byte[]) txt#0 print_str::@2/(byte*) print_str::str#0 ) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] )
[22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] )
to:print_str::@return to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1

View File

@ -939,12 +939,12 @@ Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) prin
Simple Condition (bool~) main::$3 if((byte) main::i#1!=rangelast(0,10)) goto main::@1 Simple Condition (bool~) main::$3 if((byte) main::i#1!=rangelast(0,10)) goto main::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_line_cursor#0 = ((byte*))1024 Constant (const byte*) print_line_cursor#0 = ((byte*))1024
Constant (const string) txt#0 = $0 Constant (const byte[]) txt#0 = $0
Constant (const byte) main::i#0 = 0 Constant (const byte) main::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000
Constant (const string) print_str::str#1 = txt#0 Constant (const byte*) print_str::str#1 = txt#0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in *(txt#0+1) Consolidated array index constant in *(txt#0+1)
Consolidated array index constant in *(txt#0+1) Consolidated array index constant in *(txt#0+1)
@ -962,8 +962,8 @@ Not aliassing across scopes: print_line_cursor#9 print_line_cursor#19
Not aliassing across scopes: print_char_cursor#12 print_char_cursor#25 Not aliassing across scopes: print_char_cursor#12 print_char_cursor#25
Not aliassing across scopes: print_line_cursor#9 print_line_cursor#19 Not aliassing across scopes: print_line_cursor#9 print_line_cursor#19
OPTIMIZING CONTROL FLOW GRAPH OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#1
Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#1
Inlining constant with var siblings (const byte*) print_cls::sc#0 Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte*) print_cls::sc#0 Inlining constant with var siblings (const byte*) print_cls::sc#0
Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::i#0
@ -972,10 +972,10 @@ Inlining constant with var siblings (const byte*) print_line_cursor#0
Inlining constant with var siblings (const byte*) print_line_cursor#0 Inlining constant with var siblings (const byte*) print_line_cursor#0
Inlining constant with var siblings (const byte*) print_line_cursor#0 Inlining constant with var siblings (const byte*) print_line_cursor#0
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined print_str::str#1 = (const string) txt#0 Constant inlined print_str::str#1 = (const byte[]) txt#0
Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000 Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000
Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined $0 = (const string) txt#0 Constant inlined $0 = (const byte[]) txt#0
Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @15 @end main main::@1 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return Block Sequence Planned @begin @15 @end main main::@1 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
@ -1055,7 +1055,7 @@ main::@4: scope:[main] from main::@1
[9] call print_ln [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) [9] call print_ln [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] )
to:main::@5 to:main::@5
main::@5: scope:[main] from main::@4 main::@5: scope:[main] from main::@4
[10] *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) [10] *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] )
[11] (byte) main::i#1 ← ++ (byte) main::i#2 [ print_line_cursor#1 main::i#1 ] ( main:2 [ print_line_cursor#1 main::i#1 ] ) [11] (byte) main::i#1 ← ++ (byte) main::i#2 [ print_line_cursor#1 main::i#1 ] ( main:2 [ print_line_cursor#1 main::i#1 ] )
[12] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@6 [ print_line_cursor#1 main::i#1 ] ( main:2 [ print_line_cursor#1 main::i#1 ] ) [12] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@6 [ print_line_cursor#1 main::i#1 ] ( main:2 [ print_line_cursor#1 main::i#1 ] )
to:main::@return to:main::@return
@ -1081,7 +1081,7 @@ print_str: scope:[print_str] from main::@1
to:print_str::@1 to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2 print_str::@1: scope:[print_str] from print_str print_str::@2
[21] (byte*) print_char_cursor#12 ← phi( print_str/(byte*) print_char_cursor#25 print_str::@2/(byte*) print_char_cursor#1 ) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) [21] (byte*) print_char_cursor#12 ← phi( print_str/(byte*) print_char_cursor#25 print_str::@2/(byte*) print_char_cursor#1 ) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] )
[21] (byte*) print_str::str#2 ← phi( print_str/(const string) txt#0 print_str::@2/(byte*) print_str::str#0 ) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) [21] (byte*) print_str::str#2 ← phi( print_str/(const byte[]) txt#0 print_str::@2/(byte*) print_str::str#0 ) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] )
[22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) [22] if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] )
to:print_str::@return to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1 print_str::@return: scope:[print_str] from print_str::@1
@ -1265,7 +1265,7 @@ main: {
jmp b5 jmp b5
//SEG23 main::@5 //SEG23 main::@5
b5: b5:
//SEG24 [10] *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc2 //SEG24 [10] *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc2
lda txt+1 lda txt+1
clc clc
adc #1 adc #1
@ -1333,7 +1333,7 @@ print_str: {
//SEG44 [21] phi from print_str to print_str::@1 [phi:print_str->print_str::@1] //SEG44 [21] phi from print_str to print_str::@1 [phi:print_str->print_str::@1]
b1_from_print_str: b1_from_print_str:
//SEG45 [21] phi (byte*) print_char_cursor#12 = (byte*) print_char_cursor#25 [phi:print_str->print_str::@1#0] -- register_copy //SEG45 [21] phi (byte*) print_char_cursor#12 = (byte*) print_char_cursor#25 [phi:print_str->print_str::@1#0] -- register_copy
//SEG46 [21] phi (byte*) print_str::str#2 = (const string) txt#0 [phi:print_str->print_str::@1#1] -- pbuz1=pbuc1 //SEG46 [21] phi (byte*) print_str::str#2 = (const byte[]) txt#0 [phi:print_str->print_str::@1#1] -- pbuz1=pbuc1
lda #<txt lda #<txt
sta str sta str
lda #>txt lda #>txt
@ -1416,7 +1416,7 @@ print_cls: {
txt: .text "camelot@" txt: .text "camelot@"
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [10] *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) always clobbers reg byte a Statement [10] *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [14] (byte*~) print_char_cursor#29 ← (byte*) print_line_cursor#1 [ print_char_cursor#29 print_line_cursor#1 main::i#1 ] ( main:2 [ print_char_cursor#29 print_line_cursor#1 main::i#1 ] ) always clobbers reg byte a Statement [14] (byte*~) print_char_cursor#29 ← (byte*) print_line_cursor#1 [ print_char_cursor#29 print_line_cursor#1 main::i#1 ] ( main:2 [ print_char_cursor#29 print_line_cursor#1 main::i#1 ] ) always clobbers reg byte a
Statement [17] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a Statement [17] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a
@ -1426,7 +1426,7 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ ma
Statement [24] *((byte*) print_char_cursor#12) ← *((byte*) print_str::str#2) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y Statement [24] *((byte*) print_char_cursor#12) ← *((byte*) print_str::str#2) [ print_char_cursor#12 print_str::str#2 ] ( main:2::print_str:7 [ print_line_cursor#19 main::i#2 print_char_cursor#12 print_str::str#2 ] ) always clobbers reg byte a reg byte y
Statement [29] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y Statement [29] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y
Statement [31] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a Statement [31] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a
Statement [10] *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) always clobbers reg byte a Statement [10] *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [14] (byte*~) print_char_cursor#29 ← (byte*) print_line_cursor#1 [ print_char_cursor#29 print_line_cursor#1 main::i#1 ] ( main:2 [ print_char_cursor#29 print_line_cursor#1 main::i#1 ] ) always clobbers reg byte a Statement [14] (byte*~) print_char_cursor#29 ← (byte*) print_line_cursor#1 [ print_char_cursor#29 print_line_cursor#1 main::i#1 ] ( main:2 [ print_char_cursor#29 print_line_cursor#1 main::i#1 ] ) always clobbers reg byte a
Statement [17] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a Statement [17] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a
Statement [18] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a Statement [18] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#12 ] ( main:2::print_ln:9 [ main::i#2 print_line_cursor#1 print_char_cursor#12 ] ) always clobbers reg byte a
@ -1520,7 +1520,7 @@ main: {
jmp b5 jmp b5
//SEG23 main::@5 //SEG23 main::@5
b5: b5:
//SEG24 [10] *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc2 //SEG24 [10] *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc2
lda txt+1 lda txt+1
clc clc
adc #1 adc #1
@ -1587,7 +1587,7 @@ print_str: {
//SEG44 [21] phi from print_str to print_str::@1 [phi:print_str->print_str::@1] //SEG44 [21] phi from print_str to print_str::@1 [phi:print_str->print_str::@1]
b1_from_print_str: b1_from_print_str:
//SEG45 [21] phi (byte*) print_char_cursor#12 = (byte*) print_char_cursor#25 [phi:print_str->print_str::@1#0] -- register_copy //SEG45 [21] phi (byte*) print_char_cursor#12 = (byte*) print_char_cursor#25 [phi:print_str->print_str::@1#0] -- register_copy
//SEG46 [21] phi (byte*) print_str::str#2 = (const string) txt#0 [phi:print_str->print_str::@1#1] -- pbuz1=pbuc1 //SEG46 [21] phi (byte*) print_str::str#2 = (const byte[]) txt#0 [phi:print_str->print_str::@1#1] -- pbuz1=pbuc1
lda #<txt lda #<txt
sta str sta str
lda #>txt lda #>txt
@ -1758,7 +1758,7 @@ FINAL SYMBOL TABLE
(byte*) print_str::str#0 str zp ZP_WORD:4 202.0 (byte*) print_str::str#0 str zp ZP_WORD:4 202.0
(byte*) print_str::str#2 str zp ZP_WORD:4 101.0 (byte*) print_str::str#2 str zp ZP_WORD:4 101.0
(byte[]) txt (byte[]) txt
(const string) txt#0 txt = (string) "camelot@" (const byte[]) txt#0 txt = (string) "camelot@"
reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i#2 main::i#1 ]
zp ZP_WORD:2 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] zp ZP_WORD:2 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ]
@ -1813,7 +1813,7 @@ main: {
//SEG22 [15] phi from main::@4 to print_ln [phi:main::@4->print_ln] //SEG22 [15] phi from main::@4 to print_ln [phi:main::@4->print_ln]
jsr print_ln jsr print_ln
//SEG23 main::@5 //SEG23 main::@5
//SEG24 [10] *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const string) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc2 //SEG24 [10] *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← ++ *((const byte[]) txt#0+(byte/signed byte/word/signed word/dword/signed dword) 1) [ main::i#2 print_line_cursor#1 ] ( main:2 [ main::i#2 print_line_cursor#1 ] ) -- _deref_pbuc1=_inc__deref_pbuc2
lda txt+1 lda txt+1
clc clc
adc #1 adc #1
@ -1871,7 +1871,7 @@ print_str: {
.label str = 4 .label str = 4
//SEG44 [21] phi from print_str to print_str::@1 [phi:print_str->print_str::@1] //SEG44 [21] phi from print_str to print_str::@1 [phi:print_str->print_str::@1]
//SEG45 [21] phi (byte*) print_char_cursor#12 = (byte*) print_char_cursor#25 [phi:print_str->print_str::@1#0] -- register_copy //SEG45 [21] phi (byte*) print_char_cursor#12 = (byte*) print_char_cursor#25 [phi:print_str->print_str::@1#0] -- register_copy
//SEG46 [21] phi (byte*) print_str::str#2 = (const string) txt#0 [phi:print_str->print_str::@1#1] -- pbuz1=pbuc1 //SEG46 [21] phi (byte*) print_str::str#2 = (const byte[]) txt#0 [phi:print_str->print_str::@1#1] -- pbuz1=pbuc1
lda #<txt lda #<txt
sta str sta str
lda #>txt lda #>txt

View File

@ -37,7 +37,7 @@
(byte*) print_str::str#0 str zp ZP_WORD:4 202.0 (byte*) print_str::str#0 str zp ZP_WORD:4 202.0
(byte*) print_str::str#2 str zp ZP_WORD:4 101.0 (byte*) print_str::str#2 str zp ZP_WORD:4 101.0
(byte[]) txt (byte[]) txt
(const string) txt#0 txt = (string) "camelot@" (const byte[]) txt#0 txt = (string) "camelot@"
reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i#2 main::i#1 ]
zp ZP_WORD:2 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] zp ZP_WORD:2 [ print_line_cursor#9 print_line_cursor#19 print_line_cursor#1 print_cls::sc#2 print_cls::sc#1 ]

View File

@ -16,10 +16,10 @@ main::print1: scope:[main] from main
main::print1_@1: scope:[main] from main::print1 main::print1_@1 main::print1_@1: scope:[main] from main::print1 main::print1_@1
[6] (byte) main::print1_j#2 ← phi( main::print1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print1_@1/(byte) main::print1_j#1 ) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) [6] (byte) main::print1_j#2 ← phi( main::print1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print1_@1/(byte) main::print1_j#1 ) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] )
[6] (byte) main::print1_i#2 ← phi( main::print1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print1_@1/(byte) main::print1_i#1 ) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) [6] (byte) main::print1_i#2 ← phi( main::print1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print1_@1/(byte) main::print1_i#1 ) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] )
[7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] )
[8] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print1_i#2 main::print1_j#1 ] ( main:2 [ main::print1_i#2 main::print1_j#1 ] ) [8] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print1_i#2 main::print1_j#1 ] ( main:2 [ main::print1_i#2 main::print1_j#1 ] )
[9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) [9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] )
[10] if(*((const string) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) [10] if(*((const byte*) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] )
to:main::print2 to:main::print2
main::print2: scope:[main] from main::print1_@1 main::print2: scope:[main] from main::print1_@1
[11] phi() [ ] ( main:2 [ ] ) [11] phi() [ ] ( main:2 [ ] )
@ -27,10 +27,10 @@ main::print2: scope:[main] from main::print1_@1
main::print2_@1: scope:[main] from main::print2 main::print2_@1 main::print2_@1: scope:[main] from main::print2 main::print2_@1
[12] (byte) main::print2_j#2 ← phi( main::print2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print2_@1/(byte) main::print2_j#1 ) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) [12] (byte) main::print2_j#2 ← phi( main::print2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print2_@1/(byte) main::print2_j#1 ) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] )
[12] (byte) main::print2_i#2 ← phi( main::print2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print2_@1/(byte) main::print2_i#1 ) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) [12] (byte) main::print2_i#2 ← phi( main::print2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print2_@1/(byte) main::print2_i#1 ) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] )
[13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] )
[14] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print2_i#2 main::print2_j#1 ] ( main:2 [ main::print2_i#2 main::print2_j#1 ] ) [14] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print2_i#2 main::print2_j#1 ] ( main:2 [ main::print2_i#2 main::print2_j#1 ] )
[15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) [15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] )
[16] if(*((const string) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) [16] if(*((const byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] )
to:main::@return to:main::@return
main::@return: scope:[main] from main::print2_@1 main::@return: scope:[main] from main::print2_@1
[17] return [ ] ( main:2 [ ] ) [17] return [ ] ( main:2 [ ] )

View File

@ -261,7 +261,7 @@ Simple Condition (bool) main::print1_$0#0 if(*((byte*) main::print1_msg#0 + (byt
Simple Condition (bool) main::print2_$0#0 if(*((byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 Simple Condition (bool) main::print2_$0#0 if(*((byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte*) screen#0 = ((byte*))1024
Constant (const string) main::print1_msg#0 = main::$4 Constant (const byte*) main::print1_msg#0 = main::$4
Constant (const byte) main::print1_j#0 = 0 Constant (const byte) main::print1_j#0 = 0
Constant (const byte) main::print1_i#0 = 0 Constant (const byte) main::print1_i#0 = 0
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$1 = 2*40 Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$1 = 2*40
@ -286,7 +286,7 @@ Constant inlined main::print2_j#0 = (byte/signed byte/word/signed word/dword/sig
Constant inlined main::print1_at#0 = (const byte*) screen#0 Constant inlined main::print1_at#0 = (const byte*) screen#0
Constant inlined main::print2_i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::print2_i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::$1 = (byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::$1 = (byte/signed byte/word/signed word/dword/signed dword) 2*(byte/signed byte/word/signed word/dword/signed dword) 40
Constant inlined main::$4 = (const string) main::print1_msg#0 Constant inlined main::$4 = (const byte*) main::print1_msg#0
Constant inlined main::print1_i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::print1_i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::print1_j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::print1_j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
@ -346,10 +346,10 @@ main::print1: scope:[main] from main
main::print1_@1: scope:[main] from main::print1 main::print1_@1 main::print1_@1: scope:[main] from main::print1 main::print1_@1
[6] (byte) main::print1_j#2 ← phi( main::print1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print1_@1/(byte) main::print1_j#1 ) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) [6] (byte) main::print1_j#2 ← phi( main::print1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print1_@1/(byte) main::print1_j#1 ) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] )
[6] (byte) main::print1_i#2 ← phi( main::print1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print1_@1/(byte) main::print1_i#1 ) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) [6] (byte) main::print1_i#2 ← phi( main::print1/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print1_@1/(byte) main::print1_i#1 ) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] )
[7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] )
[8] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print1_i#2 main::print1_j#1 ] ( main:2 [ main::print1_i#2 main::print1_j#1 ] ) [8] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print1_i#2 main::print1_j#1 ] ( main:2 [ main::print1_i#2 main::print1_j#1 ] )
[9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) [9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] )
[10] if(*((const string) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) [10] if(*((const byte*) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] )
to:main::print2 to:main::print2
main::print2: scope:[main] from main::print1_@1 main::print2: scope:[main] from main::print1_@1
[11] phi() [ ] ( main:2 [ ] ) [11] phi() [ ] ( main:2 [ ] )
@ -357,10 +357,10 @@ main::print2: scope:[main] from main::print1_@1
main::print2_@1: scope:[main] from main::print2 main::print2_@1 main::print2_@1: scope:[main] from main::print2 main::print2_@1
[12] (byte) main::print2_j#2 ← phi( main::print2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print2_@1/(byte) main::print2_j#1 ) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) [12] (byte) main::print2_j#2 ← phi( main::print2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print2_@1/(byte) main::print2_j#1 ) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] )
[12] (byte) main::print2_i#2 ← phi( main::print2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print2_@1/(byte) main::print2_i#1 ) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) [12] (byte) main::print2_i#2 ← phi( main::print2/(byte/signed byte/word/signed word/dword/signed dword) 0 main::print2_@1/(byte) main::print2_i#1 ) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] )
[13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] )
[14] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print2_i#2 main::print2_j#1 ] ( main:2 [ main::print2_i#2 main::print2_j#1 ] ) [14] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print2_i#2 main::print2_j#1 ] ( main:2 [ main::print2_i#2 main::print2_j#1 ] )
[15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) [15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] )
[16] if(*((const string) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) [16] if(*((const byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] )
to:main::@return to:main::@return
main::@return: scope:[main] from main::print2_@1 main::@return: scope:[main] from main::print2_@1
[17] return [ ] ( main:2 [ ] ) [17] return [ ] ( main:2 [ ] )
@ -483,7 +483,7 @@ main: {
jmp print1_b1 jmp print1_b1
//SEG18 main::print1_@1 //SEG18 main::print1_@1
print1_b1: print1_b1:
//SEG19 [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 //SEG19 [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy print1_i ldy print1_i
lda print1_msg,y lda print1_msg,y
ldy print1_j ldy print1_j
@ -495,7 +495,7 @@ main: {
sta print1_j sta print1_j
//SEG21 [9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- vbuz1=_inc_vbuz1 //SEG21 [9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- vbuz1=_inc_vbuz1
inc print1_i inc print1_i
//SEG22 [10] if(*((const string) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 //SEG22 [10] if(*((const byte*) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
ldy print1_i ldy print1_i
lda print1_msg,y lda print1_msg,y
cmp #'@' cmp #'@'
@ -521,7 +521,7 @@ main: {
jmp print2_b1 jmp print2_b1
//SEG31 main::print2_@1 //SEG31 main::print2_@1
print2_b1: print2_b1:
//SEG32 [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2 //SEG32 [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
ldy print2_i ldy print2_i
lda print1_msg,y lda print1_msg,y
ldy print2_j ldy print2_j
@ -533,7 +533,7 @@ main: {
sta print2_j sta print2_j
//SEG34 [15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- vbuz1=_inc_vbuz1 //SEG34 [15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- vbuz1=_inc_vbuz1
inc print2_i inc print2_i
//SEG35 [16] if(*((const string) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1 //SEG35 [16] if(*((const byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
ldy print2_i ldy print2_i
lda print1_msg,y lda print1_msg,y
cmp #'@' cmp #'@'
@ -547,18 +547,18 @@ main: {
} }
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a Statement [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::print1_i#2 main::print1_i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::print1_i#2 main::print1_i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::print1_j#2 main::print1_j#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::print1_j#2 main::print1_j#1 ]
Statement [10] if(*((const string) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) always clobbers reg byte a Statement [10] if(*((const byte*) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) always clobbers reg byte a
Statement [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a Statement [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::print2_i#2 main::print2_i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ main::print2_i#2 main::print2_i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::print2_j#2 main::print2_j#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ main::print2_j#2 main::print2_j#1 ]
Statement [16] if(*((const string) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) always clobbers reg byte a Statement [16] if(*((const byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) always clobbers reg byte a
Statement [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a Statement [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) always clobbers reg byte a
Statement [10] if(*((const string) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) always clobbers reg byte a Statement [10] if(*((const byte*) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) always clobbers reg byte a
Statement [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a Statement [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) always clobbers reg byte a
Statement [16] if(*((const string) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) always clobbers reg byte a Statement [16] if(*((const byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::print1_i#2 main::print1_i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:2 [ main::print1_i#2 main::print1_i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:3 [ main::print1_j#2 main::print1_j#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:3 [ main::print1_j#2 main::print1_j#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:4 [ main::print2_i#2 main::print2_i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:4 [ main::print2_i#2 main::print2_i#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
@ -616,7 +616,7 @@ main: {
jmp print1_b1 jmp print1_b1
//SEG18 main::print1_@1 //SEG18 main::print1_@1
print1_b1: print1_b1:
//SEG19 [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy //SEG19 [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
lda print1_msg,y lda print1_msg,y
sta screen,x sta screen,x
//SEG20 [8] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print1_i#2 main::print1_j#1 ] ( main:2 [ main::print1_i#2 main::print1_j#1 ] ) -- vbuxx=vbuxx_plus_2 //SEG20 [8] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print1_i#2 main::print1_j#1 ] ( main:2 [ main::print1_i#2 main::print1_j#1 ] ) -- vbuxx=vbuxx_plus_2
@ -624,7 +624,7 @@ main: {
inx inx
//SEG21 [9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- vbuyy=_inc_vbuyy //SEG21 [9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- vbuyy=_inc_vbuyy
iny iny
//SEG22 [10] if(*((const string) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 //SEG22 [10] if(*((const byte*) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda print1_msg,y lda print1_msg,y
cmp #'@' cmp #'@'
bne print1_b1_from_print1_b1 bne print1_b1_from_print1_b1
@ -647,7 +647,7 @@ main: {
jmp print2_b1 jmp print2_b1
//SEG31 main::print2_@1 //SEG31 main::print2_@1
print2_b1: print2_b1:
//SEG32 [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy //SEG32 [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
lda print1_msg,y lda print1_msg,y
sta print2_at,x sta print2_at,x
//SEG33 [14] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print2_i#2 main::print2_j#1 ] ( main:2 [ main::print2_i#2 main::print2_j#1 ] ) -- vbuxx=vbuxx_plus_2 //SEG33 [14] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print2_i#2 main::print2_j#1 ] ( main:2 [ main::print2_i#2 main::print2_j#1 ] ) -- vbuxx=vbuxx_plus_2
@ -655,7 +655,7 @@ main: {
inx inx
//SEG34 [15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- vbuyy=_inc_vbuyy //SEG34 [15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- vbuyy=_inc_vbuyy
iny iny
//SEG35 [16] if(*((const string) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 //SEG35 [16] if(*((const byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda print1_msg,y lda print1_msg,y
cmp #'@' cmp #'@'
bne print2_b1_from_print2_b1 bne print2_b1_from_print2_b1
@ -717,7 +717,7 @@ FINAL SYMBOL TABLE
(byte) main::print1_j#1 reg byte x 7.333333333333333 (byte) main::print1_j#1 reg byte x 7.333333333333333
(byte) main::print1_j#2 reg byte x 16.5 (byte) main::print1_j#2 reg byte x 16.5
(byte*) main::print1_msg (byte*) main::print1_msg
(const string) main::print1_msg#0 print1_msg = (string) "hello world!@" (const byte*) main::print1_msg#0 print1_msg = (string) "hello world!@"
(label) main::print2 (label) main::print2
(bool~) main::print2_$0 (bool~) main::print2_$0
(label) main::print2_@1 (label) main::print2_@1
@ -771,7 +771,7 @@ main: {
//SEG17 [6] phi (byte) main::print1_i#2 = (byte) main::print1_i#1 [phi:main::print1_@1->main::print1_@1#1] -- register_copy //SEG17 [6] phi (byte) main::print1_i#2 = (byte) main::print1_i#1 [phi:main::print1_@1->main::print1_@1#1] -- register_copy
//SEG18 main::print1_@1 //SEG18 main::print1_@1
print1_b1: print1_b1:
//SEG19 [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy //SEG19 [7] *((const byte*) screen#0 + (byte) main::print1_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print1_i#2) [ main::print1_i#2 main::print1_j#2 ] ( main:2 [ main::print1_i#2 main::print1_j#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
lda print1_msg,y lda print1_msg,y
sta screen,x sta screen,x
//SEG20 [8] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print1_i#2 main::print1_j#1 ] ( main:2 [ main::print1_i#2 main::print1_j#1 ] ) -- vbuxx=vbuxx_plus_2 //SEG20 [8] (byte) main::print1_j#1 ← (byte) main::print1_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print1_i#2 main::print1_j#1 ] ( main:2 [ main::print1_i#2 main::print1_j#1 ] ) -- vbuxx=vbuxx_plus_2
@ -779,7 +779,7 @@ main: {
inx inx
//SEG21 [9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- vbuyy=_inc_vbuyy //SEG21 [9] (byte) main::print1_i#1 ← ++ (byte) main::print1_i#2 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- vbuyy=_inc_vbuyy
iny iny
//SEG22 [10] if(*((const string) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 //SEG22 [10] if(*((const byte*) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 [ main::print1_i#1 main::print1_j#1 ] ( main:2 [ main::print1_i#1 main::print1_j#1 ] ) -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda print1_msg,y lda print1_msg,y
cmp #'@' cmp #'@'
bne print1_b1 bne print1_b1
@ -795,7 +795,7 @@ main: {
//SEG30 [12] phi (byte) main::print2_i#2 = (byte) main::print2_i#1 [phi:main::print2_@1->main::print2_@1#1] -- register_copy //SEG30 [12] phi (byte) main::print2_i#2 = (byte) main::print2_i#1 [phi:main::print2_@1->main::print2_@1#1] -- register_copy
//SEG31 main::print2_@1 //SEG31 main::print2_@1
print2_b1: print2_b1:
//SEG32 [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const string) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy //SEG32 [13] *((const byte*) main::print2_at#0 + (byte) main::print2_j#2) ← *((const byte*) main::print1_msg#0 + (byte) main::print2_i#2) [ main::print2_i#2 main::print2_j#2 ] ( main:2 [ main::print2_i#2 main::print2_j#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
lda print1_msg,y lda print1_msg,y
sta print2_at,x sta print2_at,x
//SEG33 [14] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print2_i#2 main::print2_j#1 ] ( main:2 [ main::print2_i#2 main::print2_j#1 ] ) -- vbuxx=vbuxx_plus_2 //SEG33 [14] (byte) main::print2_j#1 ← (byte) main::print2_j#2 + (byte/signed byte/word/signed word/dword/signed dword) 2 [ main::print2_i#2 main::print2_j#1 ] ( main:2 [ main::print2_i#2 main::print2_j#1 ] ) -- vbuxx=vbuxx_plus_2
@ -803,7 +803,7 @@ main: {
inx inx
//SEG34 [15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- vbuyy=_inc_vbuyy //SEG34 [15] (byte) main::print2_i#1 ← ++ (byte) main::print2_i#2 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- vbuyy=_inc_vbuyy
iny iny
//SEG35 [16] if(*((const string) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1 //SEG35 [16] if(*((const byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 [ main::print2_i#1 main::print2_j#1 ] ( main:2 [ main::print2_i#1 main::print2_j#1 ] ) -- pbuc1_derefidx_vbuyy_neq_vbuc2_then_la1
lda print1_msg,y lda print1_msg,y
cmp #'@' cmp #'@'
bne print2_b1 bne print2_b1

View File

@ -15,7 +15,7 @@
(byte) main::print1_j#1 reg byte x 7.333333333333333 (byte) main::print1_j#1 reg byte x 7.333333333333333
(byte) main::print1_j#2 reg byte x 16.5 (byte) main::print1_j#2 reg byte x 16.5
(byte*) main::print1_msg (byte*) main::print1_msg
(const string) main::print1_msg#0 print1_msg = (string) "hello world!@" (const byte*) main::print1_msg#0 print1_msg = (string) "hello world!@"
(label) main::print2 (label) main::print2
(bool~) main::print2_$0 (bool~) main::print2_$0
(label) main::print2_@1 (label) main::print2_@1

View File

@ -27,7 +27,7 @@ print_msg::@3: scope:[print_msg] from print_msg
[11] phi() [ screen#18 ] ( main:2::print_msg:5 [ screen#18 ] main:2::print_msg:7 [ screen#18 ] ) [11] phi() [ screen#18 ] ( main:2::print_msg:5 [ screen#18 ] main:2::print_msg:7 [ screen#18 ] )
to:print_msg::@2 to:print_msg::@2
print_msg::@2: scope:[print_msg] from print_msg print_msg::@3 print_msg::@2: scope:[print_msg] from print_msg print_msg::@3
[12] (byte*) print_msg::msg#2 ← phi( print_msg/(const string) print_msg::msg#0 print_msg::@3/(const string) print_msg::msg#1 ) [ screen#18 print_msg::msg#2 ] ( main:2::print_msg:5 [ screen#18 print_msg::msg#2 ] main:2::print_msg:7 [ screen#18 print_msg::msg#2 ] ) [12] (byte*) print_msg::msg#2 ← phi( print_msg/(const byte*) print_msg::msg#0 print_msg::@3/(const byte*) print_msg::msg#1 ) [ screen#18 print_msg::msg#2 ] ( main:2::print_msg:5 [ screen#18 print_msg::msg#2 ] main:2::print_msg:7 [ screen#18 print_msg::msg#2 ] )
[13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2 [ screen#18 print::msg#0 ] ( main:2::print_msg:5 [ screen#18 print::msg#0 ] main:2::print_msg:7 [ screen#18 print::msg#0 ] ) [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2 [ screen#18 print::msg#0 ] ( main:2::print_msg:5 [ screen#18 print::msg#0 ] main:2::print_msg:7 [ screen#18 print::msg#0 ] )
[14] call print [ screen#14 ] ( main:2::print_msg:5 [ screen#14 ] main:2::print_msg:7 [ screen#14 ] ) [14] call print [ screen#14 ] ( main:2::print_msg:5 [ screen#14 ] main:2::print_msg:7 [ screen#14 ] )
to:print_msg::@return to:print_msg::@return

View File

@ -346,8 +346,8 @@ Simple Condition (bool~) print::$0 if(*((byte*) print::msg#2)!=(byte) '@') goto
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) print_msg::idx#0 = 1 Constant (const byte) print_msg::idx#0 = 1
Constant (const byte) print_msg::idx#1 = 2 Constant (const byte) print_msg::idx#1 = 2
Constant (const string) print_msg::msg#0 = print_msg::$2 Constant (const byte*) print_msg::msg#0 = print_msg::$2
Constant (const string) print_msg::msg#1 = print_msg::$3 Constant (const byte*) print_msg::msg#1 = print_msg::$3
Constant (const byte*) screen#20 = ((byte*))1024 Constant (const byte*) screen#20 = ((byte*))1024
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@2
@ -370,21 +370,21 @@ Inlining constant with var siblings (const byte) print_msg::idx#0
Inlining constant with different constant siblings (const byte) print_msg::idx#0 Inlining constant with different constant siblings (const byte) print_msg::idx#0
Inlining constant with var siblings (const byte) print_msg::idx#1 Inlining constant with var siblings (const byte) print_msg::idx#1
Inlining constant with different constant siblings (const byte) print_msg::idx#1 Inlining constant with different constant siblings (const byte) print_msg::idx#1
Inlining constant with var siblings (const string) print_msg::msg#0 Inlining constant with var siblings (const byte*) print_msg::msg#0
Inlining constant with var siblings (const string) print_msg::msg#1 Inlining constant with var siblings (const byte*) print_msg::msg#1
Inlining constant with var siblings (const byte*) screen#20 Inlining constant with var siblings (const byte*) screen#20
Inlining constant with var siblings (const byte*) screen#20 Inlining constant with var siblings (const byte*) screen#20
Inlining constant with var siblings (const byte*) screen#20 Inlining constant with var siblings (const byte*) screen#20
Constant inlined print_msg::idx#1 = (byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined print_msg::idx#1 = (byte/signed byte/word/signed word/dword/signed dword) 2
Constant inlined print_msg::idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined print_msg::idx#0 = (byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined screen#20 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined screen#20 = ((byte*))(word/signed word/dword/signed dword) 1024
Constant inlined print_msg::$3 = (const string) print_msg::msg#1 Constant inlined print_msg::$3 = (const byte*) print_msg::msg#1
Constant inlined print_msg::$2 = (const string) print_msg::msg#0 Constant inlined print_msg::$2 = (const byte*) print_msg::msg#0
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
Inlining constant with var siblings (const string) print_msg::msg#0 Inlining constant with var siblings (const byte*) print_msg::msg#0
Inlining constant with var siblings (const string) print_msg::msg#1 Inlining constant with var siblings (const byte*) print_msg::msg#1
Inlining constant with var siblings (const string) print_msg::msg#0 Inlining constant with var siblings (const byte*) print_msg::msg#0
Inlining constant with var siblings (const string) print_msg::msg#1 Inlining constant with var siblings (const byte*) print_msg::msg#1
Block Sequence Planned @begin @3 @end main main::@1 main::@return print_msg print_msg::@3 print_msg::@2 print_msg::@return print print::@1 print::@return print::@2 Block Sequence Planned @begin @3 @end main main::@1 main::@return print_msg print_msg::@3 print_msg::@2 print_msg::@return print print::@1 print::@return print::@2
Block Sequence Planned @begin @3 @end main main::@1 main::@return print_msg print_msg::@3 print_msg::@2 print_msg::@return print print::@1 print::@return print::@2 Block Sequence Planned @begin @3 @end main main::@1 main::@return print_msg print_msg::@3 print_msg::@2 print_msg::@return print print::@1 print::@return print::@2
Adding NOP phi() at start of @begin Adding NOP phi() at start of @begin
@ -456,7 +456,7 @@ print_msg::@3: scope:[print_msg] from print_msg
[11] phi() [ screen#18 ] ( main:2::print_msg:5 [ screen#18 ] main:2::print_msg:7 [ screen#18 ] ) [11] phi() [ screen#18 ] ( main:2::print_msg:5 [ screen#18 ] main:2::print_msg:7 [ screen#18 ] )
to:print_msg::@2 to:print_msg::@2
print_msg::@2: scope:[print_msg] from print_msg print_msg::@3 print_msg::@2: scope:[print_msg] from print_msg print_msg::@3
[12] (byte*) print_msg::msg#2 ← phi( print_msg/(const string) print_msg::msg#0 print_msg::@3/(const string) print_msg::msg#1 ) [ screen#18 print_msg::msg#2 ] ( main:2::print_msg:5 [ screen#18 print_msg::msg#2 ] main:2::print_msg:7 [ screen#18 print_msg::msg#2 ] ) [12] (byte*) print_msg::msg#2 ← phi( print_msg/(const byte*) print_msg::msg#0 print_msg::@3/(const byte*) print_msg::msg#1 ) [ screen#18 print_msg::msg#2 ] ( main:2::print_msg:5 [ screen#18 print_msg::msg#2 ] main:2::print_msg:7 [ screen#18 print_msg::msg#2 ] )
[13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2 [ screen#18 print::msg#0 ] ( main:2::print_msg:5 [ screen#18 print::msg#0 ] main:2::print_msg:7 [ screen#18 print::msg#0 ] ) [13] (byte*) print::msg#0 ← (byte*) print_msg::msg#2 [ screen#18 print::msg#0 ] ( main:2::print_msg:5 [ screen#18 print::msg#0 ] main:2::print_msg:7 [ screen#18 print::msg#0 ] )
[14] call print [ screen#14 ] ( main:2::print_msg:5 [ screen#14 ] main:2::print_msg:7 [ screen#14 ] ) [14] call print [ screen#14 ] ( main:2::print_msg:5 [ screen#14 ] main:2::print_msg:7 [ screen#14 ] )
to:print_msg::@return to:print_msg::@return
@ -613,7 +613,7 @@ print_msg: {
b3: b3:
//SEG26 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2] //SEG26 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2]
b2_from_b3: b2_from_b3:
//SEG27 [12] phi (byte*) print_msg::msg#2 = (const string) print_msg::msg#1 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1 //SEG27 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#1 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1
lda #<msg_1 lda #<msg_1
sta msg sta msg
lda #>msg_1 lda #>msg_1
@ -621,7 +621,7 @@ print_msg: {
jmp b2 jmp b2
//SEG28 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2] //SEG28 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
b2_from_print_msg: b2_from_print_msg:
//SEG29 [12] phi (byte*) print_msg::msg#2 = (const string) print_msg::msg#0 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1 //SEG29 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#0 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1
lda #<msg_0 lda #<msg_0
sta msg sta msg
lda #>msg_0 lda #>msg_0
@ -777,7 +777,7 @@ print_msg: {
b3: b3:
//SEG26 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2] //SEG26 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2]
b2_from_b3: b2_from_b3:
//SEG27 [12] phi (byte*) print_msg::msg#2 = (const string) print_msg::msg#1 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1 //SEG27 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#1 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1
lda #<msg_1 lda #<msg_1
sta msg sta msg
lda #>msg_1 lda #>msg_1
@ -785,7 +785,7 @@ print_msg: {
jmp b2 jmp b2
//SEG28 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2] //SEG28 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
b2_from_print_msg: b2_from_print_msg:
//SEG29 [12] phi (byte*) print_msg::msg#2 = (const string) print_msg::msg#0 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1 //SEG29 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#0 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1
lda #<msg_0 lda #<msg_0
sta msg sta msg
lda #>msg_0 lda #>msg_0
@ -908,8 +908,8 @@ FINAL SYMBOL TABLE
(byte) print_msg::idx (byte) print_msg::idx
(byte) print_msg::idx#2 reg byte x 2.0 (byte) print_msg::idx#2 reg byte x 2.0
(byte*) print_msg::msg (byte*) print_msg::msg
(const string) print_msg::msg#0 msg#0 = (string) "Hello @" (const byte*) print_msg::msg#0 msg#0 = (string) "Hello @"
(const string) print_msg::msg#1 msg#1 = (string) "World!@" (const byte*) print_msg::msg#1 msg#1 = (string) "World!@"
(byte*) print_msg::msg#2 msg zp ZP_WORD:4 2.0 (byte*) print_msg::msg#2 msg zp ZP_WORD:4 2.0
(byte*) screen (byte*) screen
(byte*) screen#14 screen zp ZP_WORD:2 4.625 (byte*) screen#14 screen zp ZP_WORD:2 4.625
@ -971,7 +971,7 @@ print_msg: {
//SEG24 [11] phi from print_msg to print_msg::@3 [phi:print_msg->print_msg::@3] //SEG24 [11] phi from print_msg to print_msg::@3 [phi:print_msg->print_msg::@3]
//SEG25 print_msg::@3 //SEG25 print_msg::@3
//SEG26 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2] //SEG26 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2]
//SEG27 [12] phi (byte*) print_msg::msg#2 = (const string) print_msg::msg#1 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1 //SEG27 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#1 [phi:print_msg::@3->print_msg::@2#0] -- pbuz1=pbuc1
lda #<msg_1 lda #<msg_1
sta msg sta msg
lda #>msg_1 lda #>msg_1
@ -979,7 +979,7 @@ print_msg: {
jmp b2 jmp b2
//SEG28 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2] //SEG28 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
b1: b1:
//SEG29 [12] phi (byte*) print_msg::msg#2 = (const string) print_msg::msg#0 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1 //SEG29 [12] phi (byte*) print_msg::msg#2 = (const byte*) print_msg::msg#0 [phi:print_msg->print_msg::@2#0] -- pbuz1=pbuc1
lda #<msg_0 lda #<msg_0
sta msg sta msg
lda #>msg_0 lda #>msg_0

View File

@ -19,8 +19,8 @@
(byte) print_msg::idx (byte) print_msg::idx
(byte) print_msg::idx#2 reg byte x 2.0 (byte) print_msg::idx#2 reg byte x 2.0
(byte*) print_msg::msg (byte*) print_msg::msg
(const string) print_msg::msg#0 msg#0 = (string) "Hello @" (const byte*) print_msg::msg#0 msg#0 = (string) "Hello @"
(const string) print_msg::msg#1 msg#1 = (string) "World!@" (const byte*) print_msg::msg#1 msg#1 = (string) "World!@"
(byte*) print_msg::msg#2 msg zp ZP_WORD:4 2.0 (byte*) print_msg::msg#2 msg zp ZP_WORD:4 2.0
(byte*) screen (byte*) screen
(byte*) screen#14 screen zp ZP_WORD:2 4.625 (byte*) screen#14 screen zp ZP_WORD:2 4.625

View File

@ -8,8 +8,8 @@
@end: scope:[] from @1 @end: scope:[] from @1
[3] phi() [ ] ( ) [3] phi() [ ] ( )
main: scope:[main] from @1 main: scope:[main] from @1
[4] *((const byte*) main::PTR#0) ← <(const string) main::STRING#0 [ ] ( main:2 [ ] ) [4] *((const byte*) main::PTR#0) ← <(const byte[]) main::STRING#0 [ ] ( main:2 [ ] )
[5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const string) main::STRING#0 [ ] ( main:2 [ ] ) [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const byte[]) main::STRING#0 [ ] ( main:2 [ ] )
[6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] )
[7] *((const byte*) main::SCREEN#0) ← *((byte*)(word~) main::$6) [ ] ( main:2 [ ] ) [7] *((const byte*) main::SCREEN#0) ← *((byte*)(word~) main::$6) [ ] ( main:2 [ ] )
to:main::@return to:main::@return

View File

@ -113,7 +113,7 @@ Culled Empty Block (label) @2
Succesful SSA optimization Pass2CullEmptyBlocks Succesful SSA optimization Pass2CullEmptyBlocks
Alias (byte*) main::ptr#0 = (byte*~) main::$4 Alias (byte*) main::ptr#0 = (byte*~) main::$4
Succesful SSA optimization Pass2AliasElimination Succesful SSA optimization Pass2AliasElimination
Constant (const string) main::STRING#0 = main::$5 Constant (const byte[]) main::STRING#0 = main::$5
Constant (const byte*) main::PTR#0 = ((byte*))40958 Constant (const byte*) main::PTR#0 = ((byte*))40958
Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte*) main::SCREEN#0 = ((byte*))1024
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
@ -127,11 +127,11 @@ Succesful SSA optimization Pass2FixInlineConstructors
Eliminating Noop Cast (byte*) main::ptr#0 ← ((byte*)) (word~) main::$6 Eliminating Noop Cast (byte*) main::ptr#0 ← ((byte*)) (word~) main::$6
Succesful SSA optimization Pass2NopCastElimination Succesful SSA optimization Pass2NopCastElimination
OPTIMIZING CONTROL FLOW GRAPH OPTIMIZING CONTROL FLOW GRAPH
Constant inlined main::$5 = (const string) main::STRING#0 Constant inlined main::$5 = (const byte[]) main::STRING#0
Constant inlined main::$3 = (const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$3 = (const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined main::$1 = (const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$1 = (const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1
Constant inlined main::$2 = >(const string) main::STRING#0 Constant inlined main::$2 = >(const byte[]) main::STRING#0
Constant inlined main::$0 = <(const string) main::STRING#0 Constant inlined main::$0 = <(const byte[]) main::STRING#0
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @1 @end main main::@return Block Sequence Planned @begin @1 @end main main::@return
Block Sequence Planned @begin @1 @end main main::@return Block Sequence Planned @begin @1 @end main main::@return
@ -163,8 +163,8 @@ FINAL CONTROL FLOW GRAPH
@end: scope:[] from @1 @end: scope:[] from @1
[3] phi() [ ] ( ) [3] phi() [ ] ( )
main: scope:[main] from @1 main: scope:[main] from @1
[4] *((const byte*) main::PTR#0) ← <(const string) main::STRING#0 [ ] ( main:2 [ ] ) [4] *((const byte*) main::PTR#0) ← <(const byte[]) main::STRING#0 [ ] ( main:2 [ ] )
[5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const string) main::STRING#0 [ ] ( main:2 [ ] ) [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const byte[]) main::STRING#0 [ ] ( main:2 [ ] )
[6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] )
[7] *((const byte*) main::SCREEN#0) ← *((byte*)(word~) main::$6) [ ] ( main:2 [ ] ) [7] *((const byte*) main::SCREEN#0) ← *((byte*)(word~) main::$6) [ ] ( main:2 [ ] )
to:main::@return to:main::@return
@ -225,10 +225,10 @@ main: {
.label PTR = $9ffe .label PTR = $9ffe
.label SCREEN = $400 .label SCREEN = $400
.label _6 = 2 .label _6 = 2
//SEG9 [4] *((const byte*) main::PTR#0) ← <(const string) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG9 [4] *((const byte*) main::PTR#0) ← <(const byte[]) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #<STRING lda #<STRING
sta PTR sta PTR
//SEG10 [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const string) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG10 [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const byte[]) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #>STRING lda #>STRING
sta PTR+1 sta PTR+1
//SEG11 [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 //SEG11 [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2
@ -249,8 +249,8 @@ main: {
} }
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *((const byte*) main::PTR#0) ← <(const string) main::STRING#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [4] *((const byte*) main::PTR#0) ← <(const byte[]) main::STRING#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const string) main::STRING#0 [ ] ( main:2 [ ] ) always clobbers reg byte a Statement [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const byte[]) main::STRING#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) always clobbers reg byte a Statement [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) always clobbers reg byte a
Statement [7] *((const byte*) main::SCREEN#0) ← *((byte*)(word~) main::$6) [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y Statement [7] *((const byte*) main::SCREEN#0) ← *((byte*)(word~) main::$6) [ ] ( main:2 [ ] ) always clobbers reg byte a reg byte y
Potential registers zp ZP_WORD:2 [ main::$6 ] : zp ZP_WORD:2 , Potential registers zp ZP_WORD:2 [ main::$6 ] : zp ZP_WORD:2 ,
@ -287,10 +287,10 @@ main: {
.label PTR = $9ffe .label PTR = $9ffe
.label SCREEN = $400 .label SCREEN = $400
.label _6 = 2 .label _6 = 2
//SEG9 [4] *((const byte*) main::PTR#0) ← <(const string) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG9 [4] *((const byte*) main::PTR#0) ← <(const byte[]) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #<STRING lda #<STRING
sta PTR sta PTR
//SEG10 [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const string) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG10 [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const byte[]) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #>STRING lda #>STRING
sta PTR+1 sta PTR+1
//SEG11 [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 //SEG11 [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2
@ -336,7 +336,7 @@ FINAL SYMBOL TABLE
(byte*) main::SCREEN (byte*) main::SCREEN
(const byte*) main::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) main::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[]) main::STRING (byte[]) main::STRING
(const string) main::STRING#0 STRING = (string) "camelot" (const byte[]) main::STRING#0 STRING = (string) "camelot"
(byte*) main::ptr (byte*) main::ptr
zp ZP_WORD:2 [ main::$6 ] zp ZP_WORD:2 [ main::$6 ]
@ -362,10 +362,10 @@ main: {
.label PTR = $9ffe .label PTR = $9ffe
.label SCREEN = $400 .label SCREEN = $400
.label _6 = 2 .label _6 = 2
//SEG9 [4] *((const byte*) main::PTR#0) ← <(const string) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG9 [4] *((const byte*) main::PTR#0) ← <(const byte[]) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #<STRING lda #<STRING
sta PTR sta PTR
//SEG10 [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const string) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 //SEG10 [5] *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← >(const byte[]) main::STRING#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2
lda #>STRING lda #>STRING
sta PTR+1 sta PTR+1
//SEG11 [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2 //SEG11 [6] (word~) main::$6 ← *((const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1) w= *((const byte*) main::PTR#0) [ main::$6 ] ( main:2 [ main::$6 ] ) -- vwuz1=_deref_pbuc1_word__deref_pbuc2

View File

@ -9,7 +9,7 @@
(byte*) main::SCREEN (byte*) main::SCREEN
(const byte*) main::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) main::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[]) main::STRING (byte[]) main::STRING
(const string) main::STRING#0 STRING = (string) "camelot" (const byte[]) main::STRING#0 STRING = (string) "camelot"
(byte*) main::ptr (byte*) main::ptr
zp ZP_WORD:2 [ main::$6 ] zp ZP_WORD:2 [ main::$6 ]

View File

@ -24,7 +24,7 @@ main::@return: scope:[main] from main::@2
to:@return to:@return
print: scope:[print] from main main::@1 main::@2 print: scope:[print] from main main::@1 main::@2
[11] (byte*) screen#18 ← phi( main/((byte*))(word/signed word/dword/signed dword) 1024 main::@1/(byte*) screen#12 main::@2/(byte*) screen#12 ) [ print::msg#6 screen#18 ] ( main:2::print:5 [ print::msg#6 screen#18 ] main:2::print:7 [ print::msg#6 screen#18 ] main:2::print:9 [ print::msg#6 screen#18 ] ) [11] (byte*) screen#18 ← phi( main/((byte*))(word/signed word/dword/signed dword) 1024 main::@1/(byte*) screen#12 main::@2/(byte*) screen#12 ) [ print::msg#6 screen#18 ] ( main:2::print:5 [ print::msg#6 screen#18 ] main:2::print:7 [ print::msg#6 screen#18 ] main:2::print:9 [ print::msg#6 screen#18 ] )
[11] (byte*) print::msg#6 ← phi( main/(const string) msg1#0 main::@1/(const string) main::msg2#0 main::@2/(const string) main::msg ) [ print::msg#6 screen#18 ] ( main:2::print:5 [ print::msg#6 screen#18 ] main:2::print:7 [ print::msg#6 screen#18 ] main:2::print:9 [ print::msg#6 screen#18 ] ) [11] (byte*) print::msg#6 ← phi( main/(const byte[]) msg1#0 main::@1/(const byte[]) main::msg2#0 main::@2/(const string) main::msg ) [ print::msg#6 screen#18 ] ( main:2::print:5 [ print::msg#6 screen#18 ] main:2::print:7 [ print::msg#6 screen#18 ] main:2::print:9 [ print::msg#6 screen#18 ] )
to:print::@1 to:print::@1
print::@1: scope:[print] from print print::@2 print::@1: scope:[print] from print print::@2
[12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) [12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] )

View File

@ -257,36 +257,36 @@ Redundant Phi (byte*) screen#14 (byte*) screen#10
Succesful SSA optimization Pass2RedundantPhiElimination Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) print::$0 if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 Simple Condition (bool~) print::$0 if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const string) msg1#0 = $0 Constant (const byte[]) msg1#0 = $0
Constant (const string) main::msg2#0 = main::$3 Constant (const byte[]) main::msg2#0 = main::$3
Constant (const string) print::msg#2 = main::msg Constant (const byte*) print::msg#2 = main::msg
Constant (const byte*) screen#17 = ((byte*))1024 Constant (const byte*) screen#17 = ((byte*))1024
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) print::msg#0 = msg1#0 Constant (const byte*) print::msg#0 = msg1#0
Constant (const string) print::msg#1 = main::msg2#0 Constant (const byte*) print::msg#1 = main::msg2#0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@3
Culled Empty Block (label) @1 Culled Empty Block (label) @1
Culled Empty Block (label) @3 Culled Empty Block (label) @3
Succesful SSA optimization Pass2CullEmptyBlocks Succesful SSA optimization Pass2CullEmptyBlocks
OPTIMIZING CONTROL FLOW GRAPH OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const string) print::msg#2 Inlining constant with var siblings (const byte*) print::msg#2
Inlining constant with var siblings (const string) print::msg#2 Inlining constant with var siblings (const byte*) print::msg#2
Inlining constant with var siblings (const string) print::msg#2 Inlining constant with var siblings (const byte*) print::msg#2
Inlining constant with var siblings (const string) print::msg#0 Inlining constant with var siblings (const byte*) print::msg#0
Inlining constant with var siblings (const string) print::msg#0 Inlining constant with var siblings (const byte*) print::msg#0
Inlining constant with var siblings (const string) print::msg#0 Inlining constant with var siblings (const byte*) print::msg#0
Inlining constant with var siblings (const string) print::msg#1 Inlining constant with var siblings (const byte*) print::msg#1
Inlining constant with var siblings (const string) print::msg#1 Inlining constant with var siblings (const byte*) print::msg#1
Inlining constant with var siblings (const string) print::msg#1 Inlining constant with var siblings (const byte*) print::msg#1
Inlining constant with var siblings (const byte*) screen#17 Inlining constant with var siblings (const byte*) screen#17
Inlining constant with var siblings (const byte*) screen#17 Inlining constant with var siblings (const byte*) screen#17
Inlining constant with var siblings (const byte*) screen#17 Inlining constant with var siblings (const byte*) screen#17
Constant inlined main::$3 = (const string) main::msg2#0 Constant inlined main::$3 = (const byte[]) main::msg2#0
Constant inlined print::msg#2 = (const string) main::msg Constant inlined print::msg#2 = (const string) main::msg
Constant inlined $0 = (const string) msg1#0 Constant inlined $0 = (const byte[]) msg1#0
Constant inlined print::msg#1 = (const string) main::msg2#0 Constant inlined print::msg#1 = (const byte[]) main::msg2#0
Constant inlined print::msg#0 = (const string) msg1#0 Constant inlined print::msg#0 = (const byte[]) msg1#0
Constant inlined screen#17 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined screen#17 = ((byte*))(word/signed word/dword/signed dword) 1024
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return print print::@1 print::@return print::@2 Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return print print::@1 print::@return print::@2
@ -350,7 +350,7 @@ main::@return: scope:[main] from main::@2
to:@return to:@return
print: scope:[print] from main main::@1 main::@2 print: scope:[print] from main main::@1 main::@2
[11] (byte*) screen#18 ← phi( main/((byte*))(word/signed word/dword/signed dword) 1024 main::@1/(byte*) screen#12 main::@2/(byte*) screen#12 ) [ print::msg#6 screen#18 ] ( main:2::print:5 [ print::msg#6 screen#18 ] main:2::print:7 [ print::msg#6 screen#18 ] main:2::print:9 [ print::msg#6 screen#18 ] ) [11] (byte*) screen#18 ← phi( main/((byte*))(word/signed word/dword/signed dword) 1024 main::@1/(byte*) screen#12 main::@2/(byte*) screen#12 ) [ print::msg#6 screen#18 ] ( main:2::print:5 [ print::msg#6 screen#18 ] main:2::print:7 [ print::msg#6 screen#18 ] main:2::print:9 [ print::msg#6 screen#18 ] )
[11] (byte*) print::msg#6 ← phi( main/(const string) msg1#0 main::@1/(const string) main::msg2#0 main::@2/(const string) main::msg ) [ print::msg#6 screen#18 ] ( main:2::print:5 [ print::msg#6 screen#18 ] main:2::print:7 [ print::msg#6 screen#18 ] main:2::print:9 [ print::msg#6 screen#18 ] ) [11] (byte*) print::msg#6 ← phi( main/(const byte[]) msg1#0 main::@1/(const byte[]) main::msg2#0 main::@2/(const string) main::msg ) [ print::msg#6 screen#18 ] ( main:2::print:5 [ print::msg#6 screen#18 ] main:2::print:7 [ print::msg#6 screen#18 ] main:2::print:9 [ print::msg#6 screen#18 ] )
to:print::@1 to:print::@1
print::@1: scope:[print] from print print::@2 print::@1: scope:[print] from print print::@2
[12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] ) [12] (byte*) screen#12 ← phi( print/(byte*) screen#18 print::@2/(byte*) screen#5 ) [ screen#12 print::msg#4 ] ( main:2::print:5 [ screen#12 print::msg#4 ] main:2::print:7 [ screen#12 print::msg#4 ] main:2::print:9 [ screen#12 print::msg#4 ] )
@ -448,7 +448,7 @@ main: {
sta screen sta screen
lda #>$400 lda #>$400
sta screen+1 sta screen+1
//SEG13 [11] phi (byte*) print::msg#6 = (const string) msg1#0 [phi:main->print#1] -- pbuz1=pbuc1 //SEG13 [11] phi (byte*) print::msg#6 = (const byte[]) msg1#0 [phi:main->print#1] -- pbuz1=pbuc1
lda #<msg1 lda #<msg1
sta print.msg sta print.msg
lda #>msg1 lda #>msg1
@ -463,7 +463,7 @@ main: {
//SEG17 [11] phi from main::@1 to print [phi:main::@1->print] //SEG17 [11] phi from main::@1 to print [phi:main::@1->print]
print_from_b1: print_from_b1:
//SEG18 [11] phi (byte*) screen#18 = (byte*) screen#12 [phi:main::@1->print#0] -- register_copy //SEG18 [11] phi (byte*) screen#18 = (byte*) screen#12 [phi:main::@1->print#0] -- register_copy
//SEG19 [11] phi (byte*) print::msg#6 = (const string) main::msg2#0 [phi:main::@1->print#1] -- pbuz1=pbuc1 //SEG19 [11] phi (byte*) print::msg#6 = (const byte[]) main::msg2#0 [phi:main::@1->print#1] -- pbuz1=pbuc1
lda #<msg2 lda #<msg2
sta print.msg sta print.msg
lda #>msg2 lda #>msg2
@ -582,7 +582,7 @@ main: {
sta screen sta screen
lda #>$400 lda #>$400
sta screen+1 sta screen+1
//SEG13 [11] phi (byte*) print::msg#6 = (const string) msg1#0 [phi:main->print#1] -- pbuz1=pbuc1 //SEG13 [11] phi (byte*) print::msg#6 = (const byte[]) msg1#0 [phi:main->print#1] -- pbuz1=pbuc1
lda #<msg1 lda #<msg1
sta print.msg sta print.msg
lda #>msg1 lda #>msg1
@ -597,7 +597,7 @@ main: {
//SEG17 [11] phi from main::@1 to print [phi:main::@1->print] //SEG17 [11] phi from main::@1 to print [phi:main::@1->print]
print_from_b1: print_from_b1:
//SEG18 [11] phi (byte*) screen#18 = (byte*) screen#12 [phi:main::@1->print#0] -- register_copy //SEG18 [11] phi (byte*) screen#18 = (byte*) screen#12 [phi:main::@1->print#0] -- register_copy
//SEG19 [11] phi (byte*) print::msg#6 = (const string) main::msg2#0 [phi:main::@1->print#1] -- pbuz1=pbuc1 //SEG19 [11] phi (byte*) print::msg#6 = (const byte[]) main::msg2#0 [phi:main::@1->print#1] -- pbuz1=pbuc1
lda #<msg2 lda #<msg2
sta print.msg sta print.msg
lda #>msg2 lda #>msg2
@ -710,9 +710,9 @@ FINAL SYMBOL TABLE
(label) main::@return (label) main::@return
(const string) main::msg msg = (string) "message 3 @" (const string) main::msg msg = (string) "message 3 @"
(byte[]) main::msg2 (byte[]) main::msg2
(const string) main::msg2#0 msg2 = (string) "message 2 @" (const byte[]) main::msg2#0 msg2 = (string) "message 2 @"
(byte[]) msg1 (byte[]) msg1
(const string) msg1#0 msg1 = (string) "message 1 @" (const byte[]) msg1#0 msg1 = (string) "message 1 @"
(void()) print((byte*) print::msg) (void()) print((byte*) print::msg)
(label) print::@1 (label) print::@1
(label) print::@2 (label) print::@2
@ -756,7 +756,7 @@ main: {
sta screen sta screen
lda #>$400 lda #>$400
sta screen+1 sta screen+1
//SEG13 [11] phi (byte*) print::msg#6 = (const string) msg1#0 [phi:main->print#1] -- pbuz1=pbuc1 //SEG13 [11] phi (byte*) print::msg#6 = (const byte[]) msg1#0 [phi:main->print#1] -- pbuz1=pbuc1
lda #<msg1 lda #<msg1
sta print.msg sta print.msg
lda #>msg1 lda #>msg1
@ -767,7 +767,7 @@ main: {
//SEG16 [7] call print [ screen#12 ] ( main:2 [ screen#12 ] ) //SEG16 [7] call print [ screen#12 ] ( main:2 [ screen#12 ] )
//SEG17 [11] phi from main::@1 to print [phi:main::@1->print] //SEG17 [11] phi from main::@1 to print [phi:main::@1->print]
//SEG18 [11] phi (byte*) screen#18 = (byte*) screen#12 [phi:main::@1->print#0] -- register_copy //SEG18 [11] phi (byte*) screen#18 = (byte*) screen#12 [phi:main::@1->print#0] -- register_copy
//SEG19 [11] phi (byte*) print::msg#6 = (const string) main::msg2#0 [phi:main::@1->print#1] -- pbuz1=pbuc1 //SEG19 [11] phi (byte*) print::msg#6 = (const byte[]) main::msg2#0 [phi:main::@1->print#1] -- pbuz1=pbuc1
lda #<msg2 lda #<msg2
sta print.msg sta print.msg
lda #>msg2 lda #>msg2

View File

@ -7,9 +7,9 @@
(label) main::@return (label) main::@return
(const string) main::msg msg = (string) "message 3 @" (const string) main::msg msg = (string) "message 3 @"
(byte[]) main::msg2 (byte[]) main::msg2
(const string) main::msg2#0 msg2 = (string) "message 2 @" (const byte[]) main::msg2#0 msg2 = (string) "message 2 @"
(byte[]) msg1 (byte[]) msg1
(const string) msg1#0 msg1 = (string) "message 1 @" (const byte[]) msg1#0 msg1 = (string) "message 1 @"
(void()) print((byte*) print::msg) (void()) print((byte*) print::msg)
(label) print::@1 (label) print::@1
(label) print::@2 (label) print::@2

View File

@ -12,7 +12,7 @@ main: scope:[main] from @1
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const string) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )

View File

@ -153,7 +153,7 @@ Simple Condition (bool~) main::$0 if((byte) main::i#1!=rangelast(0,3)) goto main
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const word/signed word/dword/signed dword) $0 = 1024+40 Constant (const word/signed word/dword/signed dword) $0 = 1024+40
Constant (const string) main::txt#0 = main::$1 Constant (const byte[]) main::txt#0 = main::$1
Constant (const byte[]) main::data#0 = { 1, 2, 3 } Constant (const byte[]) main::data#0 = { 1, 2, 3 }
Constant (const byte) main::i#0 = 0 Constant (const byte) main::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
@ -165,7 +165,7 @@ 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::i#0 Inlining constant with var siblings (const byte) main::i#0
Constant inlined $0 = (word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined $0 = (word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 40
Constant inlined main::$1 = (const string) main::txt#0 Constant inlined main::$1 = (const byte[]) main::txt#0
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @1 @end main main::@1 main::@return Block Sequence Planned @begin @1 @end main main::@1 main::@return
@ -207,7 +207,7 @@ main: scope:[main] from @1
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const string) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [9] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
@ -291,7 +291,7 @@ main: {
jmp b1 jmp b1
//SEG14 main::@1 //SEG14 main::@1
b1: b1:
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const string) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 //SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1
ldy i ldy i
lda txt,y lda txt,y
sta SCREEN,y sta SCREEN,y
@ -315,10 +315,10 @@ main: {
} }
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const string) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
Statement [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const string) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Statement [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a Statement [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
@ -366,7 +366,7 @@ main: {
jmp b1 jmp b1
//SEG14 main::@1 //SEG14 main::@1
b1: b1:
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const string) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda txt,x lda txt,x
sta SCREEN,x sta SCREEN,x
//SEG16 [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG16 [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
@ -424,7 +424,7 @@ FINAL SYMBOL TABLE
(byte) main::i#1 reg byte x 16.5 (byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 22.0 (byte) main::i#2 reg byte x 22.0
(byte[]) main::txt (byte[]) main::txt
(const string) main::txt#0 txt = (string) "qwe" (const byte[]) main::txt#0 txt = (string) "qwe"
reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i#2 main::i#1 ]
@ -456,7 +456,7 @@ main: {
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy //SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG14 main::@1 //SEG14 main::@1
b1: b1:
//SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const string) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG15 [6] *((const byte*) SCREEN#0 + (byte) main::i#2) ← *((const byte[]) main::txt#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda txt,x lda txt,x
sta SCREEN,x sta SCREEN,x
//SEG16 [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx //SEG16 [7] *((const byte*) SCREEN2#0 + (byte) main::i#2) ← *((const byte[]) main::data#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx

View File

@ -14,6 +14,6 @@
(byte) main::i#1 reg byte x 16.5 (byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 22.0 (byte) main::i#2 reg byte x 22.0
(byte[]) main::txt (byte[]) main::txt
(const string) main::txt#0 txt = (string) "qwe" (const byte[]) main::txt#0 txt = (string) "qwe"
reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::i#2 main::i#1 ]

View File

@ -13,7 +13,7 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@2 main::@1: scope:[main] from main main::@2
[5] (byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::cursor#1 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) [5] (byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::cursor#1 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
[5] (byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::i#4 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) [5] (byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::i#4 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
[6] *((byte*) main::cursor#2) ← *((const string) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
[7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) [7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) [8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
to:main::@2 to:main::@2

View File

@ -186,7 +186,7 @@ Simple Condition (bool~) main::$1 if((byte) main::i#1!=(byte/signed byte/word/si
Simple Condition (bool~) main::$3 if((byte*) main::cursor#1<(byte*~) main::$2) goto main::@1 Simple Condition (bool~) main::$3 if((byte*) main::cursor#1<(byte*~) main::$2) goto main::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const string) TEXT#0 = $0 Constant (const byte[]) TEXT#0 = $0
Constant (const byte) main::i#0 = 0 Constant (const byte) main::i#0 = 0
Constant (const byte) main::i#2 = 0 Constant (const byte) main::i#2 = 0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
@ -205,7 +205,7 @@ Inlining constant with var siblings (const byte*) main::cursor#0
Inlining constant with var siblings (const byte*) main::cursor#0 Inlining constant with var siblings (const byte*) main::cursor#0
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined $0 = (const string) TEXT#0 Constant inlined $0 = (const byte[]) TEXT#0
Constant inlined main::$2 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000 Constant inlined main::$2 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000
Constant inlined main::cursor#0 = (const byte*) SCREEN#0 Constant inlined main::cursor#0 = (const byte*) SCREEN#0
Succesful SSA optimization Pass2ConstantInlining Succesful SSA optimization Pass2ConstantInlining
@ -262,7 +262,7 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@2 main::@1: scope:[main] from main main::@2
[5] (byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::cursor#1 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) [5] (byte*) main::cursor#2 ← phi( main/(const byte*) SCREEN#0 main::@2/(byte*) main::cursor#1 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
[5] (byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::i#4 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) [5] (byte) main::i#3 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) main::i#4 ) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
[6] *((byte*) main::cursor#2) ← *((const string) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] )
[7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) [7] (byte) main::i#1 ← ++ (byte) main::i#3 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
[8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] ) [8] if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@6 [ main::cursor#2 main::i#1 ] ( main:2 [ main::cursor#2 main::i#1 ] )
to:main::@2 to:main::@2
@ -366,7 +366,7 @@ main: {
jmp b1 jmp b1
//SEG16 main::@1 //SEG16 main::@1
b1: b1:
//SEG17 [6] *((byte*) main::cursor#2) ← *((const string) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuz2 //SEG17 [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuz2
ldy i ldy i
lda TEXT,y lda TEXT,y
ldy #0 ldy #0
@ -417,11 +417,11 @@ main: {
TEXT: .text "camelot " TEXT: .text "camelot "
REGISTER UPLIFT POTENTIAL REGISTERS REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] *((byte*) main::cursor#2) ← *((const string) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte a reg byte y Statement [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ] Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ] Removing always clobbered register reg byte y as potential for zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ]
Statement [11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) always clobbers reg byte a Statement [11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) always clobbers reg byte a
Statement [6] *((byte*) main::cursor#2) ← *((const string) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte a reg byte y Statement [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) always clobbers reg byte a reg byte y
Statement [11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) always clobbers reg byte a Statement [11] if((byte*) main::cursor#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto main::@1 [ main::i#4 main::cursor#1 ] ( main:2 [ main::i#4 main::cursor#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , Potential registers zp ZP_BYTE:2 [ main::i#3 main::i#4 main::i#1 ] : zp ZP_BYTE:2 , reg byte x ,
Potential registers zp ZP_WORD:3 [ main::cursor#2 main::cursor#1 ] : zp ZP_WORD:3 , Potential registers zp ZP_WORD:3 [ main::cursor#2 main::cursor#1 ] : zp ZP_WORD:3 ,
@ -477,7 +477,7 @@ main: {
jmp b1 jmp b1
//SEG16 main::@1 //SEG16 main::@1
b1: b1:
//SEG17 [6] *((byte*) main::cursor#2) ← *((const string) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx //SEG17 [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
lda TEXT,x lda TEXT,x
ldy #0 ldy #0
sta (cursor),y sta (cursor),y
@ -565,7 +565,7 @@ FINAL SYMBOL TABLE
(byte*) SCREEN (byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[]) TEXT (byte[]) TEXT
(const string) TEXT#0 TEXT = (string) "camelot " (const byte[]) TEXT#0 TEXT = (string) "camelot "
(void()) main() (void()) main()
(label) main::@1 (label) main::@1
(label) main::@2 (label) main::@2
@ -616,7 +616,7 @@ main: {
//SEG15 [5] phi (byte) main::i#3 = (byte) main::i#4 [phi:main::@2->main::@1#1] -- register_copy //SEG15 [5] phi (byte) main::i#3 = (byte) main::i#4 [phi:main::@2->main::@1#1] -- register_copy
//SEG16 main::@1 //SEG16 main::@1
b1: b1:
//SEG17 [6] *((byte*) main::cursor#2) ← *((const string) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx //SEG17 [6] *((byte*) main::cursor#2) ← *((const byte[]) TEXT#0 + (byte) main::i#3) [ main::i#3 main::cursor#2 ] ( main:2 [ main::i#3 main::cursor#2 ] ) -- _deref_pbuz1=pbuc1_derefidx_vbuxx
lda TEXT,x lda TEXT,x
ldy #0 ldy #0
sta (cursor),y sta (cursor),y

View File

@ -4,7 +4,7 @@
(byte*) SCREEN (byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024 (const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[]) TEXT (byte[]) TEXT
(const string) TEXT#0 TEXT = (string) "camelot " (const byte[]) TEXT#0 TEXT = (string) "camelot "
(void()) main() (void()) main()
(label) main::@1 (label) main::@1
(label) main::@2 (label) main::@2

View File

@ -13,7 +13,7 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 5 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 5 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) [6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] )
[7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) [7] *((const byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] )
[8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[9] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [9] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
to:main::@return to:main::@return

View File

@ -107,7 +107,7 @@ Alias (byte) main::i#1 = (byte/signed word/word/dword/signed dword~) main::$2
Succesful SSA optimization Pass2AliasElimination Succesful SSA optimization Pass2AliasElimination
Simple Condition (bool~) main::$3 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 Simple Condition (bool~) main::$3 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) main::buf#0 = ((byte*))4352 Constant (const byte[16]) main::buf#0 = ((byte*))4352
Constant (const byte) main::i#0 = 5 Constant (const byte) main::i#0 = 5
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Consolidated constant in assignment main::$1 Consolidated constant in assignment main::$1
@ -160,7 +160,7 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 5 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] ) [5] (byte) main::i#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 5 main::@1/(byte) main::i#1 ) [ main::i#2 ] ( main:2 [ main::i#2 ] )
[6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] ) [6] (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 2+(byte/signed byte/word/signed word/dword/signed dword) 2 [ main::i#2 main::$1 ] ( main:2 [ main::i#2 main::$1 ] )
[7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) [7] *((const byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] )
[8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
[9] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) [9] if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 [ main::i#1 ] ( main:2 [ main::i#1 ] )
to:main::@return to:main::@return
@ -249,7 +249,7 @@ main: {
clc clc
adc i adc i
sta _1 sta _1
//SEG16 [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2 //SEG16 [7] *((const byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuz1=vbuz2
lda _1 lda _1
ldy i ldy i
sta buf,y sta buf,y
@ -320,7 +320,7 @@ main: {
txa txa
clc clc
adc #2+2 adc #2+2
//SEG16 [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa //SEG16 [7] *((const byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
sta buf,x sta buf,x
//SEG17 [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=vbuxx_plus_1 //SEG17 [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=vbuxx_plus_1
inx inx
@ -364,7 +364,7 @@ FINAL SYMBOL TABLE
(label) main::@1 (label) main::@1
(label) main::@return (label) main::@return
(byte[16]) main::buf (byte[16]) main::buf
(const byte*) main::buf#0 buf = ((byte*))(word/signed word/dword/signed dword) 4352 (const byte[16]) main::buf#0 buf = ((byte*))(word/signed word/dword/signed dword) 4352
(byte) main::i (byte) main::i
(byte) main::i#1 reg byte x 16.5 (byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 14.666666666666666 (byte) main::i#2 reg byte x 14.666666666666666
@ -403,7 +403,7 @@ main: {
txa txa
clc clc
adc #2+2 adc #2+2
//SEG16 [7] *((const byte*) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa //SEG16 [7] *((const byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/signed word/word/dword/signed dword~) main::$1 [ main::i#2 ] ( main:2 [ main::i#2 ] ) -- pbuc1_derefidx_vbuxx=vbuaa
sta buf,x sta buf,x
//SEG17 [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=vbuxx_plus_1 //SEG17 [8] (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word/dword/signed dword) 1 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=vbuxx_plus_1
inx inx

View File

@ -6,7 +6,7 @@
(label) main::@1 (label) main::@1
(label) main::@return (label) main::@return
(byte[16]) main::buf (byte[16]) main::buf
(const byte*) main::buf#0 buf = ((byte*))(word/signed word/dword/signed dword) 4352 (const byte[16]) main::buf#0 buf = ((byte*))(word/signed word/dword/signed dword) 4352
(byte) main::i (byte) main::i
(byte) main::i#1 reg byte x 16.5 (byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 14.666666666666666 (byte) main::i#2 reg byte x 14.666666666666666

View File

@ -497,8 +497,8 @@ bitmap_init: {
y_start: .byte $a, $a, $a, $14 y_start: .byte $a, $a, $a, $14
x_end: .word $14, $a, $14, $14 x_end: .word $14, $a, $14, $14
y_end: .byte $14, $14, $a, $14 y_end: .byte $14, $14, $a, $14
x_cur: .fill 8, 0 x_cur: .fill 2*4, 0
y_cur: .fill 8, 0 y_cur: .fill 2*4, 0
x_add: .fill 4, 0 x_add: .fill 4, 0
y_add: .fill 4, 0 y_add: .fill 4, 0
delay: .fill 4, 0 delay: .fill 4, 0

View File

@ -6043,8 +6043,8 @@ bitmap_init: {
y_start: .byte $a, $a, $a, $14 y_start: .byte $a, $a, $a, $14
x_end: .word $14, $a, $14, $14 x_end: .word $14, $a, $14, $14
y_end: .byte $14, $14, $a, $14 y_end: .byte $14, $14, $a, $14
x_cur: .fill 8, 0 x_cur: .fill 2*4, 0
y_cur: .fill 8, 0 y_cur: .fill 2*4, 0
x_add: .fill 4, 0 x_add: .fill 4, 0
y_add: .fill 4, 0 y_add: .fill 4, 0
delay: .fill 4, 0 delay: .fill 4, 0
@ -7324,8 +7324,8 @@ bitmap_init: {
y_start: .byte $a, $a, $a, $14 y_start: .byte $a, $a, $a, $14
x_end: .word $14, $a, $14, $14 x_end: .word $14, $a, $14, $14
y_end: .byte $14, $14, $a, $14 y_end: .byte $14, $14, $a, $14
x_cur: .fill 8, 0 x_cur: .fill 2*4, 0
y_cur: .fill 8, 0 y_cur: .fill 2*4, 0
x_add: .fill 4, 0 x_add: .fill 4, 0
y_add: .fill 4, 0 y_add: .fill 4, 0
delay: .fill 4, 0 delay: .fill 4, 0
@ -8678,8 +8678,8 @@ bitmap_init: {
y_start: .byte $a, $a, $a, $14 y_start: .byte $a, $a, $a, $14
x_end: .word $14, $a, $14, $14 x_end: .word $14, $a, $14, $14
y_end: .byte $14, $14, $a, $14 y_end: .byte $14, $14, $a, $14
x_cur: .fill 8, 0 x_cur: .fill 2*4, 0
y_cur: .fill 8, 0 y_cur: .fill 2*4, 0
x_add: .fill 4, 0 x_add: .fill 4, 0
y_add: .fill 4, 0 y_add: .fill 4, 0
delay: .fill 4, 0 delay: .fill 4, 0

View File

@ -178,9 +178,9 @@ main: {
str6: .text " @" str6: .text " @"
str7: .text " @" str7: .text " @"
str8: .text " @" str8: .text " @"
lintab1: .fill $28, 0 lintab1: .fill 2*$14, 0
lintab2: .fill $28, 0 lintab2: .fill 2*$14, 0
lintab3: .fill $28, 0 lintab3: .fill 2*$14, 0
} }
print_ln: { print_ln: {
b1: b1:

View File

@ -147,12 +147,12 @@ print_byte: scope:[print_byte] from main::@1 print_word print_word::@1
[72] (byte*) print_char_cursor#81 ← phi( main::@1/(byte*~) print_char_cursor#91 print_word/(byte*) print_char_cursor#2 print_word::@1/(byte*) print_char_cursor#11 ) [ print_byte::b#3 print_char_cursor#81 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] ) [72] (byte*) print_char_cursor#81 ← phi( main::@1/(byte*~) print_char_cursor#91 print_word/(byte*) print_char_cursor#2 print_word::@1/(byte*) print_char_cursor#11 ) [ print_byte::b#3 print_char_cursor#81 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] )
[72] (byte) print_byte::b#3 ← phi( main::@1/(byte) print_byte::b#2 print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#3 print_char_cursor#81 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] ) [72] (byte) print_byte::b#3 ← phi( main::@1/(byte) print_byte::b#2 print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#3 print_char_cursor#81 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] )
[73] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ) [73] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] )
[74] (byte) print_char::ch#0 ← *((const string) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ) [74] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] )
[75] call print_char [ print_char_cursor#11 print_byte::b#3 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] ) [75] call print_char [ print_char_cursor#11 print_byte::b#3 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] )
to:print_byte::@1 to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte print_byte::@1: scope:[print_byte] from print_byte
[76] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) [76] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] )
[77] (byte) print_char::ch#1 ← *((const string) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] ) [77] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] )
[78] call print_char [ print_char_cursor#11 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] ) [78] call print_char [ print_char_cursor#11 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] )
to:print_byte::@return to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1 print_byte::@return: scope:[print_byte] from print_byte::@1

View File

@ -2953,7 +2953,7 @@ Constant (const word) rem16u#0 = 0
Constant (const word) divr16u::quotient#0 = 0 Constant (const word) divr16u::quotient#0 = 0
Constant (const byte) divr16u::i#0 = 0 Constant (const byte) divr16u::i#0 = 0
Constant (const byte*) print_line_cursor#0 = ((byte*))1024 Constant (const byte*) print_line_cursor#0 = ((byte*))1024
Constant (const string) print_hextab#0 = $0 Constant (const byte[]) print_hextab#0 = $0
Constant (const word[20]) main::lintab1#0 = { fill( 20, 0) } Constant (const word[20]) main::lintab1#0 = { fill( 20, 0) }
Constant (const word) lin16u_gen::min#0 = 557 Constant (const word) lin16u_gen::min#0 = 557
Constant (const word) lin16u_gen::max#0 = 29793 Constant (const word) lin16u_gen::max#0 = 29793
@ -2966,22 +2966,22 @@ Constant (const word[20]) main::lintab3#0 = { fill( 20, 0) }
Constant (const word) lin16u_gen::min#2 = 0 Constant (const word) lin16u_gen::min#2 = 0
Constant (const word) lin16u_gen::max#2 = 25736 Constant (const word) lin16u_gen::max#2 = 25736
Constant (const word) lin16u_gen::length#2 = 20 Constant (const word) lin16u_gen::length#2 = 20
Constant (const string) print_str::str#1 = main::str Constant (const byte*) print_str::str#1 = main::str
Constant (const word) print_word::w#0 = 557 Constant (const word) print_word::w#0 = 557
Constant (const string) print_str::str#2 = main::str1 Constant (const byte*) print_str::str#2 = main::str1
Constant (const word) print_word::w#1 = 31179 Constant (const word) print_word::w#1 = 31179
Constant (const string) print_str::str#3 = main::str2 Constant (const byte*) print_str::str#3 = main::str2
Constant (const word) print_word::w#2 = 0 Constant (const word) print_word::w#2 = 0
Constant (const byte) main::i#0 = 0 Constant (const byte) main::i#0 = 0
Constant (const string) print_str::str#4 = main::str3 Constant (const byte*) print_str::str#4 = main::str3
Constant (const string) print_str::str#5 = main::str4 Constant (const byte*) print_str::str#5 = main::str4
Constant (const string) print_str::str#6 = main::str5 Constant (const byte*) print_str::str#6 = main::str5
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$20 = 20*2 Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$20 = 20*2
Constant (const string) print_str::str#7 = main::str6 Constant (const byte*) print_str::str#7 = main::str6
Constant (const word) print_word::w#6 = 29793 Constant (const word) print_word::w#6 = 29793
Constant (const string) print_str::str#8 = main::str7 Constant (const byte*) print_str::str#8 = main::str7
Constant (const word) print_word::w#7 = 63361 Constant (const word) print_word::w#7 = 63361
Constant (const string) print_str::str#9 = main::str8 Constant (const byte*) print_str::str#9 = main::str8
Constant (const word) print_word::w#8 = 25736 Constant (const word) print_word::w#8 = 25736
Constant (const word) divr16u::rem#3 = 0 Constant (const word) divr16u::rem#3 = 0
Constant (const word) divr16u::dividend#2 = 0 Constant (const word) divr16u::dividend#2 = 0
@ -2989,9 +2989,9 @@ Constant (const word) lin16u_gen::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000
Constant (const word[20]) lin16u_gen::lintab#0 = main::lintab1#0 Constant (const word*) lin16u_gen::lintab#0 = main::lintab1#0
Constant (const word[20]) lin16u_gen::lintab#1 = main::lintab2#0 Constant (const word*) lin16u_gen::lintab#1 = main::lintab2#0
Constant (const word[20]) lin16u_gen::lintab#2 = main::lintab3#0 Constant (const word*) lin16u_gen::lintab#2 = main::lintab3#0
Succesful SSA optimization Pass2ConstantIdentification Succesful SSA optimization Pass2ConstantIdentification
Fixing inline constructor with lin16u_gen::$9 ← lin16u_gen::stepi#0 dw= lin16u_gen::stepf#0 Fixing inline constructor with lin16u_gen::$9 ← lin16u_gen::stepi#0 dw= lin16u_gen::stepf#0
Fixing inline constructor with lin16u_gen::$10 ← lin16u_gen::min#3 dw= 0 Fixing inline constructor with lin16u_gen::$10 ← lin16u_gen::min#3 dw= 0
@ -3079,33 +3079,33 @@ Inlining constant with var siblings (const word) divr16u::dividend#2
Inlining constant with var siblings (const word) divr16u::dividend#2 Inlining constant with var siblings (const word) divr16u::dividend#2
Inlining constant with var siblings (const word) divr16u::dividend#2 Inlining constant with var siblings (const word) divr16u::dividend#2
Inlining constant with var siblings (const word) divr16u::dividend#2 Inlining constant with var siblings (const word) divr16u::dividend#2
Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#1
Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#1
Inlining constant with var siblings (const string) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#1
Inlining constant with var siblings (const string) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#3 Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3 Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3 Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#4 Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4 Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4 Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#5 Inlining constant with var siblings (const byte*) print_str::str#5
Inlining constant with var siblings (const string) print_str::str#5 Inlining constant with var siblings (const byte*) print_str::str#5
Inlining constant with var siblings (const string) print_str::str#5 Inlining constant with var siblings (const byte*) print_str::str#5
Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6 Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#7 Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7 Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7 Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#8 Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8 Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8 Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#9 Inlining constant with var siblings (const byte*) print_str::str#9
Inlining constant with var siblings (const string) print_str::str#9 Inlining constant with var siblings (const byte*) print_str::str#9
Inlining constant with var siblings (const string) print_str::str#9 Inlining constant with var siblings (const byte*) print_str::str#9
Inlining constant with var siblings (const word) print_word::w#0 Inlining constant with var siblings (const word) print_word::w#0
Inlining constant with var siblings (const word) print_word::w#0 Inlining constant with var siblings (const word) print_word::w#0
Inlining constant with var siblings (const word) print_word::w#0 Inlining constant with var siblings (const word) print_word::w#0
@ -3187,15 +3187,15 @@ Inlining constant with different constant siblings (const word) lin16u_gen::max#
Inlining constant with var siblings (const word) lin16u_gen::length#2 Inlining constant with var siblings (const word) lin16u_gen::length#2
Inlining constant with var siblings (const word) lin16u_gen::i#0 Inlining constant with var siblings (const word) lin16u_gen::i#0
Inlining constant with var siblings (const word) lin16u_gen::i#0 Inlining constant with var siblings (const word) lin16u_gen::i#0
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#0 Inlining constant with var siblings (const word*) lin16u_gen::lintab#0
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#0 Inlining constant with var siblings (const word*) lin16u_gen::lintab#0
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#0 Inlining constant with var siblings (const word*) lin16u_gen::lintab#0
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#1 Inlining constant with var siblings (const word*) lin16u_gen::lintab#1
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#1 Inlining constant with var siblings (const word*) lin16u_gen::lintab#1
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#1 Inlining constant with var siblings (const word*) lin16u_gen::lintab#1
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#2 Inlining constant with var siblings (const word*) lin16u_gen::lintab#2
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#2 Inlining constant with var siblings (const word*) lin16u_gen::lintab#2
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#2 Inlining constant with var siblings (const word*) lin16u_gen::lintab#2
Inlining constant with var siblings (const byte*) print_line_cursor#0 Inlining constant with var siblings (const byte*) print_line_cursor#0
Inlining constant with var siblings (const byte*) print_line_cursor#0 Inlining constant with var siblings (const byte*) print_line_cursor#0
Inlining constant with var siblings (const byte*) print_line_cursor#0 Inlining constant with var siblings (const byte*) print_line_cursor#0
@ -3205,7 +3205,7 @@ Constant inlined divr16u::i#0 = (byte/signed byte/word/signed word/dword/signed
Constant inlined lin16u_gen::max#0 = (word/signed word/dword/signed dword) 29793 Constant inlined lin16u_gen::max#0 = (word/signed word/dword/signed dword) 29793
Constant inlined lin16u_gen::max#2 = (word/signed word/dword/signed dword) 25736 Constant inlined lin16u_gen::max#2 = (word/signed word/dword/signed dword) 25736
Constant inlined lin16u_gen::max#1 = (word/dword/signed dword) 63361 Constant inlined lin16u_gen::max#1 = (word/dword/signed dword) 63361
Constant inlined $0 = (const string) print_hextab#0 Constant inlined $0 = (const byte[]) print_hextab#0
Constant inlined divr16u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined divr16u::quotient#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined lin16u_gen::min#0 = (word/signed word/dword/signed dword) 557 Constant inlined lin16u_gen::min#0 = (word/signed word/dword/signed dword) 557
@ -3552,12 +3552,12 @@ print_byte: scope:[print_byte] from main::@1 print_word print_word::@1
[72] (byte*) print_char_cursor#81 ← phi( main::@1/(byte*~) print_char_cursor#91 print_word/(byte*) print_char_cursor#2 print_word::@1/(byte*) print_char_cursor#11 ) [ print_byte::b#3 print_char_cursor#81 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] ) [72] (byte*) print_char_cursor#81 ← phi( main::@1/(byte*~) print_char_cursor#91 print_word/(byte*) print_char_cursor#2 print_word::@1/(byte*) print_char_cursor#11 ) [ print_byte::b#3 print_char_cursor#81 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] )
[72] (byte) print_byte::b#3 ← phi( main::@1/(byte) print_byte::b#2 print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#3 print_char_cursor#81 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] ) [72] (byte) print_byte::b#3 ← phi( main::@1/(byte) print_byte::b#2 print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#3 print_char_cursor#81 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 ] )
[73] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ) [73] (byte~) print_byte::$0 ← (byte) print_byte::b#3 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_byte::$0 ] )
[74] (byte) print_char::ch#0 ← *((const string) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ) [74] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] )
[75] call print_char [ print_char_cursor#11 print_byte::b#3 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] ) [75] call print_char [ print_char_cursor#11 print_byte::b#3 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] )
to:print_byte::@1 to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte print_byte::@1: scope:[print_byte] from print_byte
[76] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) [76] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] )
[77] (byte) print_char::ch#1 ← *((const string) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] ) [77] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] )
[78] call print_char [ print_char_cursor#11 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] ) [78] call print_char [ print_char_cursor#11 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] )
to:print_byte::@return to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1 print_byte::@return: scope:[print_byte] from print_byte::@1
@ -4447,9 +4447,9 @@ main: {
str6: .text " @" str6: .text " @"
str7: .text " @" str7: .text " @"
str8: .text " @" str8: .text " @"
lintab1: .fill $28, 0 lintab1: .fill 2*$14, 0
lintab2: .fill $28, 0 lintab2: .fill 2*$14, 0
lintab3: .fill $28, 0 lintab3: .fill 2*$14, 0
} }
//SEG163 print_ln //SEG163 print_ln
print_ln: { print_ln: {
@ -4525,7 +4525,7 @@ print_byte: {
lsr lsr
lsr lsr
sta _0 sta _0
//SEG187 [74] (byte) print_char::ch#0 ← *((const string) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 //SEG187 [74] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
ldy _0 ldy _0
lda print_hextab,y lda print_hextab,y
sta print_char.ch sta print_char.ch
@ -4542,7 +4542,7 @@ print_byte: {
lda #$f lda #$f
and b and b
sta _2 sta _2
//SEG194 [77] (byte) print_char::ch#1 ← *((const string) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 //SEG194 [77] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2
ldy _2 ldy _2
lda print_hextab,y lda print_hextab,y
sta print_char.ch sta print_char.ch
@ -5564,9 +5564,9 @@ main: {
str6: .text " @" str6: .text " @"
str7: .text " @" str7: .text " @"
str8: .text " @" str8: .text " @"
lintab1: .fill $28, 0 lintab1: .fill 2*$14, 0
lintab2: .fill $28, 0 lintab2: .fill 2*$14, 0
lintab3: .fill $28, 0 lintab3: .fill 2*$14, 0
} }
//SEG163 print_ln //SEG163 print_ln
print_ln: { print_ln: {
@ -5638,7 +5638,7 @@ print_byte: {
lsr lsr
lsr lsr
lsr lsr
//SEG187 [74] (byte) print_char::ch#0 ← *((const string) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa //SEG187 [74] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay tay
lda print_hextab,y lda print_hextab,y
//SEG188 [75] call print_char [ print_char_cursor#11 print_byte::b#3 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] ) //SEG188 [75] call print_char [ print_char_cursor#11 print_byte::b#3 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] )
@ -5653,7 +5653,7 @@ print_byte: {
//SEG193 [76] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 //SEG193 [76] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1
txa txa
and #$f and #$f
//SEG194 [77] (byte) print_char::ch#1 ← *((const string) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa //SEG194 [77] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay tay
lda print_hextab,y lda print_hextab,y
//SEG195 [78] call print_char [ print_char_cursor#11 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] ) //SEG195 [78] call print_char [ print_char_cursor#11 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] )
@ -6381,7 +6381,7 @@ FINAL SYMBOL TABLE
(byte*) print_cls::sc#1 sc zp ZP_WORD:3 16.5 (byte*) print_cls::sc#1 sc zp ZP_WORD:3 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:3 16.5 (byte*) print_cls::sc#2 sc zp ZP_WORD:3 16.5
(byte[]) print_hextab (byte[]) print_hextab
(const string) print_hextab#0 print_hextab = (string) "0123456789abcdef" (const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor (byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:3 8.891891891891891 (byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:3 8.891891891891891
(byte*) print_line_cursor#11 print_line_cursor zp ZP_WORD:3 204.0 (byte*) print_line_cursor#11 print_line_cursor zp ZP_WORD:3 204.0
@ -6774,9 +6774,9 @@ main: {
str6: .text " @" str6: .text " @"
str7: .text " @" str7: .text " @"
str8: .text " @" str8: .text " @"
lintab1: .fill $28, 0 lintab1: .fill 2*$14, 0
lintab2: .fill $28, 0 lintab2: .fill 2*$14, 0
lintab3: .fill $28, 0 lintab3: .fill 2*$14, 0
} }
//SEG163 print_ln //SEG163 print_ln
print_ln: { print_ln: {
@ -6837,7 +6837,7 @@ print_byte: {
lsr lsr
lsr lsr
lsr lsr
//SEG187 [74] (byte) print_char::ch#0 ← *((const string) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa //SEG187 [74] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:15::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:19::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:23::print_byte:70 [ print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_byte::b#3 print_char_cursor#81 print_char::ch#0 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay tay
lda print_hextab,y lda print_hextab,y
//SEG188 [75] call print_char [ print_char_cursor#11 print_byte::b#3 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] ) //SEG188 [75] call print_char [ print_char_cursor#11 print_byte::b#3 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::b#3 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::b#3 ] )
@ -6849,7 +6849,7 @@ print_byte: {
//SEG193 [76] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1 //SEG193 [76] (byte~) print_byte::$2 ← (byte) print_byte::b#3 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ print_char_cursor#11 print_byte::$2 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_byte::$2 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_byte::$2 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_byte::$2 ] ) -- vbuaa=vbuxx_band_vbuc1
txa txa
and #$f and #$f
//SEG194 [77] (byte) print_char::ch#1 ← *((const string) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa //SEG194 [77] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [ print_char_cursor#11 print_char::ch#1 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 print_char::ch#1 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 print_char::ch#1 ] ) -- vbuaa=pbuc1_derefidx_vbuaa
tay tay
lda print_hextab,y lda print_hextab,y
//SEG195 [78] call print_char [ print_char_cursor#11 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] ) //SEG195 [78] call print_char [ print_char_cursor#11 ] ( main:2::print_byte:29 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:15::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:19::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:23::print_byte:68 [ print_word::w#10 print_char_cursor#11 ] main:2::print_word:33::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:37::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:41::print_byte:68 [ main::i#10 print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:49::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:53::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:57::print_byte:68 [ print_line_cursor#1 print_word::w#10 print_char_cursor#11 ] main:2::print_word:15::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:19::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:23::print_byte:70 [ print_char_cursor#11 ] main:2::print_word:33::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:37::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:41::print_byte:70 [ main::i#10 print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:49::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:53::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] main:2::print_word:57::print_byte:70 [ print_line_cursor#1 print_char_cursor#11 ] )

Some files were not shown because too many files have changed in this diff Show More