1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-08-02 09:29:35 +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 Pass1AssertNoLValueIntermediate(program).execute();
new Pass1AddTypePromotions(program).execute();
new Pass1AssertArrayLengths(program).execute();
new Pass1AssertNoRecursion(program).execute();
getLog().append("INITIAL CONTROL FLOW GRAPH");
@ -241,6 +240,7 @@ public class Compiler {
private void pass3Analysis() {
new Pass3AssertRValues(program).check();
new Pass3AssertArrayLengths(program).check();
new Pass3AssertNoMulDivMod(program).check();
new Pass3BlockSequencePlanner(program).plan();
// 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;
import dk.camelot64.kickc.fragment.AsmFormat;
/** A labelled numeric data directive. */
public class AsmDataFill implements AsmLine {
private String label;
private AsmDataNumeric.Type type;
private String sizeAsm;
private int size;
private String fillValue;
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.type = type;
this.sizeAsm = sizeAsm;
this.size = size;
this.fillValue = fillValue;
}
@ -38,7 +38,7 @@ public class AsmDataFill implements AsmLine {
StringBuilder asm = new StringBuilder();
asm.append(label + ": ");
asm.append(".fill ");
asm.append(AsmFormat.getAsmNumber(size * type.bytes));
asm.append(sizeAsm);
asm.append(", ");
asm.append(fillValue);
return asm.toString();

View File

@ -108,8 +108,8 @@ public class AsmProgram {
* @param type The type of the data
* @param size The size of data to fill
*/
public void addDataFilled(String label, AsmDataNumeric.Type type, int size, String fillValue) {
addLine(new AsmDataFill(label, type, size, fillValue));
public void addDataFilled(String label, AsmDataNumeric.Type type, String sizeAsm, int size, String 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;
import dk.camelot64.kickc.model.values.RValue;
/**
* A fixed size array of another type
*/
public class SymbolTypeArray extends SymbolTypePointer {
/**
* 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 Integer size;
/** The fixed size of the array. Can be null, if the size is not bound. (It will be constant before the compilation is done) */
private RValue size;
public SymbolTypeArray(SymbolType elementType, Integer size) {
public SymbolTypeArray(SymbolType elementType, RValue size) {
super(elementType);
this.size = size;
}
@ -20,11 +20,11 @@ public class SymbolTypeArray extends SymbolTypePointer {
this.size = null;
}
public Integer getSize() {
public RValue getSize() {
return size;
}
public void setSize(Integer size) {
public void setSize(RValue size) {
this.size = size;
}
@ -32,9 +32,9 @@ public class SymbolTypeArray extends SymbolTypePointer {
public String getTypeName() {
SymbolType elementType = getElementType();
if(elementType instanceof SymbolTypeMulti) {
return "(" + elementType.getTypeName() + ")" + "[" + (size == null ? "" : size) + "]";
return "(" + elementType.getTypeName() + ")" + "[" + (size == null ? "" : size.toString()) + "]";
} 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(o == null || getClass() != o.getClass()) return false;
if(!super.equals(o)) return false;
SymbolTypeArray that = (SymbolTypeArray) o;
return size != null ? size.equals(that.size) : that.size == null;
}
@ -60,4 +58,5 @@ public class SymbolTypeArray extends SymbolTypePointer {
public String toString() {
return getTypeName();
}
}

View File

@ -172,6 +172,8 @@ public class SymbolTypeInference {
}
} else if(rValue instanceof ConstantArrayList) {
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) {
return new SymbolTypeArray(((ConstantArrayFilled) rValue).getElementType(), ((ConstantArrayFilled) rValue).getSize());
} 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 {
private int size;
private ConstantValue size;
private SymbolType elementType;
public ConstantArrayFilled(SymbolType elementType, int size) {
public ConstantArrayFilled(SymbolType elementType, ConstantValue size) {
this.size = size;
this.elementType = elementType;
}
@ -28,10 +28,14 @@ public class ConstantArrayFilled implements ConstantValue {
return elementType;
}
public int getSize() {
public ConstantValue getSize() {
return size;
}
public void setSize(ConstantValue size) {
this.size = size;
}
@Override
public ConstantLiteral calculateLiteral(ProgramScope scope) {
throw new ConstantNotLiteral("Cannot calculate literal array");
@ -46,7 +50,7 @@ public class ConstantArrayFilled implements ConstantValue {
public String toString(Program program) {
StringBuilder out = new StringBuilder();
out.append("{ fill( ");
out.append(size);
out.append(size.toString());
out.append(", 0) }");
return out.toString();
}

View File

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

View File

@ -51,6 +51,12 @@ public class AliasReplacer implements ValueReplacer.Replacer {
if(alias != null) {
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) {
ConstantBinary constantBinary = (ConstantBinary) rValue;
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", "");
sequence.addStatement(new StatementKickAsm(kickAsmCode, new StatementSource(ctx)));
}
if(ctx.kasmParams()!=null) {
if(ctx.kasmParams() != null) {
this.visitKasmParams(ctx.kasmParams());
}
return null;
@ -167,7 +167,7 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
resourceName = resourceName.substring(1, resourceName.length() - 1);
File resourceFile = Compiler.loadFile(resourceName, program);
program.addAsmResourceFile(resourceFile.toPath());
program.getLog().append("Added resource "+resourceFile.getPath().replace('\\', '/'));
program.getLog().append("Added resource " + resourceFile.getPath().replace('\\', '/'));
}
return null;
}
@ -189,11 +189,11 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
} else if(type instanceof SymbolTypeArray) {
// Add an zero-array initializer
SymbolTypeArray typeArray = (SymbolTypeArray) type;
Integer size = typeArray.getSize();
if(size == null) {
throw new CompileError("Error! Cannot determine array size. " + lValue.toString(program), new StatementSource(ctx));
RValue size = typeArray.getSize();
if(size==null) {
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);
}
return null;
@ -309,7 +309,7 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
PrePostModifierHandler.addPreModifiers(this, 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
VariableRef notExprVar = getCurrentSymbols().addVariableIntermediate().getRef();
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.
*
* @param forDeclCtx The variable declaration
* @return The variable of the for loop
*/
@ -542,12 +543,8 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
public SymbolType visitTypeArray(KickCParser.TypeArrayContext ctx) {
SymbolType elementType = (SymbolType) visit(ctx.typeDecl());
if(ctx.expr() != null) {
ConstantValue size = ParseTreeConstantEvaluator.evaluate(ctx.expr());
if(size instanceof ConstantInteger) {
return new SymbolTypeArray(elementType, ((ConstantInteger) size).getValue().intValue());
} else {
throw new RuntimeException("Array size not a constant integer " + ctx.getText());
}
RValue sizeVal = (RValue) visit(ctx.expr());
return new SymbolTypeArray(elementType, sizeVal);
} else {
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
public void check() throws AssertionFailed {
SymbolFinder symbolFinder = new SymbolFinder(getSymbols());
SymbolFinder symbolFinder = new SymbolFinder(getScope());
symbolFinder.visitGraph(getGraph());
HashSet<Symbol> codeSymbols = symbolFinder.getSymbols();
// Check that all symbols found in the code is also oin the symbol tabel
for(Symbol codeSymbol : codeSymbols) {
if(codeSymbol.getFullName().equals(SymbolRef.PROCEXIT_BLOCK_NAME)) continue;
Symbol tableSymbol = getSymbols().getSymbol(codeSymbol.getFullName());
Symbol tableSymbol = getScope().getSymbol(codeSymbol.getFullName());
if(tableSymbol == null) {
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
HashSet<Symbol> tableSymbols = getAllSymbols(getSymbols());
HashSet<Symbol> tableSymbols = getAllSymbols(getScope());
for(Symbol tableSymbol : tableSymbols) {
if(tableSymbol instanceof VariableUnversioned) continue;
if(tableSymbol instanceof ConstantVar) continue;

View File

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

View File

@ -57,10 +57,10 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
SymbolType constType = variableType;
if(!valueType.equals(variableType)) {
if(SymbolTypeInference.typeMatch(valueType, variableType)) {
constType = valueType;
} else if(SymbolTypeInference.typeMatch(variableType, valueType)) {
if(SymbolTypeInference.typeMatch(variableType, valueType)) {
constType = variableType;
} else if(SymbolTypeInference.typeMatch(valueType, variableType)) {
constType = valueType;
} else {
throw new CompileError(
"Constant variable has a non-matching type \n variable: " + variable.toString(getProgram()) +
@ -223,6 +223,11 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
if(castConstant !=null) {
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;
}

View File

@ -1,6 +1,7 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.types.SymbolTypeArray;
import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.model.symbols.ConstantVar;
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
*/
private void replaceInSymbolTable(Map<ConstantRef, ConstantValue> inline) {
Collection<ConstantVar> allConstants = getProgram().getScope().getAllConstants(true);
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();
RValue replacement = AliasReplacer.getReplacement(constantValue, inline);
if(replacement != null) {

View File

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

View File

@ -18,7 +18,7 @@ public abstract class Pass2SsaAssertion {
return program.getGraph();
}
public ProgramScope getSymbols() {
public ProgramScope 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.fragment.*;
import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.operators.Operators;
import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.model.statements.*;
import dk.camelot64.kickc.model.symbols.ConstantVar;
@ -116,7 +117,8 @@ public class Pass4CodeGeneration {
Collection<ConstantVar> scopeConstants = scope.getAllConstants(false);
Set<String> added = new LinkedHashSet<>();
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();
if(asmName != null && !added.contains(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.
* 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) {
String asmName = constantVar.getAsmName() == null ? constantVar.getLocalName() : constantVar.getAsmName();
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())) {
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);
} 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);
} 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);
} 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);
} else {
throw new RuntimeException("Unhandled constant array element type " + constantArrayFilled.toString(program));
}
} else if(constantVar.getType().equals(SymbolType.STRING)) {
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);
} else {
try {
ConstantLiteral literal = constantVar.getValue().calculateLiteral(getScope());
if(literal instanceof ConstantString) {
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));
}
return used;
} else if(rValue instanceof ArrayFilled) {
return getReferenced(((ArrayFilled) rValue).getSize());
} else if(rValue instanceof ConstantArrayFilled) {
return new ArrayList<>();
return getReferenced(((ConstantArrayFilled) rValue).getSize());
} else if(rValue instanceof ConstantUnary) {
return getReferenced(((ConstantUnary) rValue).getOperand());
} else if(rValue instanceof ConstantRef) {

View File

@ -129,12 +129,15 @@ public class ValueReplacer {
subValues.add(new ReplaceableConstantBinaryRight((ConstantBinary) value));
} else if(value instanceof ConstantUnary) {
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(
value == null ||
value instanceof VariableRef ||
value instanceof ConstantLiteral ||
value instanceof ConstantRef ||
value instanceof ConstantArrayFilled ||
value instanceof LvalueIntermediate
) {
// 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. */
public static class ReplaceableConstantUnaryValue extends ReplaceableValue {
private final ConstantUnary unary;

View File

@ -46,6 +46,16 @@ public class TestPrograms {
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
public void testForRangeSymbolic() throws IOException, URISyntaxException {
compileAndCompare("forrangesymbolic");
@ -808,7 +818,7 @@ public class TestPrograms {
@Test
public void testArrayUninitialized() throws IOException, URISyntaxException {
assertError("array-uninitialized", "Cannot determine array size.");
assertError("array-uninitialized", "Array has no declared size.");
}
@Test

View File

@ -1,3 +1,6 @@
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;
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!";
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 [ ] )
[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 [ ] )
[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
main::@return: scope:[main] from main
[8] return [ ] ( main:2 [ ] )

View File

@ -114,7 +114,7 @@ Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0
Succesful SSA optimization Pass2RedundantPhiElimination
Constant (const byte[3]) b#0 = { fill( 3, 0) }
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
Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) main::$0 = SCREEN#0+1
@ -127,7 +127,7 @@ Consolidated array index constant in *(d#0+2)
Succesful SSA optimization Pass2ConstantAdditionElimination
OPTIMIZING CONTROL FLOW GRAPH
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
Succesful SSA optimization Pass2ConstantInlining
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 [ ] )
[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 [ ] )
[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
main::@return: scope:[main] from main
[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
lda c+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
sta SCREEN+2
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 [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 [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
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
lda c+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
sta SCREEN+2
jmp breturn
@ -321,7 +321,7 @@ FINAL SYMBOL TABLE
(byte[]) c
(const byte[]) c#0 c = { (byte) 'c', (byte) 'm', (byte) 'l' }
(byte[]) d
(const string) d#0 d = (string) "cml"
(const byte[]) d#0 d = (string) "cml"
(void()) main()
(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
lda c+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
sta SCREEN+2
//SEG13 main::@return

View File

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

View File

@ -26,10 +26,11 @@ void main() {
} while (x<(x1+1));
}
SYMBOLS
(word/signed word/dword/signed dword~) $0
(label) @1
(label) @begin
(label) @end
(byte[1000]) SCREEN
(byte[$0]) SCREEN
(byte) STAR
(void()) main()
(byte~) main::$0
@ -64,11 +65,12 @@ SYMBOLS
(byte) main::y1
(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
@begin: scope:[] from
(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
main: scope:[main] from
(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) 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*~) 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::cursor ← (byte*~) main::$5
to:main::@1
@ -123,6 +125,7 @@ main::@return: scope:[main] from main::@4
to:@end
@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
PROCEDURE MODIFY VARIABLE ANALYSIS
@ -133,7 +136,7 @@ Completing Phi functions...
CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from
(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
main: scope:[main] from @1
(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) 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*~) 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::cursor#0 ← (byte*~) main::$5
to:main::@1
@ -219,8 +222,8 @@ SYMBOL TABLE SSA
(label) @2
(label) @begin
(label) @end
(byte[1000]) SCREEN
(byte[1000]) SCREEN#0
(byte[$0]) SCREEN
(byte[$0]) SCREEN#0
(byte) STAR
(byte) STAR#0
(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
(byte[1000]) SCREEN
(byte[$0]) SCREEN
(byte) STAR
(void()) main()
(byte*) main::cursor
@ -831,7 +834,7 @@ FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte[1000]) SCREEN
(byte[$0]) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte) STAR
(const byte) STAR#0 STAR = (byte/signed byte/word/signed word/dword/signed dword) 81

View File

@ -1,7 +1,7 @@
(label) @1
(label) @begin
(label) @end
(byte[1000]) SCREEN
(byte[$0]) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte) STAR
(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) @end
(void()) main()
(byte~) main::$0
(word/signed word/dword/signed dword~) main::$0
(byte~) main::$1
(byte/signed word/word/dword/signed dword~) main::$10
(word/signed dword/dword~) main::$11
(byte~) main::$12
(byte/signed word/word/dword/signed dword~) main::$13
(bool~) main::$14
(byte/signed word/word/dword/signed dword~) main::$2
(bool~) main::$10
(byte/signed word/word/dword/signed dword~) main::$11
(word/signed dword/dword~) main::$12
(byte~) main::$13
(byte/signed word/word/dword/signed dword~) main::$14
(bool~) main::$15
(byte~) main::$2
(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::$5
(word/signed dword/dword~) main::$6
(byte~) main::$7
(bool~) main::$8
(byte/signed word/word/dword/signed dword~) main::$6
(word/signed dword/dword~) main::$7
(byte~) main::$8
(bool~) main::$9
(label) main::@1
(label) main::@2
@ -53,7 +54,7 @@ SYMBOLS
(byte) main::STAR
(byte) main::e
(word) main::idx
(byte[1000]) main::screen
(byte[main::$0]) main::screen
(byte) main::x
(byte) main::x0
(byte) main::x1
@ -63,53 +64,54 @@ SYMBOLS
(byte) main::y1
(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
@begin: scope:[] from
to:@1
main: scope:[main] from
(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::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::y1 ← (byte/signed byte/word/signed word/dword/signed dword) 24
(byte~) main::$0 ← (byte) main::x1 - (byte) main::x0
(byte) main::xd ← (byte~) main::$0
(byte~) main::$1 ← (byte) main::y1 - (byte) main::y0
(byte) main::yd ← (byte~) main::$1
(byte~) main::$1 ← (byte) main::x1 - (byte) main::x0
(byte) main::xd ← (byte~) main::$1
(byte~) main::$2 ← (byte) main::y1 - (byte) main::y0
(byte) main::yd ← (byte~) main::$2
(byte) main::x ← (byte) main::x0
(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) 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::$4 ← (byte) main::x + (byte/signed word/word/dword/signed dword~) main::$3
(word) main::idx ← (byte/signed word/word/dword/signed dword~) main::$4
(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::$3
(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::$5 ← (byte) main::x + (byte/signed word/word/dword/signed dword~) main::$4
(word) main::idx ← (byte/signed word/word/dword/signed dword~) main::$5
to:main::@1
main::@1: scope:[main] from main main::@2
*((byte[1000]) 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) main::x ← (byte/signed word/word/dword/signed dword~) main::$5
(word/signed dword/dword~) main::$6 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 1
(word) main::idx ← (word/signed dword/dword~) main::$6
(byte~) main::$7 ← (byte) main::e + (byte) main::yd
(byte) main::e ← (byte~) main::$7
(bool~) main::$8 ← (byte) main::xd < (byte) main::e
(bool~) main::$9 ← ! (bool~) main::$8
if((bool~) main::$9) goto main::@2
*((byte[main::$0]) main::screen + (word) main::idx) ← (byte) main::STAR
(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::$6
(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::$7
(byte~) main::$8 ← (byte) main::e + (byte) main::yd
(byte) main::e ← (byte~) main::$8
(bool~) main::$9 ← (byte) main::xd < (byte) main::e
(bool~) main::$10 ← ! (bool~) main::$9
if((bool~) main::$10) goto main::@2
to: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
(bool~) main::$14 ← (byte) main::x < (byte/signed word/word/dword/signed dword~) main::$13
if((bool~) main::$14) goto main::@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::$15 ← (byte) main::x < (byte/signed word/word/dword/signed dword~) main::$14
if((bool~) main::$15) goto main::@1
to:main::@4
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) main::y ← (byte/signed word/word/dword/signed dword~) main::$10
(word/signed dword/dword~) main::$11 ← (word) main::idx + (byte/signed byte/word/signed word/dword/signed dword) 40
(word) main::idx ← (word/signed dword/dword~) main::$11
(byte~) main::$12 ← (byte) main::e - (byte) main::xd
(byte) main::e ← (byte~) main::$12
(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::$11
(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::$12
(byte~) main::$13 ← (byte) main::e - (byte) main::xd
(byte) main::e ← (byte~) main::$13
to:main::@2
main::@4: scope:[main] from main::@2
to:main::@return
@ -121,6 +123,7 @@ main::@return: scope:[main] from main::@4
to:@end
@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
PROCEDURE MODIFY VARIABLE ANALYSIS
@ -133,22 +136,22 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
to:@1
main: scope:[main] from @1
(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::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::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::xd#0 ← (byte~) main::$0
(byte~) main::$1 ← (byte) main::y1#0 - (byte) main::y0#0
(byte) main::yd#0 ← (byte~) main::$1
(byte~) main::$1 ← (byte) main::x1#0 - (byte) main::x0#0
(byte) main::xd#0 ← (byte~) main::$1
(byte~) main::$2 ← (byte) main::y1#0 - (byte) main::y0#0
(byte) main::yd#0 ← (byte~) main::$2
(byte) main::x#0 ← (byte) main::x0#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) 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::$4 ← (byte) main::x#0 + (byte/signed word/word/dword/signed dword~) main::$3
(word) main::idx#0 ← (byte/signed word/word/dword/signed dword~) main::$4
(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::$3
(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::$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::$5
to:main::@1
main::@1: scope:[main] from main main::@2
(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 )
(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[1000]) 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) main::x#1 ← (byte/signed word/word/dword/signed dword~) main::$5
(word/signed dword/dword~) main::$6 ← (word) main::idx#3 + (byte/signed byte/word/signed word/dword/signed dword) 1
(word) main::idx#1 ← (word/signed dword/dword~) main::$6
(byte~) main::$7 ← (byte) main::e#3 + (byte) main::yd#1
(byte) main::e#1 ← (byte~) main::$7
(bool~) main::$8 ← (byte) main::xd#1 < (byte) main::e#1
(bool~) main::$9 ← ! (bool~) main::$8
if((bool~) main::$9) goto main::@2
*((byte[main::$0]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#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::$6
(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::$7
(byte~) main::$8 ← (byte) main::e#3 + (byte) main::yd#1
(byte) main::e#1 ← (byte~) main::$8
(bool~) main::$9 ← (byte) main::xd#1 < (byte) main::e#1
(bool~) main::$10 ← ! (bool~) main::$9
if((bool~) main::$10) goto main::@2
to: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 )
@ -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::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/signed word/word/dword/signed dword~) main::$13 ← (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
if((bool~) main::$14) goto main::@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::$15 ← (byte) main::x#3 < (byte/signed word/word/dword/signed dword~) main::$14
if((bool~) main::$15) goto main::@1
to:main::@return
main::@3: scope:[main] from main::@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 )
(word) main::idx#4 ← phi( main::@1/(word) main::idx#1 )
(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) main::y#1 ← (byte/signed word/word/dword/signed dword~) main::$10
(word/signed dword/dword~) main::$11 ← (word) main::idx#4 + (byte/signed byte/word/signed word/dword/signed dword) 40
(word) main::idx#2 ← (word/signed dword/dword~) main::$11
(byte~) main::$12 ← (byte) main::e#4 - (byte) main::xd#2
(byte) main::e#2 ← (byte~) main::$12
(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::$11
(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::$12
(byte~) main::$13 ← (byte) main::e#4 - (byte) main::xd#2
(byte) main::e#2 ← (byte~) main::$13
to:main::@2
main::@return: scope:[main] from main::@2
return
@ -215,20 +218,20 @@ SYMBOL TABLE SSA
(label) @begin
(label) @end
(void()) main()
(byte~) main::$0
(byte~) main::$1
(byte/signed word/word/dword/signed dword~) main::$10
(word/signed dword/dword~) main::$11
(byte~) main::$12
(byte/signed word/word/dword/signed dword~) main::$13
(bool~) main::$14
(byte/signed word/word/dword/signed dword~) main::$2
(bool~) main::$10
(byte/signed word/word/dword/signed dword~) main::$11
(word/signed dword/dword~) main::$12
(byte~) main::$13
(byte/signed word/word/dword/signed dword~) main::$14
(bool~) main::$15
(byte~) main::$2
(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::$5
(word/signed dword/dword~) main::$6
(byte~) main::$7
(bool~) main::$8
(byte/signed word/word/dword/signed dword~) main::$6
(word/signed dword/dword~) main::$7
(byte~) main::$8
(bool~) main::$9
(label) main::@1
(label) main::@2
@ -253,8 +256,8 @@ SYMBOL TABLE SSA
(word) main::idx#3
(word) main::idx#4
(word) main::idx#5
(byte[1000]) main::screen
(byte[1000]) main::screen#0
(byte[main::$0]) main::screen
(byte[main::$0]) main::screen#0
(byte) main::x
(byte) main::x#0
(byte) main::x#1
@ -292,25 +295,25 @@ SYMBOL TABLE SSA
OPTIMIZING CONTROL FLOW GRAPH
Culled Empty Block (label) @2
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
Alias (byte) main::xd#0 = (byte~) main::$0
Alias (byte) main::yd#0 = (byte~) main::$1
Alias (byte) main::xd#0 = (byte~) main::$1
Alias (byte) main::yd#0 = (byte~) main::$2
Alias (byte) main::x#0 = (byte) main::x0#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 (word) main::idx#0 = (byte/signed word/word/dword/signed dword~) main::$4
Alias (byte) main::x#1 = (byte/signed word/word/dword/signed dword~) main::$5 (byte) main::x#4
Alias (word) main::idx#1 = (word/signed dword/dword~) main::$6 (word) main::idx#4
Alias (byte) main::e#1 = (byte~) main::$7 (byte) main::e#4
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::$5
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::$7 (word) main::idx#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::xd#1 = (byte) main::xd#2
Alias (byte) main::x1#2 = (byte) main::x1#3
Alias (byte) main::STAR#1 = (byte) main::STAR#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 (word) main::idx#2 = (word/signed dword/dword~) main::$11
Alias (byte) main::e#2 = (byte~) main::$12
Alias (byte) main::y#1 = (byte/signed word/word/dword/signed dword~) main::$11
Alias (word) main::idx#2 = (word/signed dword/dword~) main::$12
Alias (byte) main::e#2 = (byte~) main::$13
Succesful SSA optimization Pass2AliasElimination
Alias (byte) main::x1#1 = (byte) main::x1#2
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::x1#1 (byte) main::x1#0
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::$14 if((byte) main::x#1<(byte/signed word/word/dword/signed dword~) main::$13) goto main::@1
Simple Condition (bool~) main::$10 if((byte) main::xd#0>=(byte) main::e#1) goto main::@2
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
Constant (const byte) main::STAR#0 = 81
Constant (const byte*) main::screen#0 = ((byte*))1024
@ -340,11 +343,11 @@ Constant (const byte) main::y1#0 = 24
Succesful SSA optimization Pass2ConstantIdentification
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/signed word/word/dword/signed dword) main::$3 = 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::$4 = main::y#0*40
Constant (const byte/signed word/word/dword/signed dword) main::$14 = main::x1#0+1
Succesful SSA optimization Pass2ConstantIdentification
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
OPTIMIZING CONTROL FLOW GRAPH
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
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::$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::$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::e#0 = (const byte) main::yd#0/(byte/signed byte/word/signed word/dword/signed dword) 2
Succesful SSA optimization Pass2ConstantInlining
@ -487,7 +490,7 @@ VARIABLE REGISTER WEIGHTS
(word) main::idx#2 11.0
(word) main::idx#3 11.0
(word) main::idx#5 16.5
(byte[1000]) main::screen
(byte[main::$0]) main::screen
(byte) main::x
(byte) main::x#1 3.666666666666667
(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#3 idx zp ZP_WORD:2 11.0
(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
(byte) main::x
(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#3 idx zp ZP_WORD:2 11.0
(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
(byte) main::x
(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 ] )
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
[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 ] )
[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
@ -636,7 +636,7 @@ form_render_values::@1: scope:[form_render_values] from form_render_values form
to:form_render_values::@3
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 ] )
[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 ] )
[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
@ -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 ] )
to:form_control::@12
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
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 ] )
@ -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 ] )
to:@return
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 ] )
to:print_str_lines::@1
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
(const byte*) FORM_CHARSET#0 FORM_CHARSET = ((byte*))(word/signed word/dword/signed dword) 6144
(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
(const signed byte) FORM_CURSOR_BLINK#0 FORM_CURSOR_BLINK = (byte/signed byte/word/signed word/dword/signed dword) 40
(byte*) FORM_SCREEN
(const byte*) FORM_SCREEN#0 FORM_SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(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
(const byte) KEY_COMMODORE#0 KEY_COMMODORE = (byte/signed byte/word/signed word/dword/signed dword) 61
(byte) KEY_CRSR_DOWN
@ -1309,7 +1309,7 @@
(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_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#2 print_line_cursor zp ZP_WORD:16 8.749999999999998
(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#10 reg byte a 11.363636363636362
(byte*) render_preset_name::name
(const string) render_preset_name::name#0 name#0 = (string) "Standard Charset @"
(const string) 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 string) render_preset_name::name#11 name#11 = (string) "Standard Charset @"
(const byte*) render_preset_name::name#0 name#0 = (string) "Standard Charset @"
(const byte*) render_preset_name::name#1 name#1 = (string) "Extended Color Charset @"
(const byte*) render_preset_name::name#10 name#10 = (string) "8bpp Pixel Cell @"
(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
(const string) render_preset_name::name#2 name#2 = (string) "Standard Bitmap @"
(const string) render_preset_name::name#3 name#3 = (string) "Multicolor Bitmap @"
(const string) 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 string) render_preset_name::name#6 name#6 = (string) "Twoplane Bitmap @"
(const string) render_preset_name::name#7 name#7 = (string) "Chunky 8bpp @"
(const string) 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#2 name#2 = (string) "Standard Bitmap @"
(const byte*) render_preset_name::name#3 name#3 = (string) "Multicolor Bitmap @"
(const byte*) render_preset_name::name#4 name#4 = (string) "Hicolor Charset @"
(const byte*) render_preset_name::name#5 name#5 = (string) "Hicolor Extended Color Charset@"
(const byte*) render_preset_name::name#6 name#6 = (string) "Twoplane Bitmap @"
(const byte*) render_preset_name::name#7 name#7 = (string) "Chunky 8bpp @"
(const byte*) render_preset_name::name#8 name#8 = (string) "Sixs Fred @"
(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::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
[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_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 ] )
to:print_str_lines::@return
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
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
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
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
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)
@ -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 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 string) 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_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) 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::$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 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_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
@ -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
[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_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 ] )
to:print_str_lines::@return
print_str_lines::@return: scope:[print_str_lines] from print_str_lines::@1
@ -25137,7 +25137,7 @@ print_str_lines: {
sta print_char_cursor
lda #>menu.SCREEN
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
sta str
lda #>MENU_TEXT
@ -31231,7 +31231,7 @@ print_str_lines: {
sta print_char_cursor
lda #>menu.SCREEN
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
sta str
lda #>MENU_TEXT
@ -32410,7 +32410,7 @@ FINAL SYMBOL TABLE
(byte) LIGHT_GREEN
(const byte) LIGHT_GREEN#0 LIGHT_GREEN = (byte/signed byte/word/signed word/dword/signed dword) 13
(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
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) PROCPORT_DDR
@ -37276,7 +37276,7 @@ print_str_lines: {
sta print_char_cursor
lda #>menu.SCREEN
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
sta str
lda #>MENU_TEXT

View File

@ -122,7 +122,7 @@
(byte) LIGHT_GREEN
(const byte) LIGHT_GREEN#0 LIGHT_GREEN = (byte/signed byte/word/signed word/dword/signed dword) 13
(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
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(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_col_bitmask#0 = { 1, 2, 4, 8, 16, 32, 64, 128 }
Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const string) print_str_at::str#0 = main::str
Constant (const string) print_str_at::str#1 = main::str1
Constant (const string) print_str_at::str#2 = main::str2
Constant (const string) print_str_at::str#3 = main::str3
Constant (const byte*) print_str_at::str#0 = main::str
Constant (const byte*) print_str_at::str#1 = main::str1
Constant (const byte*) print_str_at::str#2 = main::str2
Constant (const byte*) print_str_at::str#3 = main::str3
Constant (const byte) main::i#0 = 0
Constant (const byte) plot_chargen::ch#0 = 32
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::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 string) print_str_at::str#0
Inlining constant with var siblings (const string) print_str_at::str#0
Inlining constant with var siblings (const string) print_str_at::str#1
Inlining constant with var siblings (const string) print_str_at::str#1
Inlining constant with var siblings (const string) print_str_at::str#1
Inlining constant with var siblings (const string) print_str_at::str#2
Inlining constant with var siblings (const string) print_str_at::str#2
Inlining constant with var siblings (const string) print_str_at::str#2
Inlining constant with var siblings (const string) print_str_at::str#3
Inlining constant with var siblings (const string) 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#0
Inlining constant with var siblings (const byte*) print_str_at::str#0
Inlining constant with var siblings (const byte*) print_str_at::str#0
Inlining constant with var siblings (const byte*) print_str_at::str#1
Inlining constant with var siblings (const byte*) print_str_at::str#1
Inlining constant with var siblings (const byte*) print_str_at::str#1
Inlining constant with var siblings (const byte*) print_str_at::str#2
Inlining constant with var siblings (const byte*) print_str_at::str#2
Inlining constant with var siblings (const byte*) print_str_at::str#2
Inlining constant with var siblings (const byte*) 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::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

View File

@ -12,7 +12,7 @@ main: scope:[main] from @1
to: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 ] )
[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 ] )
[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

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::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) main::msg#0 = "cm"+'l'
Constant (const byte[]) main::msg#0 = "cm"+'l'
Succesful SSA optimization Pass2ConstantIdentification
Eliminating unused constant (const string) main::$2
Eliminating unused constant (const byte) main::l#0
@ -174,7 +174,7 @@ main: scope:[main] from @1
to: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 ] )
[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 ] )
[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
@ -255,7 +255,7 @@ main: {
jmp b1
//SEG14 main::@1
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
lda msg,y
sta screen,y
@ -274,9 +274,9 @@ main: {
}
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 ]
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 ,
REGISTER UPLIFT SCOPES
@ -322,7 +322,7 @@ main: {
jmp b1
//SEG14 main::@1
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
sta screen,x
//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::l
(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
(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
//SEG14 main::@1
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
sta screen,x
//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::l
(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
(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*) main::screen#0 = ((byte*))1024
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
Constant (const byte) main::b#0 = main::$1+main::$2
Succesful SSA optimization Pass2ConstantIdentification

View File

@ -12,5 +12,8 @@ main: {
cpx #8
bne b1
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
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 ] )
[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 ] )
[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

View File

@ -172,29 +172,26 @@ Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0
Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) main::$6 if((byte) main::i#1!=rangelast(0,7)) goto main::@1
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 string) main::$3 = ""+'t'
Constant (const byte*) main::SCREEN#0 = ((byte*))1024
Constant (const byte) main::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification
Constant (const string) main::s2#0 = "e"+"l"+'o'
Constant (const string) main::s4#0 = ""+'t'+'!'
Constant (const byte[]) main::s2#0 = main::s#0+'o'
Constant (const byte[]) main::s4#0 = ""+'t'+'!'
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
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
Eliminating unused constant (const string) main::$7
Eliminating unused constant (const string) main::$8
Eliminating unused constant (const string) main::$9
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 string) main::$3
Eliminating unused constant (const string) main::s2#0
Eliminating unused constant (const string) main::s4#0
Eliminating unused constant (const string) main::s3#0
Eliminating unused constant (const byte[]) main::s2#0
Succesful SSA optimization PassNEliminateUnusedVars
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
@ -242,7 +239,7 @@ main: scope:[main] from @1
to: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 ] )
[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 ] )
[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
@ -327,7 +324,7 @@ main: {
jmp b1
//SEG14 main::@1
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
lda s5,y
sta SCREEN,y
@ -342,13 +339,16 @@ main: {
breturn:
//SEG19 [9] return [ ] ( main:2 [ ] )
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
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 ]
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 ,
REGISTER UPLIFT SCOPES
@ -394,7 +394,7 @@ main: {
jmp b1
//SEG14 main::@1
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
sta SCREEN,x
//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:
//SEG19 [9] return [ ] ( main:2 [ ] )
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
@ -445,11 +448,14 @@ FINAL SYMBOL TABLE
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 22.0
(byte[]) main::s
(const byte[]) main::s#0 s = (string) "e"+(string) "l"
(byte[]) main::s2
(byte[]) main::s3
(const byte[]) main::s3#0 s3 = (string) "cam"+(const byte[]) main::s#0+(byte) 'o'
(byte[]) main::s4
(const byte[]) main::s4#0 s4 = (string) ""+(byte) 't'+(byte) '!'
(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 ]
@ -480,7 +486,7 @@ main: {
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG14 main::@1
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
sta SCREEN,x
//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
//SEG19 [9] return [ ] ( main:2 [ ] )
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#2 reg byte x 22.0
(byte[]) main::s
(const byte[]) main::s#0 s = (string) "e"+(string) "l"
(byte[]) main::s2
(byte[]) main::s3
(const byte[]) main::s3#0 s3 = (string) "cam"+(const byte[]) main::s#0+(byte) 'o'
(byte[]) main::s4
(const byte[]) main::s4#0 s4 = (string) ""+(byte) 't'+(byte) '!'
(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 ]

View File

@ -1914,30 +1914,30 @@ Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte) GREEN#0 = 5
Constant (const byte) RED#0 = 2
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 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 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 string) print_str::str#2 = assert_byte::str
Constant (const string) print_str::str#3 = assert_byte::str1
Constant (const string) print_str::str#4 = assert_byte::str2
Constant (const byte*) print_str::str#2 = assert_byte::str
Constant (const byte*) print_str::str#3 = assert_byte::str1
Constant (const byte*) print_str::str#4 = assert_byte::str2
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 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#2 = -2
Constant (const string) assert_sbyte::msg#2 = test_sbytes::msg2
Constant (const string) assert_sbyte::msg#3 = test_sbytes::msg3
Constant (const byte*) assert_sbyte::msg#2 = test_sbytes::msg2
Constant (const byte*) assert_sbyte::msg#3 = test_sbytes::msg3
Constant (const signed byte) assert_sbyte::c#3 = 2
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 string) print_str::str#6 = assert_sbyte::str
Constant (const string) print_str::str#7 = assert_sbyte::str1
Constant (const string) print_str::str#8 = assert_sbyte::str2
Constant (const byte*) print_str::str#6 = assert_sbyte::str
Constant (const byte*) print_str::str#7 = assert_sbyte::str1
Constant (const byte*) print_str::str#8 = assert_sbyte::str2
Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
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::bf#0 = ((signed byte))test_sbytes::$9
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) test_sbytes::be#0 = -test_sbytes::bd#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#5 assert_sbyte::msg#5
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const string) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8
Inlining constant with var siblings (const string) 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#2
Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const byte*) 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 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 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 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 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#1
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 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 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 var siblings (const string) 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#2
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 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 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
[3] phi() [ ] ( )
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 [ ] )
[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 [ ] )
[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[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
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 ] )
[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 ] )
[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 ] )
[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[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 ] )
[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

View File

@ -112,7 +112,7 @@ Culled Empty Block (label) @2
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
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
Succesful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in *(fibs#0+0)
@ -162,13 +162,13 @@ FINAL CONTROL FLOW GRAPH
@end: scope:[] from @1
[3] phi() [ ] ( )
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 [ ] )
[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 [ ] )
[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[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
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 ] )
[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 ] )
[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 ] )
[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[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 ] )
[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
@ -238,10 +238,10 @@ bend:
main: {
.label _2 = 3
.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
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
sta fibs+1
//SEG11 [6] phi from main to main::@1 [phi:main->main::@1]
@ -256,13 +256,13 @@ main: {
jmp b1
//SEG15 main::@1
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
lda fibs,y
clc
adc fibs+1,y
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
ldy i
sta fibs+2,y
@ -280,13 +280,13 @@ main: {
}
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 [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 [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 [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[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[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 ]
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 [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 [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 [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[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[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:3 [ main::$2 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
@ -320,10 +320,10 @@ bend_from_b1:
bend:
//SEG8 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
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
sta fibs+1
//SEG11 [6] phi from main to main::@1 [phi:main->main::@1]
@ -337,11 +337,11 @@ main: {
jmp b1
//SEG15 main::@1
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
clc
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
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
inx
@ -380,7 +380,7 @@ FINAL SYMBOL TABLE
(label) @begin
(label) @end
(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()
(byte~) main::$2 reg byte a 22.0
(label) main::@1
@ -411,10 +411,10 @@ Score: 269
//SEG7 @end
//SEG8 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
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
sta fibs+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
//SEG15 main::@1
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
clc
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
//SEG18 [9] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] ( main:2 [ main::i#1 ] ) -- vbuxx=_inc_vbuxx
inx

View File

@ -2,7 +2,7 @@
(label) @begin
(label) @end
(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()
(byte~) main::$2 reg byte a 22.0
(label) main::@1

View File

@ -98,5 +98,5 @@ prepare: {
bne b1
rts
}
buffer1: .fill $100, 0
buffer2: .fill $100, 0
buffer1: .fill $10*$10, 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
[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 ] )
[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 ] )
[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 ] )
@ -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::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 ] )
[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 ] )
[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 ] )
@ -79,7 +79,7 @@ flip::@4: scope:[flip] from flip::@2
to:flip::@3
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 ] )
[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 ] )
[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
@ -91,7 +91,7 @@ prepare: scope:[prepare] from main
to: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 ] )
[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 ] )
[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

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::x ← ++ (byte) plot::x
SYMBOLS
(word/signed word/dword/signed dword~) $0
(word/signed word/dword/signed dword~) $1
(label) @1
(label) @2
(label) @3
@ -63,8 +65,8 @@ SYMBOLS
(label) @end
(byte*) RASTER
(byte*) SCREEN
(byte[256]) buffer1
(byte[256]) buffer2
(byte[$0]) buffer1
(byte[$1]) buffer2
(void()) flip()
(byte/signed word/word/dword/signed dword~) flip::$0
(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
INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from
(byte[256]) buffer1 ← { fill( 256, 0) }
(byte[256]) buffer2 ← { 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[$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*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@1
@ -170,7 +174,7 @@ prepare: scope:[prepare] from
(byte) prepare::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
to: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)
(bool~) prepare::$0 ← (byte) prepare::i != rangelast(0,255)
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
to: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/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
@ -209,7 +213,7 @@ flip::@5: scope:[flip] from flip::@4
(byte) flip::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:flip::@3
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)
(bool~) flip::$3 ← (byte) flip::i != rangelast(0,255)
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
to: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::x ← ++ (byte) plot::x
(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
@begin: scope:[] from
(byte[256]) buffer1#0 ← { fill( 256, 0) }
(byte[256]) buffer2#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[$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*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@4
@ -351,7 +357,7 @@ prepare: scope:[prepare] from main
to: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[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)
(bool~) prepare::$0 ← (byte) prepare::i#1 != rangelast(0,255)
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::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[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/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
@ -397,7 +403,7 @@ flip::@5: scope:[flip] from flip::@4
to:flip::@3
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[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)
(bool~) flip::$3 ← (byte) flip::i#1 != rangelast(0,255)
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::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::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::x#1 ← ++ (byte) plot::x#2
(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
SYMBOL TABLE SSA
(word/signed word/dword/signed dword~) $0
(word/signed word/dword/signed dword~) $1
(label) @4
(label) @5
(label) @begin
@ -485,10 +493,10 @@ SYMBOL TABLE SSA
(byte*) SCREEN#7
(byte*) SCREEN#8
(byte*) SCREEN#9
(byte[256]) buffer1
(byte[256]) buffer1#0
(byte[256]) buffer2
(byte[256]) buffer2#0
(byte[$0]) buffer1
(byte[$0]) buffer1#0
(byte[$1]) buffer2
(byte[$1]) buffer2#0
(void()) flip()
(byte/signed word/word/dword/signed dword~) flip::$0
(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::$5 if((byte) plot::y#1!=rangelast(16,1)) goto plot::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte[256]) buffer1#0 = { fill( 256, 0) }
Constant (const byte[256]) buffer2#0 = { fill( 256, 0) }
Constant (const word/signed word/dword/signed dword) $0 = 16*16
Constant (const word/signed word/dword/signed dword) $1 = 16*16
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SCREEN#0 = ((byte*))1024
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::x#0 = 0
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
Succesful SSA optimization Pass2ConstantAdditionElimination
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::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 $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::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
@ -871,7 +884,7 @@ plot::@1: scope:[plot] from plot plot::@3
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::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 ] )
[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 ] )
@ -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::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 ] )
[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 ] )
[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 ] )
@ -909,7 +922,7 @@ flip::@4: scope:[flip] from flip::@2
to:flip::@3
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 ] )
[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 ] )
[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
@ -921,7 +934,7 @@ prepare: scope:[prepare] from main
to: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 ] )
[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 ] )
[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
@ -1017,8 +1030,8 @@ Loop head: prepare::@1 tails: prepare::@1 blocks: prepare::@1 depth: 1
VARIABLE REGISTER WEIGHTS
(byte*) RASTER
(byte*) SCREEN
(byte[256]) buffer1
(byte[256]) buffer2
(byte[$0]) buffer1
(byte[$1]) buffer2
(void()) flip()
(byte) flip::c
(byte) flip::c#1 1501.5
@ -1225,7 +1238,7 @@ plot: {
jmp b2
//SEG48 plot::@2
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
lda buffer1,y
ldy x
@ -1303,7 +1316,7 @@ flip: {
jmp b2
//SEG77 flip::@2
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
lda buffer1,y
ldy dstIdx
@ -1342,7 +1355,7 @@ flip: {
jmp b3
//SEG91 flip::@3
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
lda buffer2,y
sta buffer1,y
@ -1372,7 +1385,7 @@ prepare: {
jmp b1
//SEG102 prepare::@1
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
tya
sta buffer1,y
@ -1387,33 +1400,33 @@ prepare: {
//SEG107 [47] return [ ] ( main:2::prepare:5 [ ] )
rts
}
buffer1: .fill $100, 0
buffer2: .fill $100, 0
buffer1: .fill $10*$10, 0
buffer2: .fill $10*$10, 0
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
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 [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: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 ]
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: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: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 [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 ]
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 [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 [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 [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_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 ,
@ -1572,7 +1585,7 @@ plot: {
jmp b2
//SEG48 plot::@2
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
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
@ -1642,7 +1655,7 @@ flip: {
jmp b2
//SEG77 flip::@2
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
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
@ -1678,7 +1691,7 @@ flip: {
jmp b3
//SEG91 flip::@3
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
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
@ -1705,7 +1718,7 @@ prepare: {
jmp b1
//SEG102 prepare::@1
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
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
@ -1719,8 +1732,8 @@ prepare: {
//SEG107 [47] return [ ] ( main:2::prepare:5 [ ] )
rts
}
buffer1: .fill $100, 0
buffer2: .fill $100, 0
buffer1: .fill $10*$10, 0
buffer2: .fill $10*$10, 0
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b4
@ -1810,10 +1823,10 @@ FINAL SYMBOL TABLE
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[256]) buffer1
(const byte[256]) buffer1#0 buffer1 = { fill( 256, 0) }
(byte[256]) buffer2
(const byte[256]) buffer2#0 buffer2 = { fill( 256, 0) }
(byte[$0]) buffer1
(const byte[16*16]) buffer1#0 buffer1 = { fill( 16*16, 0) }
(byte[$1]) buffer2
(const byte[16*16]) buffer2#0 buffer2 = { fill( 16*16, 0) }
(void()) flip()
(label) flip::@1
(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
//SEG48 plot::@2
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
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
@ -2032,7 +2045,7 @@ flip: {
//SEG76 [28] phi (byte) flip::srcIdx#2 = (byte) flip::srcIdx#1 [phi:flip::@2->flip::@2#2] -- register_copy
//SEG77 flip::@2
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
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
@ -2062,7 +2075,7 @@ flip: {
//SEG90 [37] phi (byte) flip::i#2 = (byte) flip::i#1 [phi:flip::@3->flip::@3#0] -- register_copy
//SEG91 flip::@3
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
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
@ -2083,7 +2096,7 @@ prepare: {
//SEG101 [43] phi (byte) prepare::i#2 = (byte) prepare::i#1 [phi:prepare::@1->prepare::@1#0] -- register_copy
//SEG102 prepare::@1
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
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
@ -2095,6 +2108,6 @@ prepare: {
//SEG107 [47] return [ ] ( main:2::prepare:5 [ ] )
rts
}
buffer1: .fill $100, 0
buffer2: .fill $100, 0
buffer1: .fill $10*$10, 0
buffer2: .fill $10*$10, 0

View File

@ -5,10 +5,10 @@
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[256]) buffer1
(const byte[256]) buffer1#0 buffer1 = { fill( 256, 0) }
(byte[256]) buffer2
(const byte[256]) buffer2#0 buffer2 = { fill( 256, 0) }
(byte[$0]) buffer1
(const byte[16*16]) buffer1#0 buffer1 = { fill( 16*16, 0) }
(byte[$1]) buffer2
(const byte[16*16]) buffer2#0 buffer2 = { fill( 16*16, 0) }
(void()) flip()
(label) flip::@1
(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
Succesful SSA optimization Pass2ConditionalJumpSimplification
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
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) main::@2
Culled Empty Block (label) @16
Succesful SSA optimization Pass2CullEmptyBlocks
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const string) 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_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
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
[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 ] )
[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 ] )
[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
print2::@return: scope:[print2] from print2::@1
[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
Succesful SSA optimization Pass2ConditionalJumpSimplification
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::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification
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 string) print2::msg#1 = main::hello#0
Constant (const byte*) print2::msg#1 = main::hello#0
Succesful SSA optimization Pass2ConstantIdentification
OPTIMIZING CONTROL FLOW GRAPH
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::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 string) print2::msg#1
Constant inlined print2::msg#1 = (const string) main::hello#0
Inlining constant with var siblings (const byte*) print2::msg#1
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::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::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
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
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)
@ -301,10 +301,10 @@ print2: scope:[print2] from main main::@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::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 ] )
[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
print2::@return: scope:[print2] from print2::@1
[15] return [ ] ( main:2::print2:5 [ ] main:2::print2:7 [ ] )
@ -437,7 +437,7 @@ print2: {
jmp b1
//SEG27 print2::@1
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
lda main.hello,y
ldy j
@ -449,7 +449,7 @@ print2: {
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
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
lda main.hello,y
cmp #'@'
@ -462,12 +462,12 @@ print2: {
}
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: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 [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 [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 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 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_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 ,
@ -553,7 +553,7 @@ print2: {
jmp b1
//SEG27 print2::@1
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
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
@ -561,7 +561,7 @@ print2: {
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
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
cmp #'@'
bne b1_from_b1
@ -608,7 +608,7 @@ FINAL SYMBOL TABLE
(label) main::@1
(label) main::@return
(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)
(label) print2::@1
(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
//SEG27 print2::@1
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
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
@ -692,7 +692,7 @@ print2: {
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
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
cmp #'@'
bne b1

View File

@ -5,7 +5,7 @@
(label) main::@1
(label) main::@return
(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)
(label) print2::@1
(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 ] )
to:main::@5
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 ] )
[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
@ -48,7 +48,7 @@ print_str: scope:[print_str] from main::@1
to:print_str::@1
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_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 ] )
to:print_str::@return
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
Succesful SSA optimization Pass2ConditionalJumpSimplification
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
Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
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
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_line_cursor#9 print_line_cursor#19
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const string) 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_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) 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
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::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
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
@ -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 ] )
to:main::@5
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 ] )
[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
@ -1081,7 +1081,7 @@ print_str: scope:[print_str] from main::@1
to:print_str::@1
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_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 ] )
to:print_str::@return
print_str::@return: scope:[print_str] from print_str::@1
@ -1265,7 +1265,7 @@ main: {
jmp b5
//SEG23 main::@5
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
clc
adc #1
@ -1333,7 +1333,7 @@ print_str: {
//SEG44 [21] phi from print_str to print_str::@1 [phi:print_str->print_str::@1]
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
//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
sta str
lda #>txt
@ -1416,7 +1416,7 @@ print_cls: {
txt: .text "camelot@"
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 ]
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
@ -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 [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 [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 [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
@ -1520,7 +1520,7 @@ main: {
jmp b5
//SEG23 main::@5
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
clc
adc #1
@ -1587,7 +1587,7 @@ print_str: {
//SEG44 [21] phi from print_str to print_str::@1 [phi:print_str->print_str::@1]
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
//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
sta str
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#2 str zp ZP_WORD:4 101.0
(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 ]
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]
jsr print_ln
//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
clc
adc #1
@ -1871,7 +1871,7 @@ print_str: {
.label str = 4
//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
//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
sta str
lda #>txt

View File

@ -37,7 +37,7 @@
(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[]) txt
(const string) txt#0 txt = (string) "camelot@"
(const byte[]) txt#0 txt = (string) "camelot@"
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 ]

View File

@ -16,10 +16,10 @@ main::print1: scope:[main] from main
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_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 ] )
[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
main::print2: scope:[main] from main::print1_@1
[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
[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 ] )
[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 ] )
[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
main::@return: scope:[main] from main::print2_@1
[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
Succesful SSA optimization Pass2ConditionalJumpSimplification
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_i#0 = 0
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::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::$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_j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
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
[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 ] )
[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 ] )
[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
main::print2: scope:[main] from main::print1_@1
[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
[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 ] )
[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 ] )
[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
main::@return: scope:[main] from main::print2_@1
[17] return [ ] ( main:2 [ ] )
@ -483,7 +483,7 @@ main: {
jmp print1_b1
//SEG18 main::print1_@1
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
lda print1_msg,y
ldy print1_j
@ -495,7 +495,7 @@ main: {
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
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
lda print1_msg,y
cmp #'@'
@ -521,7 +521,7 @@ main: {
jmp print2_b1
//SEG31 main::print2_@1
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
lda print1_msg,y
ldy print2_j
@ -533,7 +533,7 @@ main: {
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
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
lda print1_msg,y
cmp #'@'
@ -547,18 +547,18 @@ main: {
}
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: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 [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 [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 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: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 [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 [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 [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 [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 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 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 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 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: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 ,
@ -616,7 +616,7 @@ main: {
jmp print1_b1
//SEG18 main::print1_@1
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
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
@ -624,7 +624,7 @@ main: {
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
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
cmp #'@'
bne print1_b1_from_print1_b1
@ -647,7 +647,7 @@ main: {
jmp print2_b1
//SEG31 main::print2_@1
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
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
@ -655,7 +655,7 @@ main: {
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
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
cmp #'@'
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#2 reg byte x 16.5
(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
(bool~) main::print2_$0
(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
//SEG18 main::print1_@1
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
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
@ -779,7 +779,7 @@ main: {
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
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
cmp #'@'
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
//SEG31 main::print2_@1
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
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
@ -803,7 +803,7 @@ main: {
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
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
cmp #'@'
bne print2_b1

View File

@ -15,7 +15,7 @@
(byte) main::print1_j#1 reg byte x 7.333333333333333
(byte) main::print1_j#2 reg byte x 16.5
(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
(bool~) main::print2_$0
(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 ] )
to:print_msg::@2
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 ] )
[14] call print [ screen#14 ] ( main:2::print_msg:5 [ screen#14 ] main:2::print_msg:7 [ screen#14 ] )
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
Constant (const byte) print_msg::idx#0 = 1
Constant (const byte) print_msg::idx#1 = 2
Constant (const string) print_msg::msg#0 = print_msg::$2
Constant (const string) print_msg::msg#1 = print_msg::$3
Constant (const byte*) print_msg::msg#0 = print_msg::$2
Constant (const byte*) print_msg::msg#1 = print_msg::$3
Constant (const byte*) screen#20 = ((byte*))1024
Succesful SSA optimization Pass2ConstantIdentification
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 var 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 string) print_msg::msg#1
Inlining constant with var siblings (const byte*) print_msg::msg#0
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
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 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::$2 = (const string) print_msg::msg#0
Constant inlined print_msg::$3 = (const byte*) print_msg::msg#1
Constant inlined print_msg::$2 = (const byte*) print_msg::msg#0
Succesful SSA optimization Pass2ConstantInlining
Inlining constant with var siblings (const string) print_msg::msg#0
Inlining constant with var siblings (const string) print_msg::msg#1
Inlining constant with var siblings (const string) 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#0
Inlining constant with var siblings (const byte*) print_msg::msg#1
Inlining constant with var siblings (const byte*) print_msg::msg#0
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
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 ] )
to:print_msg::@2
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 ] )
[14] call print [ screen#14 ] ( main:2::print_msg:5 [ screen#14 ] main:2::print_msg:7 [ screen#14 ] )
to:print_msg::@return
@ -613,7 +613,7 @@ print_msg: {
b3:
//SEG26 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2]
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
sta msg
lda #>msg_1
@ -621,7 +621,7 @@ print_msg: {
jmp b2
//SEG28 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
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
sta msg
lda #>msg_0
@ -777,7 +777,7 @@ print_msg: {
b3:
//SEG26 [12] phi from print_msg::@3 to print_msg::@2 [phi:print_msg::@3->print_msg::@2]
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
sta msg
lda #>msg_1
@ -785,7 +785,7 @@ print_msg: {
jmp b2
//SEG28 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
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
sta msg
lda #>msg_0
@ -908,8 +908,8 @@ FINAL SYMBOL TABLE
(byte) print_msg::idx
(byte) print_msg::idx#2 reg byte x 2.0
(byte*) print_msg::msg
(const string) print_msg::msg#0 msg#0 = (string) "Hello @"
(const string) print_msg::msg#1 msg#1 = (string) "World!@"
(const byte*) print_msg::msg#0 msg#0 = (string) "Hello @"
(const byte*) print_msg::msg#1 msg#1 = (string) "World!@"
(byte*) print_msg::msg#2 msg zp ZP_WORD:4 2.0
(byte*) screen
(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]
//SEG25 print_msg::@3
//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
sta msg
lda #>msg_1
@ -979,7 +979,7 @@ print_msg: {
jmp b2
//SEG28 [12] phi from print_msg to print_msg::@2 [phi:print_msg->print_msg::@2]
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
sta msg
lda #>msg_0

View File

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

View File

@ -8,8 +8,8 @@
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
[4] *((const byte*) main::PTR#0) ← <(const string) 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 [ ] )
[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 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 ] )
[7] *((const byte*) main::SCREEN#0) ← *((byte*)(word~) main::$6) [ ] ( main:2 [ ] )
to:main::@return

View File

@ -113,7 +113,7 @@ Culled Empty Block (label) @2
Succesful SSA optimization Pass2CullEmptyBlocks
Alias (byte*) main::ptr#0 = (byte*~) main::$4
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::SCREEN#0 = ((byte*))1024
Succesful SSA optimization Pass2ConstantIdentification
@ -127,11 +127,11 @@ Succesful SSA optimization Pass2FixInlineConstructors
Eliminating Noop Cast (byte*) main::ptr#0 ← ((byte*)) (word~) main::$6
Succesful SSA optimization Pass2NopCastElimination
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::$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::$0 = <(const string) main::STRING#0
Constant inlined main::$2 = >(const byte[]) main::STRING#0
Constant inlined main::$0 = <(const byte[]) main::STRING#0
Succesful SSA optimization Pass2ConstantInlining
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
[3] phi() [ ] ( )
main: scope:[main] from @1
[4] *((const byte*) main::PTR#0) ← <(const string) 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 [ ] )
[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 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 ] )
[7] *((const byte*) main::SCREEN#0) ← *((byte*)(word~) main::$6) [ ] ( main:2 [ ] )
to:main::@return
@ -225,10 +225,10 @@ main: {
.label PTR = $9ffe
.label SCREEN = $400
.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
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
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
@ -249,8 +249,8 @@ main: {
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *((const byte*) main::PTR#0) ← <(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 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 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 [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 ,
@ -287,10 +287,10 @@ main: {
.label PTR = $9ffe
.label SCREEN = $400
.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
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
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
@ -336,7 +336,7 @@ FINAL SYMBOL TABLE
(byte*) main::SCREEN
(const byte*) main::SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[]) main::STRING
(const string) main::STRING#0 STRING = (string) "camelot"
(const byte[]) main::STRING#0 STRING = (string) "camelot"
(byte*) main::ptr
zp ZP_WORD:2 [ main::$6 ]
@ -362,10 +362,10 @@ main: {
.label PTR = $9ffe
.label SCREEN = $400
.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
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
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

View File

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

View File

@ -24,7 +24,7 @@ main::@return: scope:[main] from main::@2
to:@return
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*) 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
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 ] )

View File

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

View File

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

View File

@ -12,7 +12,7 @@ main: scope:[main] from @1
to: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 ] )
[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 ] )
[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 ] )

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
Constant (const byte*) SCREEN#0 = ((byte*))1024
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::i#0 = 0
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
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
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @1 @end main main::@1 main::@return
@ -207,7 +207,7 @@ main: scope:[main] from @1
to: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 ] )
[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 ] )
[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 ] )
@ -291,7 +291,7 @@ main: {
jmp b1
//SEG14 main::@1
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
lda txt,y
sta SCREEN,y
@ -315,10 +315,10 @@ main: {
}
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 ]
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
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
//SEG14 main::@1
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
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
@ -424,7 +424,7 @@ FINAL SYMBOL TABLE
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 22.0
(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 ]
@ -456,7 +456,7 @@ main: {
//SEG13 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG14 main::@1
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
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

View File

@ -14,6 +14,6 @@
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 22.0
(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 ]

View File

@ -13,7 +13,7 @@ main: scope:[main] from @1
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::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 ] )
[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

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
Succesful SSA optimization Pass2ConditionalJumpSimplification
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#2 = 0
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
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 $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::cursor#0 = (const byte*) SCREEN#0
Succesful SSA optimization Pass2ConstantInlining
@ -262,7 +262,7 @@ main: scope:[main] from @1
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::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 ] )
[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
@ -366,7 +366,7 @@ main: {
jmp b1
//SEG16 main::@1
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
lda TEXT,y
ldy #0
@ -417,11 +417,11 @@ main: {
TEXT: .text "camelot "
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 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 [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
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 ,
@ -477,7 +477,7 @@ main: {
jmp b1
//SEG16 main::@1
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
ldy #0
sta (cursor),y
@ -565,7 +565,7 @@ FINAL SYMBOL TABLE
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[]) TEXT
(const string) TEXT#0 TEXT = (string) "camelot "
(const byte[]) TEXT#0 TEXT = (string) "camelot "
(void()) main()
(label) main::@1
(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
//SEG16 main::@1
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
ldy #0
sta (cursor),y

View File

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

View File

@ -13,7 +13,7 @@ main: scope:[main] from @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 ] )
[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 ] )
[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

View File

@ -107,7 +107,7 @@ Alias (byte) main::i#1 = (byte/signed word/word/dword/signed dword~) main::$2
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
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
Succesful SSA optimization Pass2ConstantIdentification
Consolidated constant in assignment main::$1
@ -160,7 +160,7 @@ main: scope:[main] from @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 ] )
[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 ] )
[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
@ -249,7 +249,7 @@ main: {
clc
adc i
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
ldy i
sta buf,y
@ -320,7 +320,7 @@ main: {
txa
clc
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
//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
@ -364,7 +364,7 @@ FINAL SYMBOL TABLE
(label) main::@1
(label) main::@return
(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#1 reg byte x 16.5
(byte) main::i#2 reg byte x 14.666666666666666
@ -403,7 +403,7 @@ main: {
txa
clc
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
//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

View File

@ -6,7 +6,7 @@
(label) main::@1
(label) main::@return
(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#1 reg byte x 16.5
(byte) main::i#2 reg byte x 14.666666666666666

View File

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

View File

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

View File

@ -178,9 +178,9 @@ main: {
str6: .text " @"
str7: .text " @"
str8: .text " @"
lintab1: .fill $28, 0
lintab2: .fill $28, 0
lintab3: .fill $28, 0
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0
}
print_ln: {
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_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 ] )
[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 ] )
to:print_byte::@1
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 ] )
[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 ] )
to:print_byte::@return
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 byte) divr16u::i#0 = 0
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) lin16u_gen::min#0 = 557
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::max#2 = 25736
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 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 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 byte) main::i#0 = 0
Constant (const string) print_str::str#4 = main::str3
Constant (const string) print_str::str#5 = main::str4
Constant (const string) print_str::str#6 = main::str5
Constant (const byte*) print_str::str#4 = main::str3
Constant (const byte*) print_str::str#5 = main::str4
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 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 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 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) divr16u::rem#3 = 0
Constant (const word) divr16u::dividend#2 = 0
@ -2989,9 +2989,9 @@ Constant (const word) lin16u_gen::i#0 = 0
Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
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[20]) lin16u_gen::lintab#1 = main::lintab2#0
Constant (const word[20]) lin16u_gen::lintab#2 = main::lintab3#0
Constant (const word*) lin16u_gen::lintab#0 = main::lintab1#0
Constant (const word*) lin16u_gen::lintab#1 = main::lintab2#0
Constant (const word*) lin16u_gen::lintab#2 = main::lintab3#0
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::$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 string) print_str::str#1
Inlining constant with var siblings (const string) print_str::str#1
Inlining constant with var siblings (const string) print_str::str#1
Inlining constant with var siblings (const string) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#2
Inlining constant with var siblings (const string) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#3
Inlining constant with var siblings (const string) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#4
Inlining constant with var siblings (const string) print_str::str#5
Inlining constant with var siblings (const string) print_str::str#5
Inlining constant with var siblings (const string) print_str::str#5
Inlining constant with var siblings (const string) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#6
Inlining constant with var siblings (const string) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#7
Inlining constant with var siblings (const string) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#8
Inlining constant with var siblings (const string) print_str::str#9
Inlining constant with var siblings (const string) 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#1
Inlining constant with var siblings (const byte*) print_str::str#1
Inlining constant with var siblings (const byte*) print_str::str#1
Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#5
Inlining constant with var siblings (const byte*) print_str::str#5
Inlining constant with var siblings (const byte*) print_str::str#5
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const byte*) print_str::str#9
Inlining constant with var siblings (const byte*) 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
@ -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::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[20]) lin16u_gen::lintab#0
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#0
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#1
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#1
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#1
Inlining constant with var siblings (const word[20]) lin16u_gen::lintab#2
Inlining constant with var siblings (const word[20]) 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#0
Inlining constant with var siblings (const word*) lin16u_gen::lintab#0
Inlining constant with var siblings (const word*) lin16u_gen::lintab#0
Inlining constant with var siblings (const word*) lin16u_gen::lintab#1
Inlining constant with var siblings (const word*) lin16u_gen::lintab#1
Inlining constant with var siblings (const word*) lin16u_gen::lintab#1
Inlining constant with var siblings (const word*) lin16u_gen::lintab#2
Inlining constant with var siblings (const word*) 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
@ -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#2 = (word/signed word/dword/signed dword) 25736
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 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
@ -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_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 ] )
[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 ] )
to:print_byte::@1
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 ] )
[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 ] )
to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1
@ -4447,9 +4447,9 @@ main: {
str6: .text " @"
str7: .text " @"
str8: .text " @"
lintab1: .fill $28, 0
lintab2: .fill $28, 0
lintab3: .fill $28, 0
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0
}
//SEG163 print_ln
print_ln: {
@ -4525,7 +4525,7 @@ print_byte: {
lsr
lsr
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
lda print_hextab,y
sta print_char.ch
@ -4542,7 +4542,7 @@ print_byte: {
lda #$f
and b
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
lda print_hextab,y
sta print_char.ch
@ -5564,9 +5564,9 @@ main: {
str6: .text " @"
str7: .text " @"
str8: .text " @"
lintab1: .fill $28, 0
lintab2: .fill $28, 0
lintab3: .fill $28, 0
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0
}
//SEG163 print_ln
print_ln: {
@ -5638,7 +5638,7 @@ print_byte: {
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
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 ] )
@ -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
txa
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
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 ] )
@ -6381,7 +6381,7 @@ FINAL SYMBOL TABLE
(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_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#1 print_line_cursor zp ZP_WORD:3 8.891891891891891
(byte*) print_line_cursor#11 print_line_cursor zp ZP_WORD:3 204.0
@ -6774,9 +6774,9 @@ main: {
str6: .text " @"
str7: .text " @"
str8: .text " @"
lintab1: .fill $28, 0
lintab2: .fill $28, 0
lintab3: .fill $28, 0
lintab1: .fill 2*$14, 0
lintab2: .fill 2*$14, 0
lintab3: .fill 2*$14, 0
}
//SEG163 print_ln
print_ln: {
@ -6837,7 +6837,7 @@ print_byte: {
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
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 ] )
@ -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
txa
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
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 ] )

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