mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-20 00:29:10 +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:
parent
ac9ba0065c
commit
3328a570c6
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,6 @@
|
||||
lda {z1}+1
|
||||
cmp #>{c1}
|
||||
bne {la1}
|
||||
lda {z1}
|
||||
cmp #<{c1}
|
||||
bne {la1}
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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() {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -18,7 +18,7 @@ public abstract class Pass2SsaAssertion {
|
||||
return program.getGraph();
|
||||
}
|
||||
|
||||
public ProgramScope getSymbols() {
|
||||
public ProgramScope getScope() {
|
||||
return program.getScope();
|
||||
}
|
||||
|
||||
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -1,3 +1,6 @@
|
||||
byte[3] b = { 1, 2 };
|
||||
|
||||
void main() {}
|
||||
void main() {
|
||||
byte* SCREEN = $400;
|
||||
SCREEN[0] = b[0];
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -1,2 +1,6 @@
|
||||
byte[] b;
|
||||
|
||||
void main() {
|
||||
byte* SCREEN = $400;
|
||||
SCREEN[0] = b[0];
|
||||
}
|
||||
|
12
src/test/java/dk/camelot64/kickc/test/kc/forrangedwords.kc
Normal file
12
src/test/java/dk/camelot64/kickc/test/kc/forrangedwords.kc
Normal 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;
|
||||
}
|
||||
}
|
@ -1,3 +1,6 @@
|
||||
byte[3] b = "qwe!";
|
||||
|
||||
void main() {}
|
||||
void main() {
|
||||
byte* SCREEN = $400;
|
||||
SCREEN[0] = b[0];
|
||||
}
|
@ -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
|
@ -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
|
@ -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
|
||||
|
@ -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 ]
|
@ -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 [ ] )
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
@ -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 ]
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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 ]
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
45
src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.asm
Normal file
45
src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.asm
Normal 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
|
||||
}
|
33
src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.cfg
Normal file
33
src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.cfg
Normal 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
|
696
src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.log
Normal file
696
src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.log
Normal 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
|
||||
}
|
||||
|
25
src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.sym
Normal file
25
src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.sym
Normal 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 ]
|
@ -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
|
||||
|
@ -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 [ ] )
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 ]
|
||||
|
@ -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 [ ] )
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 ]
|
||||
|
@ -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 ] )
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 ] )
|
||||
|
@ -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
|
||||
|
@ -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 ]
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user