1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-13 03:39:12 +00:00

Fixed tests.

This commit is contained in:
jespergravgaard 2019-11-03 20:11:06 +01:00
parent 0b477d24ae
commit b6b01ab232
224 changed files with 1627 additions and 1422 deletions

View File

@ -74,17 +74,17 @@ public class AsmFragmentTemplate {
*/
private void initAsm() {
// Parse the body ASM
this.bodyAsm = AsmParser.parseAsm(this.body, new StatementSource(signature+".asm", 1, this.body, 0, 0));
this.bodyAsm = AsmParser.parseAsm(this.body, new StatementSource(signature + ".asm", 1, this.body, 0, 0));
// Generate a dummy instance to find clobber & cycles
ProgramScope scope = new ProgramScope();
LinkedHashMap<String, Value> bindings = new LinkedHashMap<>();
{
Variable v1 = new Variable( "z1", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v2 = new Variable( "z2", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v3 = new Variable( "z3", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v4 = new Variable( "z4", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v5 = new Variable( "z5", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v6 = new Variable( "z6", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v1 = new Variable(false, "z1", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v2 = new Variable(false, "z2", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v3 = new Variable(false, "z3", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v4 = new Variable(false, "z4", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v5 = new Variable(false, "z5", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
Variable v6 = new Variable(false, "z6", scope, SymbolType.BYTE, Variable.Kind.PHI_VERSION, Variable.MemoryArea.ZEROPAGE_MEMORY, null);
v1.setAllocation(new Registers.RegisterZpMem(2, 1));
v2.setAllocation(new Registers.RegisterZpMem(4, 1));
v3.setAllocation(new Registers.RegisterZpMem(6, 1));
@ -99,13 +99,13 @@ public class AsmFragmentTemplate {
if(signature.contains("z6")) bindings.put("z6", v6);
}
{
Variable v1 = new Variable( "m1", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v2 = new Variable( "m2", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v3 = new Variable( "m3", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v4 = new Variable( "m4", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v5 = new Variable( "m5", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v6 = new Variable( "m6", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
v1.setAllocation(new Registers.RegisterMainMem(v1.getVariableRef(), 1, null));
Variable v1 = new Variable(false, "m1", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v2 = new Variable(false, "m2", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v3 = new Variable(false, "m3", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v4 = new Variable(false, "m4", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v5 = new Variable(false, "m5", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
Variable v6 = new Variable(false, "m6", scope, SymbolType.BYTE, Variable.Kind.LOAD_STORE, Variable.MemoryArea.MAIN_MEMORY, null);
v1.setAllocation(new Registers.RegisterMainMem(v1.getVariableRef(), 1, null));
v2.setAllocation(new Registers.RegisterMainMem(v2.getVariableRef(), 1, null));
v3.setAllocation(new Registers.RegisterMainMem(v3.getVariableRef(), 1, null));
v4.setAllocation(new Registers.RegisterMainMem(v4.getVariableRef(), 1, null));

View File

@ -101,16 +101,16 @@ public abstract class Scope implements Symbol, Serializable {
}
public Variable addVariable(Variable.Kind kind, String name, SymbolType type, Variable.MemoryArea memoryArea, String dataSegment) {
return add(new Variable( name, this, type, kind, memoryArea, dataSegment));
return add(new Variable( false, name, this, type, kind, memoryArea, dataSegment));
}
public Variable addVariablePhiMaster(String name, SymbolType type, Variable.MemoryArea memoryArea, String dataSegment) {
return add(new Variable( name, this, type, Variable.Kind.PHI_MASTER, memoryArea, dataSegment));
return add(new Variable( false, name, this, type, Variable.Kind.PHI_MASTER, memoryArea, dataSegment));
}
public Variable addVariableIntermediate() {
String name = allocateIntermediateVariableName();
return add(new Variable( name, this, SymbolType.VAR, Variable.Kind.INTERMEDIATE, Variable.MemoryArea.ZEROPAGE_MEMORY, getSegmentData()));
return add(new Variable( false, name, this, SymbolType.VAR, Variable.Kind.INTERMEDIATE, Variable.MemoryArea.ZEROPAGE_MEMORY, getSegmentData()));
}
/**

View File

@ -12,6 +12,7 @@ import dk.camelot64.kickc.model.values.VariableRef;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/** A Variable symbol (can either be a runtime variable or a compile-time constant)*/
public class Variable implements Symbol {
@ -137,8 +138,8 @@ public class Variable implements Symbol {
* @param memoryArea The memory area (zeropage/main memory)
* @param dataSegment The data segment (in main memory)
*/
public Variable(String name, Scope scope, SymbolType type, Kind kind, MemoryArea memoryArea, String dataSegment) {
this.isConstant = false;
public Variable(boolean isConstant, String name, Scope scope, SymbolType type, Kind kind, MemoryArea memoryArea, String dataSegment) {
this.isConstant = isConstant;
this.name = name;
this.scope = scope;
this.type = type;
@ -160,7 +161,7 @@ public class Variable implements Symbol {
* @param version The version number
*/
public Variable(Variable phiMaster, int version) {
this(phiMaster.getName() + "#" + version, phiMaster.getScope(), phiMaster.getType(), Kind.PHI_VERSION, phiMaster.getMemoryArea(), phiMaster.getDataSegment());
this(false, phiMaster.getName() + "#" + version, phiMaster.getScope(), phiMaster.getType(), Kind.PHI_VERSION, phiMaster.getMemoryArea(), phiMaster.getDataSegment());
this.setDeclaredAlignment(phiMaster.getDeclaredAlignment());
this.setDeclaredAsRegister(phiMaster.isDeclaredAsRegister());
this.setDeclaredNotRegister(phiMaster.isDeclaredAsNotRegister());
@ -182,7 +183,7 @@ public class Variable implements Symbol {
* @param original The original variable
*/
public Variable(String name, Scope scope, Variable original) {
this(name, scope, original.getType(), original.getKind(), original.getMemoryArea(), original.getDataSegment());
this(original.isConstant(), name, scope, original.getType(), original.getKind(), original.getMemoryArea(), original.getDataSegment());
this.setDeclaredAlignment(original.getDeclaredAlignment());
this.setDeclaredAsRegister(original.isDeclaredAsRegister());
this.setDeclaredNotRegister(original.isDeclaredAsNotRegister());
@ -194,6 +195,7 @@ public class Variable implements Symbol {
this.setInferredVolatile(original.isInferredVolatile());
this.setInferredType(original.isInferredType());
this.setComments(original.getComments());
this.setConstantValue(original.getConstantValue());
}
public Kind getKind() {
@ -497,33 +499,18 @@ public class Variable implements Symbol {
@Override
public boolean equals(Object o) {
if(this == o) {
return true;
}
if(o == null || getClass() != o.getClass()) {
return false;
}
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
Variable variable = (Variable) o;
if(name != null ? !name.equals(variable.name) : variable.name != null) {
return false;
}
if(scope != null ? !scope.equals(variable.scope) : variable.scope != null) {
return false;
}
if(type != null ? !type.equals(variable.type) : variable.type != null) {
return false;
}
return asmName != null ? asmName.equals(variable.asmName) : variable.asmName == null;
return kind == variable.kind &&
Objects.equals(name, variable.name) &&
Objects.equals(scope, variable.scope) &&
Objects.equals(type, variable.type);
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + (scope != null ? scope.hashCode() : 0);
result = 31 * result + (type != null ? type.hashCode() : 0);
result = 31 * result + (asmName != null ? asmName.hashCode() : 0);
return result;
return Objects.hash(kind, name, scope, type);
}
}

View File

@ -5,6 +5,8 @@ import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.symbols.ProgramScope;
import dk.camelot64.kickc.model.types.SymbolType;
import java.util.Objects;
/** Constant integer value */
public class ConstantInteger implements ConstantEnumerable<Long> {
@ -67,7 +69,7 @@ public class ConstantInteger implements ConstantEnumerable<Long> {
if(this == o) return true;
if(o == null || getClass() != o.getClass()) return false;
ConstantInteger that = (ConstantInteger) o;
return number != null ? number.equals(that.number) : that.number == null;
return Objects.equals(number, that.number);
}
@Override

View File

@ -4,6 +4,7 @@ import dk.camelot64.kickc.NumberParser;
import dk.camelot64.kickc.SourceLoader;
import dk.camelot64.kickc.asm.AsmClobber;
import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.InternalError;
import dk.camelot64.kickc.model.operators.*;
import dk.camelot64.kickc.model.statements.*;
import dk.camelot64.kickc.model.symbols.*;
@ -266,7 +267,7 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
this.visitDeclTypes(ctx.declTypes());
SymbolType type = declVarType;
List<Directive> directives = declVarDirectives;
Variable param = new Variable(ctx.NAME().getText(), getCurrentScope(), type, Variable.Kind.PHI_MASTER, defaultMemoryArea, currentDataSegment);
Variable param = new Variable(false, ctx.NAME().getText(), getCurrentScope(), type, Variable.Kind.PHI_MASTER, defaultMemoryArea, currentDataSegment);
// Add directives
directiveContext.applyDirectives(param, true, directives, new StatementSource(ctx));
exitDeclTypes();
@ -561,8 +562,13 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
SymbolType type = declVarType;
List<Comment> comments = declVarComments;
KickCParser.ExprContext initializer = ctx.expr();
if(declVarStructMember && initializer != null)
throw new CompileError("Initializers not supported inside structs " + type.getTypeName(), new StatementSource(ctx));
if(declVarStructMember) {
if(initializer != null)
throw new CompileError("Initializers not supported inside structs " + type.getTypeName(), new StatementSource(ctx));
else
// No initializer statements for struct members
return null;
}
if(initializer != null) {
addInitialAssignment(initializer, lValue, comments, new StatementSource(ctx));
} else {
@ -1397,6 +1403,15 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
private void addInitialAssignment(KickCParser.ExprContext initializer, Variable lValue, List<Comment> comments, StatementSource statementSource) {
PrePostModifierHandler.addPreModifiers(this, initializer, statementSource);
RValue rValue = (RValue) visit(initializer);
if(lValue.isDeclaredConst() && rValue instanceof ForwardVariableRef) {
throw new CompileError("Variable used before being defined " + rValue.toString(), statementSource);
}
/*
if(lValue.isDeclaredConst() && !(rValue instanceof ConstantValue)) {
throw new InternalError("RValue is not constant!");
}
*/
if(lValue.isDeclaredConst() && rValue instanceof ConstantValue) {
Scope scope = lValue.getScope();
ConstantValue constantValue = (ConstantValue) rValue;
@ -1674,6 +1689,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
@Override
public Object visitExprAssignment(KickCParser.ExprAssignmentContext ctx) {
Object val = visit(ctx.expr(0));
if(val instanceof ConstantRef) {
throw new CompileError("Error! Constants can not be modified " + val.toString(), new StatementSource(ctx));
}
if(!(val instanceof LValue)) {
throw new CompileError("Error! Illegal assignment Lvalue " + val.toString(), new StatementSource(ctx));
}
@ -2198,6 +2216,9 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor<Objec
List<PrePostModifier> modifiers,
StatementSource source) {
for(PrePostModifier mod : modifiers) {
if(mod.child instanceof ConstantRef) {
throw new CompileError("Constants can not be modified "+mod.child.toString(), source);
}
Statement stmt = new StatementAssignment((LValue) mod.child, mod.operator, copyLValue((LValue) mod.child), source, Comment.NO_COMMENTS);
parser.sequence.addStatement(stmt);
parser.consumeExpr(mod.child);

View File

@ -1,5 +1,7 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.ConstantNotLiteral;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.iterator.ProgramValueIterator;
@ -9,7 +11,12 @@ import dk.camelot64.kickc.model.statements.StatementAssignment;
import dk.camelot64.kickc.model.statements.StatementLValue;
import dk.camelot64.kickc.model.symbols.Procedure;
import dk.camelot64.kickc.model.symbols.Scope;
import dk.camelot64.kickc.model.symbols.StructDefinition;
import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypeConversion;
import dk.camelot64.kickc.model.types.SymbolTypeInference;
import dk.camelot64.kickc.model.types.SymbolTypeIntegerFixed;
import dk.camelot64.kickc.model.values.*;
import java.util.ArrayList;
@ -35,6 +42,9 @@ public class Pass1EarlyConstantIdentification extends Pass1Base {
if(variable.isDeclaredNotConst())
// Skip explicit non-constants
continue;
if(variable.getScope() instanceof StructDefinition)
// Skip structs
continue;
if(!isParameter(variableRef)) {
Collection<StatementLValue> assignments = getAssignments(variable);
if(assignments.size() == 1) {
@ -78,7 +88,40 @@ public class Pass1EarlyConstantIdentification extends Pass1Base {
* @param constantValue The constant value
* @param aliases Aliases where the map from var to const is added
*/
private void convertToConst(Variable variable, ConstantValue constantValue, Statement assignemnt, HashMap<SymbolRef, RValue> aliases) {
private void convertToConst(Variable variable, ConstantValue constantValue, Statement assignment, HashMap<SymbolRef, RValue> aliases) {
// Perform type checking
SymbolType valueType = SymbolTypeInference.inferType(getScope(), constantValue);
SymbolType variableType = variable.getType();
if(!SymbolTypeConversion.assignmentTypeMatch(variableType, valueType) || SymbolType.NUMBER.equals(valueType)) {
boolean typeOk = false;
ConstantLiteral constantLiteral = null;
try {
constantLiteral = constantValue.calculateLiteral(getScope());
} catch(ConstantNotLiteral e) {
// ignore
}
String literalStr = (constantLiteral == null) ? "null" : constantLiteral.toString(getProgram());
if(SymbolType.NUMBER.equals(valueType)) {
if(variableType instanceof SymbolTypeIntegerFixed && constantLiteral instanceof ConstantInteger) {
SymbolTypeIntegerFixed variableTypeInt = (SymbolTypeIntegerFixed) variableType;
ConstantInteger valueInt = (ConstantInteger) constantLiteral;
if(variableTypeInt.contains(valueInt.getInteger())) {
constantValue = new ConstantInteger(valueInt.getInteger(), variableType);
typeOk = true;
}
}
}
if(!typeOk) {
throw new CompileError(
"Constant variable has a non-matching type \n variable: " + variable.toString(getProgram()) +
"\n value: (" + valueType.toString() + ") " + literalStr +
"\n value definition: " + constantValue.toString(getProgram())
);
}
}
// Convert to constant
SymbolVariableRef variableRef = variable.getRef();
Scope scope = variable.getScope();
scope.remove(variable);
@ -94,7 +137,7 @@ public class Pass1EarlyConstantIdentification extends Pass1Base {
constVar.setInferredVolatile(variable.isInferredVolatile());
constVar.setInferredType(variable.isInferredType());
constVar.setComments(variable.getComments());
constVar.getComments().addAll(assignemnt.getComments());
constVar.getComments().addAll(assignment.getComments());
SymbolVariableRef constRef = constVar.getRef();
aliases.put(variableRef, constRef);
scope.add(constVar);

View File

@ -4,10 +4,7 @@ import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.iterator.ProgramValueIterator;
import dk.camelot64.kickc.model.symbols.*;
import dk.camelot64.kickc.model.values.LabelRef;
import dk.camelot64.kickc.model.values.SymbolRef;
import dk.camelot64.kickc.model.values.Value;
import dk.camelot64.kickc.model.values.VariableRef;
import dk.camelot64.kickc.model.values.*;
import java.util.ArrayList;
import java.util.Collection;
@ -36,7 +33,7 @@ public class Pass1UnwindBlockScopes extends Pass1Base {
ProgramValueIterator.execute(getGraph(), (programValue, currentStmt, stmtIt, currentBlock) -> {
Value value = programValue.get();
if(value instanceof VariableRef) {
if(value instanceof SymbolVariableRef) {
SymbolRef unwound = unwoundSymbols.get(value);
if(unwound != null) {
programValue.set(unwound);
@ -73,7 +70,12 @@ public class Pass1UnwindBlockScopes extends Pass1Base {
}
} else if(symbol instanceof Variable) {
Variable variable = (Variable) symbol;
if(variable.isKindPhiMaster() || variable.isKindConstant()) {
if(variable.isConstant()) {
String name = findLocalName(procedure, symbol);
Variable unwound = new Variable(name, procedure, (Variable) symbol);
procedure.add(unwound);
unwoundSymbols.put(symbol.getRef(), unwound.getRef());
} else if(variable.isKindPhiMaster() || variable.isKindConstant()) {
String name = findLocalName(procedure, symbol);
Variable unwound = new Variable(name, procedure, (Variable) symbol);
procedure.add(unwound);

View File

@ -212,7 +212,7 @@ public class Pass1UnwindStructValues extends Pass1Base {
for(Variable member : structDefinition.getAllVariables(false)) {
String name = variable.getLocalName() + "_" + member.getLocalName();
Variable.MemoryArea memoryArea = (member.getType() instanceof SymbolTypePointer)?Variable.MemoryArea.ZEROPAGE_MEMORY:variable.getMemoryArea();
Variable memberVariable = scope.add(new Variable(name, scope, member.getType(), variable.getKind(), memoryArea, variable.getDataSegment()));
Variable memberVariable = scope.add(new Variable( false, name, scope, member.getType(), variable.getKind(), memoryArea, variable.getDataSegment()));
memberVariable.setDeclaredVolatile(variable.isDeclaredVolatile());
memberVariable.setInferredVolatile(variable.isInferredVolatile());
memberVariable.setDeclaredConst(variable.isDeclaredConst());

View File

@ -79,7 +79,7 @@ public class PassNAddInitializerValueListTypeCasts extends Pass2SsaOptimization
if(size!=valueList.getList().size()) {
throw new CompileError(
"Struct initializer has wrong size ("+valueList.getList().size()+"), " +
"which does not match the number of members in "+declaredStructType.getTypeName()+" (\"+size+\" members).\n" +
"which does not match the number of members in "+declaredStructType.getTypeName()+" ("+size+" members).\n" +
" Struct initializer: "+valueList.toString(getProgram()),
currentStmt);
}

View File

@ -34,7 +34,7 @@ SYMBOL TABLE SSA
(label) @2
(label) @begin
(label) @end
(const byte) SZ = (number) $f
(const byte) SZ = (byte) $f
(byte[SZ]) items
(void()) main()
(bool~) main::$0
@ -288,7 +288,7 @@ FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(const byte) SZ = (number) $f
(const byte) SZ = (byte) $f
(const byte[SZ]) items = { fill( SZ, 0) }
(void()) main()
(label) main::@1

View File

@ -1,7 +1,7 @@
(label) @1
(label) @begin
(label) @end
(const byte) SZ = (number) $f
(const byte) SZ = (byte) $f
(const byte[SZ]) items = { fill( SZ, 0) }
(void()) main()
(label) main::@1

View File

@ -55,8 +55,8 @@ SYMBOL TABLE SSA
(label) @2
(label) @begin
(label) @end
(const byte) ITEM_COUNT = (number) 3
(const byte) ITEM_SIZE = (number) 5
(const byte) ITEM_COUNT = (byte) 3
(const byte) ITEM_SIZE = (byte) 5
(byte[$0]) items
(void()) main()
(number~) main::$0
@ -538,8 +538,8 @@ FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(const byte) ITEM_COUNT = (number) 3
(const byte) ITEM_SIZE = (number) 5
(const byte) ITEM_COUNT = (byte) 3
(const byte) ITEM_SIZE = (byte) 5
(const byte[ITEM_COUNT*ITEM_SIZE]) items = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 }
(void()) main()
(byte~) main::$2 reg byte a 202.0

View File

@ -1,8 +1,8 @@
(label) @1
(label) @begin
(label) @end
(const byte) ITEM_COUNT = (number) 3
(const byte) ITEM_SIZE = (number) 5
(const byte) ITEM_COUNT = (byte) 3
(const byte) ITEM_SIZE = (byte) 5
(const byte[ITEM_COUNT*ITEM_SIZE]) items = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 }
(void()) main()
(byte~) main::$2 reg byte a 202.0

View File

@ -47,7 +47,7 @@ SYMBOL TABLE SSA
(void()) main()
(label) main::@1
(label) main::@return
(const byte) main::jmp = (number) 1
(const byte) main::jmp = (byte) 1
Adding number conversion cast (unumber) 1 in *((const byte*) lda + (number) 1) ← (byte) bne::jsr#1
Successful SSA optimization PassNAddNumberTypeConversions
@ -292,7 +292,7 @@ FINAL SYMBOL TABLE
(void()) main()
(label) main::@1
(label) main::@return
(const byte) main::jmp = (number) 1
(const byte) main::jmp = (byte) 1

View File

@ -8,5 +8,5 @@
(void()) main()
(label) main::@1
(label) main::@return
(const byte) main::jmp = (number) 1
(const byte) main::jmp = (byte) 1

View File

@ -165,8 +165,8 @@ SYMBOL TABLE SSA
(label) @3
(label) @begin
(label) @end
(const byte) GREEN = (number) 5
(const byte) RED = (number) 2
(const byte) GREEN = (byte) 5
(const byte) RED = (byte) 2
(const byte*) cols = (byte*)(number) $d800
(void()) main()
(label) main::@1
@ -1281,8 +1281,8 @@ FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(const byte) GREEN = (number) 5
(const byte) RED = (number) 2
(const byte) GREEN = (byte) 5
(const byte) RED = (byte) 2
(const byte*) cols = (byte*) 55296
(void()) main()
(label) main::@1

View File

@ -1,8 +1,8 @@
(label) @1
(label) @begin
(label) @end
(const byte) GREEN = (number) 5
(const byte) RED = (number) 2
(const byte) GREEN = (byte) 5
(const byte) RED = (byte) 2
(const byte*) cols = (byte*) 55296
(void()) main()
(label) main::@1

View File

@ -241,13 +241,13 @@ SYMBOL TABLE SSA
(label) @end
(const byte*) BGCOL = (byte*)(number) $d020
(const byte*) BITMAP = (byte*)(number) $2000
(const byte) BMM = (number) $20
(const byte) BMM = (byte) $20
(const byte*) D011 = (byte*)(number) $d011
(const byte*) D018 = (byte*)(number) $d018
(const byte) DEN = (number) $10
(const byte) DEN = (byte) $10
(const byte*) FGCOL = (byte*)(number) $d021
(const byte*) RASTER = (byte*)(number) $d012
(const byte) RSEL = (number) 8
(const byte) RSEL = (byte) 8
(const byte*) SCREEN = (byte*)(number) $400
(void()) init_plot_tables()
(number~) init_plot_tables::$0
@ -374,7 +374,7 @@ SYMBOL TABLE SSA
(byte) plots::i#2
(byte) plots::i#3
(byte) plots::i#4
(const byte) plots_cnt = (number) 8
(const byte) plots_cnt = (byte) 8
(byte[]) plots_x
(byte[]) plots_y
@ -1976,13 +1976,13 @@ FINAL SYMBOL TABLE
(label) @end
(const byte*) BGCOL = (byte*) 53280
(const byte*) BITMAP = (byte*) 8192
(const byte) BMM = (number) $20
(const byte) BMM = (byte) $20
(const byte*) D011 = (byte*) 53265
(const byte*) D018 = (byte*) 53272
(const byte) DEN = (number) $10
(const byte) DEN = (byte) $10
(const byte*) FGCOL = (byte*) 53281
(const byte*) RASTER = (byte*) 53266
(const byte) RSEL = (number) 8
(const byte) RSEL = (byte) 8
(const byte*) SCREEN = (byte*) 1024
(void()) init_plot_tables()
(byte~) init_plot_tables::$0 reg byte a 22.0
@ -2060,7 +2060,7 @@ FINAL SYMBOL TABLE
(byte) plots::i
(byte) plots::i#1 reg byte x 202.0
(byte) plots::i#2 reg byte x 101.0
(const byte) plots_cnt = (number) 8
(const byte) plots_cnt = (byte) 8
(const byte[]) plots_x = { (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28, (byte) $a, (byte) $28 }
(const byte[]) plots_y = { (byte) $a, (byte) $28, (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28 }

View File

@ -3,13 +3,13 @@
(label) @end
(const byte*) BGCOL = (byte*) 53280
(const byte*) BITMAP = (byte*) 8192
(const byte) BMM = (number) $20
(const byte) BMM = (byte) $20
(const byte*) D011 = (byte*) 53265
(const byte*) D018 = (byte*) 53272
(const byte) DEN = (number) $10
(const byte) DEN = (byte) $10
(const byte*) FGCOL = (byte*) 53281
(const byte*) RASTER = (byte*) 53266
(const byte) RSEL = (number) 8
(const byte) RSEL = (byte) 8
(const byte*) SCREEN = (byte*) 1024
(void()) init_plot_tables()
(byte~) init_plot_tables::$0 reg byte a 22.0
@ -87,7 +87,7 @@
(byte) plots::i
(byte) plots::i#1 reg byte x 202.0
(byte) plots::i#2 reg byte x 101.0
(const byte) plots_cnt = (number) 8
(const byte) plots_cnt = (byte) 8
(const byte[]) plots_x = { (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28, (byte) $a, (byte) $28 }
(const byte[]) plots_y = { (byte) $a, (byte) $28, (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28 }

View File

@ -123,7 +123,7 @@ SYMBOL TABLE SSA
(label) bool_const_inline::@1
(label) bool_const_inline::@3
(label) bool_const_inline::@return
(const byte) bool_const_inline::a = (number) $17
(const byte) bool_const_inline::a = (byte) $17
(void()) bool_const_vars()
(bool~) bool_const_vars::$0
(bool~) bool_const_vars::$1
@ -138,7 +138,7 @@ SYMBOL TABLE SSA
(label) bool_const_vars::@1
(label) bool_const_vars::@3
(label) bool_const_vars::@return
(const byte) bool_const_vars::a = (number) $e
(const byte) bool_const_vars::a = (byte) $e
(bool) bool_const_vars::b
(bool) bool_const_vars::b#0
(bool) bool_const_vars::b1

View File

@ -83,7 +83,7 @@ SYMBOL TABLE SSA
(label) @begin
(label) @end
(const byte[$28*$19]) SCREEN = (byte[$28*$19])(number) $400
(const byte) STAR = (number) $51
(const byte) STAR = (byte) $51
(void()) main()
(byte~) main::$0
(byte~) main::$1
@ -125,8 +125,8 @@ SYMBOL TABLE SSA
(byte) main::x#2
(byte) main::x#3
(byte) main::x#4
(const byte) main::x0 = (number) 4
(const byte) main::x1 = (number) $27
(const byte) main::x0 = (byte) 4
(const byte) main::x1 = (byte) $27
(byte) main::xd
(byte) main::xd#0
(byte) main::xd#1
@ -138,8 +138,8 @@ SYMBOL TABLE SSA
(byte) main::y#2
(byte) main::y#3
(byte) main::y#4
(const byte) main::y0 = (number) 4
(const byte) main::y1 = (number) $18
(const byte) main::y0 = (byte) 4
(const byte) main::y1 = (byte) $18
(byte) main::yd
(byte) main::yd#0
(byte) main::yd#1
@ -661,7 +661,7 @@ FINAL SYMBOL TABLE
(label) @begin
(label) @end
(const byte[$28*$19]) SCREEN = (byte*) 1024
(const byte) STAR = (number) $51
(const byte) STAR = (byte) $51
(void()) main()
(label) main::@1
(label) main::@2
@ -680,16 +680,16 @@ FINAL SYMBOL TABLE
(byte) main::x
(byte) main::x#1 x zp[1]:4 3.666666666666667
(byte) main::x#2 x zp[1]:4 11.0
(const byte) main::x0 = (number) 4
(const byte) main::x1 = (number) $27
(const byte) main::x0 = (byte) 4
(const byte) main::x1 = (byte) $27
(byte) main::xd
(const byte) main::xd#0 xd = (const byte) main::x1-(const byte) main::x0
(byte) main::y
(byte) main::y#1 y zp[1]:5 7.333333333333333
(byte) main::y#2 y zp[1]:5 5.5
(byte) main::y#4 y zp[1]:5 16.5
(const byte) main::y0 = (number) 4
(const byte) main::y1 = (number) $18
(const byte) main::y0 = (byte) 4
(const byte) main::y1 = (byte) $18
(byte) main::yd
(const byte) main::yd#0 yd = (const byte) main::y1-(const byte) main::y0

View File

@ -2,7 +2,7 @@
(label) @begin
(label) @end
(const byte[$28*$19]) SCREEN = (byte*) 1024
(const byte) STAR = (number) $51
(const byte) STAR = (byte) $51
(void()) main()
(label) main::@1
(label) main::@2
@ -21,16 +21,16 @@
(byte) main::x
(byte) main::x#1 x zp[1]:4 3.666666666666667
(byte) main::x#2 x zp[1]:4 11.0
(const byte) main::x0 = (number) 4
(const byte) main::x1 = (number) $27
(const byte) main::x0 = (byte) 4
(const byte) main::x1 = (byte) $27
(byte) main::xd
(const byte) main::xd#0 xd = (const byte) main::x1-(const byte) main::x0
(byte) main::y
(byte) main::y#1 y zp[1]:5 7.333333333333333
(byte) main::y#2 y zp[1]:5 5.5
(byte) main::y#4 y zp[1]:5 16.5
(const byte) main::y0 = (number) 4
(const byte) main::y1 = (number) $18
(const byte) main::y0 = (byte) 4
(const byte) main::y1 = (byte) $18
(byte) main::yd
(const byte) main::yd#0 yd = (const byte) main::y1-(const byte) main::y0

View File

@ -101,7 +101,7 @@ SYMBOL TABLE SSA
(label) main::@2
(label) main::@3
(label) main::@return
(const byte) main::STAR = (number) $51
(const byte) main::STAR = (byte) $51
(byte) main::e
(byte) main::e#0
(byte) main::e#1
@ -123,8 +123,8 @@ SYMBOL TABLE SSA
(byte) main::x#2
(byte) main::x#3
(byte) main::x#4
(const byte) main::x0 = (number) 0
(const byte) main::x1 = (number) $27
(const byte) main::x0 = (byte) 0
(const byte) main::x1 = (byte) $27
(byte) main::xd
(byte) main::xd#0
(byte) main::xd#1
@ -136,8 +136,8 @@ SYMBOL TABLE SSA
(byte) main::y#2
(byte) main::y#3
(byte) main::y#4
(const byte) main::y0 = (number) 0
(const byte) main::y1 = (number) $18
(const byte) main::y0 = (byte) 0
(const byte) main::y1 = (byte) $18
(byte) main::yd
(byte) main::yd#0
(byte) main::yd#1
@ -699,7 +699,7 @@ FINAL SYMBOL TABLE
(label) main::@2
(label) main::@3
(label) main::@return
(const byte) main::STAR = (number) $51
(const byte) main::STAR = (byte) $51
(byte) main::e
(byte) main::e#1 reg byte x 11.0
(byte) main::e#2 reg byte x 22.0
@ -714,15 +714,15 @@ FINAL SYMBOL TABLE
(byte) main::x
(byte) main::x#1 x zp[1]:4 3.666666666666667
(byte) main::x#2 x zp[1]:4 7.333333333333333
(const byte) main::x0 = (number) 0
(const byte) main::x1 = (number) $27
(const byte) main::x0 = (byte) 0
(const byte) main::x1 = (byte) $27
(byte) main::xd
(byte) main::y
(byte) main::y#1 y zp[1]:5 7.333333333333333
(byte) main::y#2 y zp[1]:5 4.714285714285714
(byte) main::y#4 y zp[1]:5 16.5
(const byte) main::y0 = (number) 0
(const byte) main::y1 = (number) $18
(const byte) main::y0 = (byte) 0
(const byte) main::y1 = (byte) $18
(byte) main::yd
zp[2]:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ]

View File

@ -7,7 +7,7 @@
(label) main::@2
(label) main::@3
(label) main::@return
(const byte) main::STAR = (number) $51
(const byte) main::STAR = (byte) $51
(byte) main::e
(byte) main::e#1 reg byte x 11.0
(byte) main::e#2 reg byte x 22.0
@ -22,15 +22,15 @@
(byte) main::x
(byte) main::x#1 x zp[1]:4 3.666666666666667
(byte) main::x#2 x zp[1]:4 7.333333333333333
(const byte) main::x0 = (number) 0
(const byte) main::x1 = (number) $27
(const byte) main::x0 = (byte) 0
(const byte) main::x1 = (byte) $27
(byte) main::xd
(byte) main::y
(byte) main::y#1 y zp[1]:5 7.333333333333333
(byte) main::y#2 y zp[1]:5 4.714285714285714
(byte) main::y#4 y zp[1]:5 16.5
(const byte) main::y0 = (number) 0
(const byte) main::y1 = (number) $18
(const byte) main::y0 = (byte) 0
(const byte) main::y1 = (byte) $18
(byte) main::yd
zp[2]:2 [ main::idx#3 main::idx#5 main::idx#1 main::idx#2 ]

View File

@ -1196,10 +1196,10 @@ SYMBOL TABLE SSA
(label) testChar::@6
(label) testChar::@7
(label) testChar::@return
(const byte) testChar::n = (number) $e
(const signed byte) testChar::s = (number) -$e
(const byte) testChar::n = (byte) $e
(const signed byte) testChar::s = (signed byte) -$e
(const string) testChar::str = (string) "char: "
(const byte) testChar::u = (number) $e
(const byte) testChar::u = (byte) $e
(void()) testInt()
(label) testInt::@1
(label) testInt::@2
@ -1209,10 +1209,10 @@ SYMBOL TABLE SSA
(label) testInt::@6
(label) testInt::@7
(label) testInt::@return
(const signed word) testInt::n = (number) -$578
(const signed word) testInt::s = (number) -$578
(const signed word) testInt::n = (signed word) -$578
(const signed word) testInt::s = (signed word) -$578
(const string) testInt::str = (string) "int: "
(const word) testInt::u = (number) $578
(const word) testInt::u = (word) $578
(void()) testLong()
(label) testLong::@1
(label) testLong::@2
@ -1222,10 +1222,10 @@ SYMBOL TABLE SSA
(label) testLong::@6
(label) testLong::@7
(label) testLong::@return
(const signed dword) testLong::n = (number) -$222e0
(const signed dword) testLong::s = (number) -$222e0
(const signed dword) testLong::n = (signed dword) -$222e0
(const signed dword) testLong::s = (signed dword) -$222e0
(const string) testLong::str = (string) "long: "
(const dword) testLong::u = (number) $222e0
(const dword) testLong::u = (dword) $222e0
(void()) testShort()
(label) testShort::@1
(label) testShort::@2
@ -1235,10 +1235,10 @@ SYMBOL TABLE SSA
(label) testShort::@6
(label) testShort::@7
(label) testShort::@return
(const signed word) testShort::n = (number) -$578
(const signed word) testShort::s = (number) -$578
(const signed word) testShort::n = (signed word) -$578
(const signed word) testShort::s = (signed word) -$578
(const string) testShort::str = (string) "short: "
(const word) testShort::u = (number) $578
(const word) testShort::u = (word) $578
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) 0 in (bool~) print_str::$0 ← (number) 0 != *((byte*) print_str::str#5)
@ -4600,10 +4600,10 @@ FINAL SYMBOL TABLE
(label) testChar::@5
(label) testChar::@6
(label) testChar::@return
(const byte) testChar::n = (number) $e
(const signed byte) testChar::s = (number) -$e
(const byte) testChar::n = (byte) $e
(const signed byte) testChar::s = (signed byte) -$e
(const string) testChar::str = (string) "char: "
(const byte) testChar::u = (number) $e
(const byte) testChar::u = (byte) $e
(void()) testInt()
(label) testInt::@1
(label) testInt::@2
@ -4612,10 +4612,10 @@ FINAL SYMBOL TABLE
(label) testInt::@5
(label) testInt::@6
(label) testInt::@return
(const signed word) testInt::n = (number) -$578
(const signed word) testInt::s = (number) -$578
(const signed word) testInt::n = (signed word) -$578
(const signed word) testInt::s = (signed word) -$578
(const string) testInt::str = (string) "int: "
(const word) testInt::u = (number) $578
(const word) testInt::u = (word) $578
(void()) testLong()
(label) testLong::@1
(label) testLong::@2
@ -4624,10 +4624,10 @@ FINAL SYMBOL TABLE
(label) testLong::@5
(label) testLong::@6
(label) testLong::@return
(const signed dword) testLong::n = (number) -$222e0
(const signed dword) testLong::s = (number) -$222e0
(const signed dword) testLong::n = (signed dword) -$222e0
(const signed dword) testLong::s = (signed dword) -$222e0
(const string) testLong::str = (string) "long: "
(const dword) testLong::u = (number) $222e0
(const dword) testLong::u = (dword) $222e0
(void()) testShort()
(label) testShort::@1
(label) testShort::@2
@ -4636,10 +4636,10 @@ FINAL SYMBOL TABLE
(label) testShort::@5
(label) testShort::@6
(label) testShort::@return
(const signed word) testShort::n = (number) -$578
(const signed word) testShort::s = (number) -$578
(const signed word) testShort::n = (signed word) -$578
(const signed word) testShort::s = (signed word) -$578
(const string) testShort::str = (string) "short: "
(const word) testShort::u = (number) $578
(const word) testShort::u = (word) $578
zp[4]:2 [ print_sdword::dw#5 print_sdword::dw#0 print_sdword::dw#3 print_dword::dw#2 print_dword::dw#0 ]
reg byte a [ print_char::ch#16 print_char::ch#6 print_char::ch#7 ]

View File

@ -121,10 +121,10 @@
(label) testChar::@5
(label) testChar::@6
(label) testChar::@return
(const byte) testChar::n = (number) $e
(const signed byte) testChar::s = (number) -$e
(const byte) testChar::n = (byte) $e
(const signed byte) testChar::s = (signed byte) -$e
(const string) testChar::str = (string) "char: "
(const byte) testChar::u = (number) $e
(const byte) testChar::u = (byte) $e
(void()) testInt()
(label) testInt::@1
(label) testInt::@2
@ -133,10 +133,10 @@
(label) testInt::@5
(label) testInt::@6
(label) testInt::@return
(const signed word) testInt::n = (number) -$578
(const signed word) testInt::s = (number) -$578
(const signed word) testInt::n = (signed word) -$578
(const signed word) testInt::s = (signed word) -$578
(const string) testInt::str = (string) "int: "
(const word) testInt::u = (number) $578
(const word) testInt::u = (word) $578
(void()) testLong()
(label) testLong::@1
(label) testLong::@2
@ -145,10 +145,10 @@
(label) testLong::@5
(label) testLong::@6
(label) testLong::@return
(const signed dword) testLong::n = (number) -$222e0
(const signed dword) testLong::s = (number) -$222e0
(const signed dword) testLong::n = (signed dword) -$222e0
(const signed dword) testLong::s = (signed dword) -$222e0
(const string) testLong::str = (string) "long: "
(const dword) testLong::u = (number) $222e0
(const dword) testLong::u = (dword) $222e0
(void()) testShort()
(label) testShort::@1
(label) testShort::@2
@ -157,10 +157,10 @@
(label) testShort::@5
(label) testShort::@6
(label) testShort::@return
(const signed word) testShort::n = (number) -$578
(const signed word) testShort::s = (number) -$578
(const signed word) testShort::n = (signed word) -$578
(const signed word) testShort::s = (signed word) -$578
(const string) testShort::str = (string) "short: "
(const word) testShort::u = (number) $578
(const word) testShort::u = (word) $578
zp[4]:2 [ print_sdword::dw#5 print_sdword::dw#0 print_sdword::dw#3 print_dword::dw#2 print_dword::dw#0 ]
reg byte a [ print_char::ch#16 print_char::ch#6 print_char::ch#7 ]

View File

@ -4758,7 +4758,7 @@ SYMBOL TABLE SSA
(byte) form_field_ptr::x#0
(byte) form_field_ptr::y
(byte) form_field_ptr::y#0
(const byte) form_fields_cnt = (number) $24
(const byte) form_fields_cnt = (byte) $24
(byte[]) form_fields_max
(byte[]) form_fields_val
(byte[]) form_fields_x
@ -5550,7 +5550,7 @@ SYMBOL TABLE SSA
(byte) gfx_init_vic_bitmap::l#2
(byte) gfx_init_vic_bitmap::l#3
(byte) gfx_init_vic_bitmap::l#4
(const byte) gfx_init_vic_bitmap::lines_cnt = (number) 9
(const byte) gfx_init_vic_bitmap::lines_cnt = (byte) 9
(byte[]) gfx_init_vic_bitmap::lines_x
(byte[]) gfx_init_vic_bitmap::lines_y
(void()) gfx_mode()
@ -28680,7 +28680,7 @@ FINAL SYMBOL TABLE
(byte) form_field_ptr::x#0 x zp[1]:30 33.90000000000003
(byte) form_field_ptr::y
(byte) form_field_ptr::y#0 reg byte a 6.0
(const byte) form_fields_cnt = (number) $24
(const byte) form_fields_cnt = (byte) $24
(const byte[]) form_fields_max = { (byte) $a, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) $d, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $d, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) 3, (byte) 1, (byte) 4, (byte) 1, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f }
(const byte[]) form_fields_val = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 }
(const byte[]) form_fields_x = { (byte) 8, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $25, (byte) $25, (byte) $25, (byte) $25, (byte) $24, (byte) $25, (byte) $24, (byte) $25, (byte) $24, (byte) $25, (byte) $24, (byte) $25 }
@ -29093,7 +29093,7 @@ FINAL SYMBOL TABLE
(byte) gfx_init_vic_bitmap::l
(byte) gfx_init_vic_bitmap::l#1 l zp[1]:8 22.0
(byte) gfx_init_vic_bitmap::l#2 l zp[1]:8 11.0
(const byte) gfx_init_vic_bitmap::lines_cnt = (number) 9
(const byte) gfx_init_vic_bitmap::lines_cnt = (byte) 9
(const byte[]) gfx_init_vic_bitmap::lines_x = { (byte) 0, (byte) $ff, (byte) $ff, (byte) 0, (byte) 0, (byte) $80, (byte) $ff, (byte) $80, (byte) 0, (byte) $80 }
(const byte[]) gfx_init_vic_bitmap::lines_y = { (byte) 0, (byte) 0, (byte) $c7, (byte) $c7, (byte) 0, (byte) 0, (byte) $64, (byte) $c7, (byte) $64, (byte) 0 }
(void()) gfx_mode()

View File

@ -441,7 +441,7 @@
(byte) form_field_ptr::x#0 x zp[1]:30 33.90000000000003
(byte) form_field_ptr::y
(byte) form_field_ptr::y#0 reg byte a 6.0
(const byte) form_fields_cnt = (number) $24
(const byte) form_fields_cnt = (byte) $24
(const byte[]) form_fields_max = { (byte) $a, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) $d, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $d, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) 3, (byte) 1, (byte) 4, (byte) 1, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f, (byte) $f }
(const byte[]) form_fields_val = { (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 }
(const byte[]) form_fields_x = { (byte) 8, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $c, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $18, (byte) $19, (byte) $25, (byte) $25, (byte) $25, (byte) $25, (byte) $24, (byte) $25, (byte) $24, (byte) $25, (byte) $24, (byte) $25, (byte) $24, (byte) $25 }
@ -854,7 +854,7 @@
(byte) gfx_init_vic_bitmap::l
(byte) gfx_init_vic_bitmap::l#1 l zp[1]:8 22.0
(byte) gfx_init_vic_bitmap::l#2 l zp[1]:8 11.0
(const byte) gfx_init_vic_bitmap::lines_cnt = (number) 9
(const byte) gfx_init_vic_bitmap::lines_cnt = (byte) 9
(const byte[]) gfx_init_vic_bitmap::lines_x = { (byte) 0, (byte) $ff, (byte) $ff, (byte) 0, (byte) 0, (byte) $80, (byte) $ff, (byte) $80, (byte) 0, (byte) $80 }
(const byte[]) gfx_init_vic_bitmap::lines_y = { (byte) 0, (byte) 0, (byte) $c7, (byte) $c7, (byte) 0, (byte) 0, (byte) $64, (byte) $c7, (byte) $64, (byte) 0 }
(void()) gfx_mode()

View File

@ -5218,7 +5218,7 @@ SYMBOL TABLE SSA
(byte) mode_stdbitmap::l#2
(byte) mode_stdbitmap::l#3
(byte) mode_stdbitmap::l#4
(const byte) mode_stdbitmap::lines_cnt = (number) 9
(const byte) mode_stdbitmap::lines_cnt = (byte) 9
(byte[]) mode_stdbitmap::lines_x
(byte[]) mode_stdbitmap::lines_y
(void()) mode_stdchar()
@ -26565,7 +26565,7 @@ FINAL SYMBOL TABLE
(byte) mode_stdbitmap::l
(byte) mode_stdbitmap::l#1 l zp[1]:14 202.0
(byte) mode_stdbitmap::l#2 l zp[1]:14 101.0
(const byte) mode_stdbitmap::lines_cnt = (number) 9
(const byte) mode_stdbitmap::lines_cnt = (byte) 9
(const byte[]) mode_stdbitmap::lines_x = { (byte) 0, (byte) $ff, (byte) $ff, (byte) 0, (byte) 0, (byte) $80, (byte) $ff, (byte) $80, (byte) 0, (byte) $80 }
(const byte[]) mode_stdbitmap::lines_y = { (byte) 0, (byte) 0, (byte) $c7, (byte) $c7, (byte) 0, (byte) 0, (byte) $64, (byte) $c7, (byte) $64, (byte) 0 }
(void()) mode_stdchar()

View File

@ -942,7 +942,7 @@
(byte) mode_stdbitmap::l
(byte) mode_stdbitmap::l#1 l zp[1]:14 202.0
(byte) mode_stdbitmap::l#2 l zp[1]:14 101.0
(const byte) mode_stdbitmap::lines_cnt = (number) 9
(const byte) mode_stdbitmap::lines_cnt = (byte) 9
(const byte[]) mode_stdbitmap::lines_x = { (byte) 0, (byte) $ff, (byte) $ff, (byte) 0, (byte) 0, (byte) $80, (byte) $ff, (byte) $80, (byte) 0, (byte) $80 }
(const byte[]) mode_stdbitmap::lines_y = { (byte) 0, (byte) 0, (byte) $c7, (byte) $c7, (byte) 0, (byte) 0, (byte) $64, (byte) $c7, (byte) $64, (byte) 0 }
(void()) mode_stdchar()

View File

@ -90,7 +90,7 @@ SYMBOL TABLE SSA
(label) main::@2
(label) main::@3
(label) main::@return
(const word) main::w = (number) $1234
(const word) main::w = (word) $1234
(void()) print((word) print::w)
(byte~) print::$0
(label) print::@return
@ -517,7 +517,7 @@ FINAL SYMBOL TABLE
(label) main::@1
(label) main::@2
(label) main::@return
(const word) main::w = (number) $1234
(const word) main::w = (word) $1234
(void()) print((word) print::w)
(byte~) print::$0 reg byte a 4.0
(label) print::@return

View File

@ -9,7 +9,7 @@
(label) main::@1
(label) main::@2
(label) main::@return
(const word) main::w = (number) $1234
(const word) main::w = (word) $1234
(void()) print((word) print::w)
(byte~) print::$0 reg byte a 4.0
(label) print::@return

View File

@ -62,12 +62,12 @@ SYMBOL TABLE SSA
(label) main::@return
(const byte*) main::BGCOL = (byte*)(number) $d021
(const byte*) main::SCREEN = (byte*)(number) $400
(const byte) main::max = (number) $c8
(const byte) main::max = (byte) $c8
(byte) main::midb
(byte) main::midb#0
(byte) main::midw
(byte) main::midw#0
(const byte) main::min = (number) $a
(const byte) main::min = (byte) $a
(byte) main::sumb
(byte) main::sumb#0
(word) main::sumw
@ -378,12 +378,12 @@ FINAL SYMBOL TABLE
(label) main::@return
(const byte*) main::BGCOL = (byte*) 53281
(const byte*) main::SCREEN = (byte*) 1024
(const byte) main::max = (number) $c8
(const byte) main::max = (byte) $c8
(byte) main::midb
(const byte) main::midb#0 midb = (const byte) main::sumb#0>>(byte) 1+(byte) 1
(byte) main::midw
(const byte) main::midw#0 midw = (byte)(const word) main::sumw#0>>(byte) 1+(byte) 1
(const byte) main::min = (number) $a
(const byte) main::min = (byte) $a
(byte) main::sumb
(const byte) main::sumb#0 sumb = (const byte) main::min+(const byte) main::max
(word) main::sumw

View File

@ -7,12 +7,12 @@
(label) main::@return
(const byte*) main::BGCOL = (byte*) 53281
(const byte*) main::SCREEN = (byte*) 1024
(const byte) main::max = (number) $c8
(const byte) main::max = (byte) $c8
(byte) main::midb
(const byte) main::midb#0 midb = (const byte) main::sumb#0>>(byte) 1+(byte) 1
(byte) main::midw
(const byte) main::midw#0 midw = (byte)(const word) main::sumw#0>>(byte) 1+(byte) 1
(const byte) main::min = (number) $a
(const byte) main::min = (byte) $a
(byte) main::sumb
(const byte) main::sumb#0 sumb = (const byte) main::min+(const byte) main::max
(word) main::sumw

View File

@ -146,8 +146,8 @@ SYMBOL TABLE SSA
(byte) w::i#0
(byte) w::i#1
(byte) w::i#2
(const word) w::w1 = (number) $514
(const word) w::w2 = (number) $4e2
(const word) w::w1 = (word) $514
(const word) w::w2 = (word) $4e2
Adding number conversion cast (unumber) $28*3 in (byte*~) $0 ← (const byte*) SCREEN + (number) $28*(number) 3
Adding number conversion cast (unumber) $28*6 in (byte*~) $1 ← (const byte*) SCREEN + (number) $28*(number) 6
@ -685,8 +685,8 @@ FINAL SYMBOL TABLE
(byte) w::i
(byte) w::i#1 reg byte y 16.5
(byte) w::i#2 reg byte y 13.75
(const word) w::w1 = (number) $514
(const word) w::w2 = (number) $4e2
(const word) w::w1 = (word) $514
(const word) w::w2 = (word) $4e2
reg byte x [ main::b#2 main::b#1 ]
reg byte y [ w::i#2 w::i#1 ]

View File

@ -29,8 +29,8 @@
(byte) w::i
(byte) w::i#1 reg byte y 16.5
(byte) w::i#2 reg byte y 13.75
(const word) w::w1 = (number) $514
(const word) w::w2 = (number) $4e2
(const word) w::w1 = (word) $514
(const word) w::w2 = (word) $4e2
reg byte x [ main::b#2 main::b#1 ]
reg byte y [ w::i#2 w::i#1 ]

View File

@ -61,9 +61,9 @@ SYMBOL TABLE SSA
(label) @3
(label) @begin
(label) @end
(const byte) BLACK = (number) 0
(const byte) BLACK = (byte) 0
(const byte*) BORDERCOL = (byte*)(number) $d020
(const byte) DARK_GREY = (number) $b
(const byte) DARK_GREY = (byte) $b
(const void()**) KERNEL_IRQ = (void()**)(number) $314
(const byte*) RASTER = (byte*)(number) $d012
interrupt(HARDWARE_CLOBBER)(void()) irq()
@ -482,9 +482,9 @@ FINAL SYMBOL TABLE
(label) @2
(label) @begin
(label) @end
(const byte) BLACK = (number) 0
(const byte) BLACK = (byte) 0
(const byte*) BORDERCOL = (byte*) 53280
(const byte) DARK_GREY = (number) $b
(const byte) DARK_GREY = (byte) $b
(const void()**) KERNEL_IRQ = (void()**) 788
(const byte*) RASTER = (byte*) 53266
interrupt(HARDWARE_CLOBBER)(void()) irq()

View File

@ -2,9 +2,9 @@
(label) @2
(label) @begin
(label) @end
(const byte) BLACK = (number) 0
(const byte) BLACK = (byte) 0
(const byte*) BORDERCOL = (byte*) 53280
(const byte) DARK_GREY = (number) $b
(const byte) DARK_GREY = (byte) $b
(const void()**) KERNEL_IRQ = (void()**) 788
(const byte*) RASTER = (byte*) 53266
interrupt(HARDWARE_CLOBBER)(void()) irq()

View File

@ -29,7 +29,7 @@ SYMBOL TABLE SSA
(number~) main::$0
(label) main::@return
(const byte*) main::SCREEN = (byte*)(number) $400
(const byte) main::b = (number) 3
(const byte) main::b = (byte) 3
(byte) main::c
(byte) main::c#0
@ -207,7 +207,7 @@ FINAL SYMBOL TABLE
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024
(const byte) main::b = (number) 3
(const byte) main::b = (byte) 3
(byte) main::c
(const byte) main::c#0 c = (const byte) main::b+(byte) 1

View File

@ -4,7 +4,7 @@
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024
(const byte) main::b = (number) 3
(const byte) main::b = (byte) 3
(byte) main::c
(const byte) main::c#0 c = (const byte) main::b+(byte) 1

View File

@ -115,18 +115,6 @@ Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition (byte~) processChars::$9
Warning! Adding boolean cast to non-boolean sub-expression (byte) atan2_16::shift
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte) ProcessingChar::x
Identified constant variable (byte) ProcessingChar::y
Identified constant variable (byte) ProcessingChar::dist
Identified constant variable (word) ProcessingSprite::x
Identified constant variable (word) ProcessingSprite::y
Identified constant variable (word) ProcessingSprite::vx
Identified constant variable (word) ProcessingSprite::vy
Identified constant variable (byte) ProcessingSprite::id
Identified constant variable (byte) ProcessingSprite::ptr
Identified constant variable (byte) ProcessingSprite::col
Identified constant variable (byte) ProcessingSprite::status
Identified constant variable (byte*) ProcessingSprite::screenPtr
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
@ -1343,9 +1331,21 @@ SYMBOL TABLE SSA
(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7
(const byte) PROCPORT_RAM_CHARROM = (number) 1
(const byte) PROCPORT_RAM_IO = (number) 5
(byte) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(const byte) ProcessingSprite::$0::STATUS_FREE = (byte) 0
(const byte) ProcessingSprite::$0::STATUS_NEW = (byte) 1
(const byte) ProcessingSprite::$0::STATUS_PROCESSING = (byte) 2
(byte) ProcessingSprite::col
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
@ -4166,6 +4166,18 @@ irqTop::@return: scope:[irqTop] from irqTop::@1
VARIABLE REGISTER WEIGHTS
(byte) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(byte) ProcessingSprite::col
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(byte*) SCREEN_COPY
(void*) SCREEN_COPY#0 0.0273972602739726
(byte*) SCREEN_DIST
@ -10225,6 +10237,18 @@ FINAL SYMBOL TABLE
(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7
(const byte) PROCPORT_RAM_CHARROM = (number) 1
(const byte) PROCPORT_RAM_IO = (number) 5
(byte) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(byte) ProcessingSprite::col
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10

View File

@ -38,6 +38,18 @@
(const byte) PROCPORT_DDR_MEMORY_MASK = (number) 7
(const byte) PROCPORT_RAM_CHARROM = (number) 1
(const byte) PROCPORT_RAM_IO = (number) 5
(byte) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(byte) ProcessingSprite::col
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10

View File

@ -2,13 +2,6 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.const MOVE_TO = 0
.const SPLINE_TO = 1
.const LINE_TO = 2
.const SIZEOF_STRUCT_SPLINEVECTOR16 = 4
.const OFFSET_STRUCT_SPLINEVECTOR16_Y = 2
.const OFFSET_STRUCT_SEGMENT_TO = 1
.const OFFSET_STRUCT_SEGMENT_VIA = 5
.label RASTER = $d012
.label D011 = $d011
.const VIC_BMM = $20
@ -22,6 +15,13 @@
.const WHITE = 1
.label BITMAP_SCREEN = $5c00
.label BITMAP_GRAPHICS = $6000
.const MOVE_TO = 0
.const SPLINE_TO = 1
.const LINE_TO = 2
.const SIZEOF_STRUCT_SPLINEVECTOR16 = 4
.const OFFSET_STRUCT_SPLINEVECTOR16_Y = 2
.const OFFSET_STRUCT_SEGMENT_TO = 1
.const OFFSET_STRUCT_SEGMENT_VIA = 5
.label COS = SIN+$40
main: {
.const vicSelectGfxBank1_toDd001_return = 3^(>BITMAP_SCREEN)/$40

File diff suppressed because it is too large Load Diff

View File

@ -35,10 +35,10 @@
(signed word) SplineVector16::y
(signed dword) SplineVector32::x
(signed dword) SplineVector32::y
(const byte) VIC_BMM = (byte) $20
(const byte) VIC_DEN = (byte) $10
(const byte) VIC_RSEL = (byte) 8
(const byte) WHITE = (byte) 1
(const byte) VIC_BMM = (number) $20
(const byte) VIC_DEN = (number) $10
(const byte) VIC_RSEL = (number) 8
(const byte) WHITE = (number) 1
(word()) abs_u16((word) abs_u16::w)
(byte~) abs_u16::$0 reg byte a 4.0
(byte~) abs_u16::$1 reg byte a 4.0

View File

@ -274,9 +274,9 @@ render_screen_swap: {
}
// Show the current score
render_score: {
.const score_offset = $28*5+$1c
.const lines_offset = $28*1+$16
.const level_offset = $28*$13+$1f
.const score_offset = $e4
.const lines_offset = $3e
.const level_offset = $317
.label score_bytes = score_bcd
.label screen = $24
lda.z render_screen_render
@ -384,7 +384,7 @@ render_bcd: {
// Render the next tetromino in the "next" area
render_next: {
// Find the screen area
.const next_area_offset = $28*$c+$18+4
.const next_area_offset = $1fc
.label next_piece_char = $21
.label next_piece_gfx = $24
.label screen_next_area = $22

View File

@ -6151,7 +6151,7 @@ SYMBOL TABLE SSA
(byte) render_next::l#5
(byte) render_next::l#6
(byte) render_next::l#7
(const word) render_next::next_area_offset = (number) $28*(number) $c+(number) $18+(number) 4
(const word) render_next::next_area_offset = (word) $1fc
(byte) render_next::next_piece_char
(byte) render_next::next_piece_char#0
(byte) render_next::next_piece_char#1
@ -6230,13 +6230,13 @@ SYMBOL TABLE SSA
(label) render_score::@8
(label) render_score::@9
(label) render_score::@return
(const word) render_score::level_offset = (number) $28*(number) $13+(number) $1f
(const word) render_score::lines_offset = (number) $28*(number) 1+(number) $16
(const word) render_score::level_offset = (word) $317
(const word) render_score::lines_offset = (word) $3e
(byte*) render_score::score_bytes
(byte*) render_score::score_bytes#0
(byte*) render_score::score_bytes#1
(byte*) render_score::score_bytes#2
(const word) render_score::score_offset = (number) $28*(number) 5+(number) $1c
(const word) render_score::score_offset = (word) $e4
(byte*) render_score::screen
(byte*) render_score::screen#0
(byte*) render_score::screen#1
@ -6258,7 +6258,7 @@ SYMBOL TABLE SSA
(label) render_screen_original::@6
(label) render_screen_original::@7
(label) render_screen_original::@return
(const byte) render_screen_original::SPACE = (number) 0
(const byte) render_screen_original::SPACE = (byte) 0
(byte*) render_screen_original::cols
(byte*) render_screen_original::cols#0
(byte*) render_screen_original::cols#1
@ -13597,9 +13597,9 @@ render_screen_swap: {
// render_score
// Show the current score
render_score: {
.const score_offset = $28*5+$1c
.const lines_offset = $28*1+$16
.const level_offset = $28*$13+$1f
.const score_offset = $e4
.const lines_offset = $3e
.const level_offset = $317
.label score_bytes = score_bcd
.label screen = 6
// [75] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 -- vbuz1_eq_0_then_la1
@ -13864,7 +13864,7 @@ render_bcd: {
// Render the next tetromino in the "next" area
render_next: {
// Find the screen area
.const next_area_offset = $28*$c+$18+4
.const next_area_offset = $1fc
.label __6 = $83
.label next_piece_char = $84
.label cell = $85
@ -18690,9 +18690,9 @@ render_screen_swap: {
// render_score
// Show the current score
render_score: {
.const score_offset = $28*5+$1c
.const lines_offset = $28*1+$16
.const level_offset = $28*$13+$1f
.const score_offset = $e4
.const lines_offset = $3e
.const level_offset = $317
.label score_bytes = score_bcd
.label screen = $24
// [75] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 -- vbuz1_eq_0_then_la1
@ -18910,7 +18910,7 @@ render_bcd: {
// Render the next tetromino in the "next" area
render_next: {
// Find the screen area
.const next_area_offset = $28*$c+$18+4
.const next_area_offset = $1fc
.label next_piece_char = $21
.label next_piece_gfx = $24
.label screen_next_area = $22
@ -23075,7 +23075,7 @@ FINAL SYMBOL TABLE
(byte) render_next::l
(byte) render_next::l#1 l zp[1]:13 151.5
(byte) render_next::l#7 l zp[1]:13 18.363636363636363
(const word) render_next::next_area_offset = (number) $28*(number) $c+(number) $18+(number) 4
(const word) render_next::next_area_offset = (word) $1fc
(byte) render_next::next_piece_char
(byte) render_next::next_piece_char#0 next_piece_char zp[1]:33 66.86666666666667
(byte*) render_next::next_piece_gfx
@ -23119,11 +23119,11 @@ FINAL SYMBOL TABLE
(label) render_score::@6
(label) render_score::@7
(label) render_score::@return
(const word) render_score::level_offset = (number) $28*(number) $13+(number) $1f
(const word) render_score::lines_offset = (number) $28*(number) 1+(number) $16
(const word) render_score::level_offset = (word) $317
(const word) render_score::lines_offset = (word) $3e
(byte*) render_score::score_bytes
(const byte*) render_score::score_bytes#0 score_bytes = (byte*)&(dword) score_bcd#14
(const word) render_score::score_offset = (number) $28*(number) 5+(number) $1c
(const word) render_score::score_offset = (word) $e4
(byte*) render_score::screen
(byte*) render_score::screen#3 screen zp[2]:36 0.75
(void()) render_screen_original((byte*) render_screen_original::screen)
@ -23133,7 +23133,7 @@ FINAL SYMBOL TABLE
(label) render_screen_original::@4
(label) render_screen_original::@5
(label) render_screen_original::@return
(const byte) render_screen_original::SPACE = (number) 0
(const byte) render_screen_original::SPACE = (byte) 0
(byte*) render_screen_original::cols
(byte*) render_screen_original::cols#1 cols zp[2]:44 101.0
(byte*) render_screen_original::cols#2 cols zp[2]:44 75.75
@ -23901,9 +23901,9 @@ render_screen_swap: {
// render_score
// Show the current score
render_score: {
.const score_offset = $28*5+$1c
.const lines_offset = $28*1+$16
.const level_offset = $28*$13+$1f
.const score_offset = $e4
.const lines_offset = $3e
.const level_offset = $317
.label score_bytes = score_bcd
.label screen = $24
// if(render_screen_render==0)
@ -24109,7 +24109,7 @@ render_bcd: {
// Render the next tetromino in the "next" area
render_next: {
// Find the screen area
.const next_area_offset = $28*$c+$18+4
.const next_area_offset = $1fc
.label next_piece_char = $21
.label next_piece_gfx = $24
.label screen_next_area = $22

View File

@ -750,7 +750,7 @@
(byte) render_next::l
(byte) render_next::l#1 l zp[1]:13 151.5
(byte) render_next::l#7 l zp[1]:13 18.363636363636363
(const word) render_next::next_area_offset = (number) $28*(number) $c+(number) $18+(number) 4
(const word) render_next::next_area_offset = (word) $1fc
(byte) render_next::next_piece_char
(byte) render_next::next_piece_char#0 next_piece_char zp[1]:33 66.86666666666667
(byte*) render_next::next_piece_gfx
@ -794,11 +794,11 @@
(label) render_score::@6
(label) render_score::@7
(label) render_score::@return
(const word) render_score::level_offset = (number) $28*(number) $13+(number) $1f
(const word) render_score::lines_offset = (number) $28*(number) 1+(number) $16
(const word) render_score::level_offset = (word) $317
(const word) render_score::lines_offset = (word) $3e
(byte*) render_score::score_bytes
(const byte*) render_score::score_bytes#0 score_bytes = (byte*)&(dword) score_bcd#14
(const word) render_score::score_offset = (number) $28*(number) 5+(number) $1c
(const word) render_score::score_offset = (word) $e4
(byte*) render_score::screen
(byte*) render_score::screen#3 screen zp[2]:36 0.75
(void()) render_screen_original((byte*) render_screen_original::screen)
@ -808,7 +808,7 @@
(label) render_screen_original::@4
(label) render_screen_original::@5
(label) render_screen_original::@return
(const byte) render_screen_original::SPACE = (number) 0
(const byte) render_screen_original::SPACE = (byte) 0
(byte*) render_screen_original::cols
(byte*) render_screen_original::cols#1 cols zp[2]:44 101.0
(byte*) render_screen_original::cols#2 cols zp[2]:44 75.75

View File

@ -9,6 +9,7 @@ Culled Empty Block (label) memset::@8
Culled Empty Block (label) memset::@9
Culled Empty Block (label) memset::@3
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
@ -24,7 +25,7 @@ Culled Empty Block (label) @6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@4
to:@7
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset] from main main::@17
@ -69,43 +70,32 @@ memset::@return: scope:[memset] from memset::@1
(void*) memset::return#1 ← (void*) memset::return#4
return
to:@return
@4: scope:[] from @begin
(byte*) RASTER ← ((byte*)) (number) $d012
(byte*) VIC_MEMORY ← ((byte*)) (number) $d018
(byte*) SCREEN ← ((byte*)) (number) $400
(byte*) BGCOL ← ((byte*)) (number) $d021
(byte*) COLS ← ((byte*)) (number) $d800
(byte) BLACK ← (number) 0
(byte) WHITE ← (number) 1
(byte[]) MESSAGE ← (const string) $3
to:@7
(void()) main()
main: scope:[main] from @7
*((byte*) VIC_MEMORY) ← (number) $14
(void*) memset::str#0 ← (void*)(byte*) SCREEN
*((const byte*) VIC_MEMORY) ← (number) $14
(void*) memset::str#0 ← (void*)(const byte*) SCREEN
(byte) memset::c#0 ← (byte) ' '
(word) memset::num#0 ← (number) $28*(number) $19
call memset
(void*) memset::return#2 ← (void*) memset::return#1
to:main::@17
main::@17: scope:[main] from main
(void*) memset::str#1 ← (void*)(byte*) COLS
(byte) memset::c#1 ← (byte) WHITE
(void*) memset::str#1 ← (void*)(const byte*) COLS
(byte) memset::c#1 ← (const byte) WHITE
(word) memset::num#1 ← (number) $28*(number) $19
call memset
(void*) memset::return#3 ← (void*) memset::return#1
to:main::@18
main::@18: scope:[main] from main::@17
(byte*~) main::$2 ← (byte*) SCREEN + (number) $28
(byte*) main::sc#0 ← (byte*~) main::$2
(byte*) main::msg#0 ← (byte[]) MESSAGE
(byte*) main::sc#0 ← (const byte*) SCREEN+(number) $28
(byte*) main::msg#0 ← (const byte[]) MESSAGE
to:main::@1
main::@1: scope:[main] from main::@18 main::@2
(byte*) main::sc#3 ← phi( main::@18/(byte*) main::sc#0 main::@2/(byte*) main::sc#1 )
(byte*) main::msg#2 ← phi( main::@18/(byte*) main::msg#0 main::@2/(byte*) main::msg#1 )
(bool~) main::$6 ← (number) 0 != *((byte*) main::msg#2)
if((bool~) main::$6) goto main::@2
(bool~) main::$5 ← (number) 0 != *((byte*) main::msg#2)
if((bool~) main::$5) goto main::@2
to:main::@7
main::@2: scope:[main] from main::@1
(byte*) main::sc#2 ← phi( main::@1/(byte*) main::sc#3 )
@ -118,16 +108,16 @@ main::@7: scope:[main] from main::@1 main::@10 main::@14
if(true) goto main::@8
to:main::@return
main::@8: scope:[main] from main::@7
(bool~) main::$3 ← *((byte*) RASTER) == (number) $36
(bool~) main::$4 ← *((byte*) RASTER) == (number) $42
(bool~) main::$5 ← (bool~) main::$3 || (bool~) main::$4
if((bool~) main::$5) goto main::@10
(bool~) main::$2 ← *((const byte*) RASTER) == (number) $36
(bool~) main::$3 ← *((const byte*) RASTER) == (number) $42
(bool~) main::$4 ← (bool~) main::$2 || (bool~) main::$3
if((bool~) main::$4) goto main::@10
to:main::@14
main::@10: scope:[main] from main::@8
*((byte*) BGCOL) ← (byte) WHITE
*((const byte*) BGCOL) ← (const byte) WHITE
to:main::@7
main::@14: scope:[main] from main::@8
*((byte*) BGCOL) ← (byte) BLACK
*((const byte*) BGCOL) ← (const byte) BLACK
to:main::@7
main::@return: scope:[main] from main::@7
return
@ -135,8 +125,7 @@ main::@return: scope:[main] from main::@7
(void()) syscall1()
syscall1: scope:[syscall1] from
(byte*~) syscall1::$0 ← (byte*) SCREEN + (number) $4f
*((byte*~) syscall1::$0) ← (byte) '>'
*((const byte*) SCREEN+(number) $4f) ← (byte) '>'
to:syscall1::@return
syscall1::@return: scope:[syscall1] from syscall1
return
@ -144,20 +133,17 @@ syscall1::@return: scope:[syscall1] from syscall1
(void()) syscall2()
syscall2: scope:[syscall2] from
(byte*~) syscall2::$0 ← (byte*) SCREEN + (number) $4e
*((byte*~) syscall2::$0) ← (byte) '<'
*((const byte*) SCREEN+(number) $4e) ← (byte) '<'
to:syscall2::@return
syscall2::@return: scope:[syscall2] from syscall2
return
to:@return
@7: scope:[] from @4
(byte) JMP ← (number) $4c
(byte) NOP ← (number) $ea
@7: scope:[] from @begin
(void()*~) $0 ← & (void()) syscall1()
(void()*~) $1 ← & (void()) syscall2()
(struct SysCall[]) SYSCALLS ← { { (byte) JMP, (void()*~) $0, (byte) NOP }, { (byte) JMP, (void()*~) $1, (byte) NOP } }
(struct SysCall[]) SYSCALLS ← { { (const byte) JMP, (void()*~) $0, (const byte) NOP }, { (const byte) JMP, (void()*~) $1, (const byte) NOP } }
(void()*~) $2 ← & (void()) main()
(struct SysCall[]) SYSCALL_RESET ← { { (byte) JMP, (void()*~) $2, (byte) NOP } }
(struct SysCall[]) SYSCALL_RESET ← { { (const byte) JMP, (void()*~) $2, (const byte) NOP } }
call main
to:@8
@8: scope:[] from @7
@ -168,33 +154,30 @@ SYMBOL TABLE SSA
(void()*~) $0
(void()*~) $1
(void()*~) $2
(const string) $3 = (string) "hello world!"
(label) @4
(label) @7
(label) @8
(label) @begin
(label) @end
(byte*) BGCOL
(byte) BLACK
(byte*) COLS
(byte) JMP
(byte[]) MESSAGE
(byte) NOP
(byte*) RASTER
(byte*) SCREEN
(const byte*) BGCOL = (byte*)(number) $d021
(const byte) BLACK = (number) 0
(const byte*) COLS = (byte*)(number) $d800
(const byte) JMP = (number) $4c
(const byte[]) MESSAGE = (string) "hello world!"
(const byte) NOP = (number) $ea
(const byte*) RASTER = (byte*)(number) $d012
(const byte*) SCREEN = (byte*)(number) $400
(struct SysCall[]) SYSCALLS
(struct SysCall[]) SYSCALL_RESET
(void()*) SysCall::syscall
(byte) SysCall::xjmp
(byte) SysCall::xnop
(byte*) VIC_MEMORY
(byte) WHITE
(const byte*) VIC_MEMORY = (byte*)(number) $d018
(const byte) WHITE = (number) 1
(void()) main()
(byte*~) main::$2
(bool~) main::$2
(bool~) main::$3
(bool~) main::$4
(bool~) main::$5
(bool~) main::$6
(label) main::@1
(label) main::@10
(label) main::@14
@ -261,50 +244,33 @@ SYMBOL TABLE SSA
(void*) memset::str#5
(void*) memset::str#6
(void()) syscall1()
(byte*~) syscall1::$0
(label) syscall1::@return
(void()) syscall2()
(byte*~) syscall2::$0
(label) syscall2::@return
Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0
Adding number conversion cast (unumber) 0 in (byte) BLACK ← (number) 0
Adding number conversion cast (unumber) 1 in (byte) WHITE ← (number) 1
Adding number conversion cast (unumber) $14 in *((byte*) VIC_MEMORY) ← (number) $14
Adding number conversion cast (unumber) $14 in *((const byte*) VIC_MEMORY) ← (number) $14
Adding number conversion cast (unumber) $28*$19 in (word) memset::num#0 ← (number) $28*(number) $19
Adding number conversion cast (unumber) $28*$19 in (word) memset::num#1 ← (number) $28*(number) $19
Adding number conversion cast (unumber) $28 in (byte*~) main::$2 ← (byte*) SCREEN + (number) $28
Adding number conversion cast (unumber) 0 in (bool~) main::$6 ← (number) 0 != *((byte*) main::msg#2)
Adding number conversion cast (unumber) $36 in (bool~) main::$3 ← *((byte*) RASTER) == (number) $36
Adding number conversion cast (unumber) $42 in (bool~) main::$4 ← *((byte*) RASTER) == (number) $42
Adding number conversion cast (unumber) $4f in (byte*~) syscall1::$0 ← (byte*) SCREEN + (number) $4f
Adding number conversion cast (unumber) $4e in (byte*~) syscall2::$0 ← (byte*) SCREEN + (number) $4e
Adding number conversion cast (unumber) $4c in (byte) JMP ← (number) $4c
Adding number conversion cast (unumber) $ea in (byte) NOP ← (number) $ea
Adding number conversion cast (unumber) $28 in (byte*) main::sc#0 ← (const byte*) SCREEN+(number) $28
Adding number conversion cast (unumber) 0 in (bool~) main::$5 ← (number) 0 != *((byte*) main::msg#2)
Adding number conversion cast (unumber) $36 in (bool~) main::$2 ← *((const byte*) RASTER) == (number) $36
Adding number conversion cast (unumber) $42 in (bool~) main::$3 ← *((const byte*) RASTER) == (number) $42
Adding number conversion cast (unumber) $4f in *((const byte*) SCREEN+(number) $4f) ← (byte) '>'
Adding number conversion cast (unumber) $4e in *((const byte*) SCREEN+(number) $4e) ← (byte) '<'
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#3
Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3
Inlining cast (byte*) RASTER ← (byte*)(number) $d012
Inlining cast (byte*) VIC_MEMORY ← (byte*)(number) $d018
Inlining cast (byte*) SCREEN ← (byte*)(number) $400
Inlining cast (byte*) BGCOL ← (byte*)(number) $d021
Inlining cast (byte*) COLS ← (byte*)(number) $d800
Inlining cast (byte) BLACK ← (unumber)(number) 0
Inlining cast (byte) WHITE ← (unumber)(number) 1
Inlining cast *((byte*) VIC_MEMORY) ← (unumber)(number) $14
Inlining cast *((const byte*) VIC_MEMORY) ← (unumber)(number) $14
Inlining cast (word) memset::num#0 ← (unumber)(number) $28*(number) $19
Inlining cast (word) memset::num#1 ← (unumber)(number) $28*(number) $19
Inlining cast (byte) JMP ← (unumber)(number) $4c
Inlining cast (byte) NOP ← (unumber)(number) $ea
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 53266
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (byte*) 53281
Simplifying constant pointer cast (byte*) 55296
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast $14
Simplifying constant integer cast $28
Simplifying constant integer cast 0
@ -312,12 +278,8 @@ Simplifying constant integer cast $36
Simplifying constant integer cast $42
Simplifying constant integer cast $4f
Simplifying constant integer cast $4e
Simplifying constant integer cast $4c
Simplifying constant integer cast $ea
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $14
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 0
@ -325,8 +287,6 @@ Finalized unsigned number type (byte) $36
Finalized unsigned number type (byte) $42
Finalized unsigned number type (byte) $4f
Finalized unsigned number type (byte) $4e
Finalized unsigned number type (byte) $4c
Finalized unsigned number type (byte) $ea
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0
Successful SSA optimization Pass2UnaryNotSimplification
@ -339,7 +299,6 @@ Alias (byte) memset::c#2 = (byte) memset::c#3
Alias (byte*) memset::dst#2 = (byte*) memset::dst#3
Alias (byte*) memset::end#1 = (byte*) memset::end#2
Alias (void*) memset::str#5 = (void*) memset::str#6
Alias (byte*) main::sc#0 = (byte*~) main::$2
Alias (byte*) main::msg#2 = (byte*) main::msg#3
Alias (byte*) main::sc#2 = (byte*) main::sc#3
Successful SSA optimization Pass2AliasElimination
@ -351,55 +310,38 @@ Identical Phi Values (void*) memset::return#0 (void*) memset::str#3
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#2<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [13] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) main::$6 [44] if((byte) 0!=*((byte*) main::msg#2)) goto main::@2
Simple Condition (bool~) main::$5 [35] if((byte) 0!=*((byte*) main::msg#2)) goto main::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting || if()-condition to two if()s [52] (bool~) main::$5 ← (bool~) main::$3 || (bool~) main::$4
Rewriting || if()-condition to two if()s [43] (bool~) main::$4 ← (bool~) main::$2 || (bool~) main::$3
Successful SSA optimization Pass2ConditionalAndOrRewriting
Constant right-side identified [31] (word) memset::num#0 ← (unumber)(number) $28*(number) $19
Constant right-side identified [36] (word) memset::num#1 ← (unumber)(number) $28*(number) $19
Constant right-side identified [65] (void()*~) $0 ← & (void()) syscall1()
Constant right-side identified [66] (void()*~) $1 ← & (void()) syscall2()
Constant right-side identified [68] (void()*~) $2 ← & (void()) main()
Constant right-side identified [23] (word) memset::num#0 ← (unumber)(number) $28*(number) $19
Constant right-side identified [28] (word) memset::num#1 ← (unumber)(number) $28*(number) $19
Constant right-side identified [52] (void()*~) $0 ← & (void()) syscall1()
Constant right-side identified [53] (void()*~) $1 ← & (void()) syscall2()
Constant right-side identified [55] (void()*~) $2 ← & (void()) main()
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) RASTER = (byte*) 53266
Constant (const byte*) VIC_MEMORY = (byte*) 53272
Constant (const byte*) SCREEN = (byte*) 1024
Constant (const byte*) BGCOL = (byte*) 53281
Constant (const byte*) COLS = (byte*) 55296
Constant (const byte) BLACK = 0
Constant (const byte) WHITE = 1
Constant (const byte[]) MESSAGE = $3
Constant (const void*) memset::str#0 = (void*)SCREEN
Constant (const byte) memset::c#0 = ' '
Constant (const word) memset::num#0 = (unumber)$28*$19
Constant (const void*) memset::str#1 = (void*)COLS
Constant (const byte) memset::c#1 = WHITE
Constant (const word) memset::num#1 = (unumber)$28*$19
Constant (const byte) JMP = $4c
Constant (const byte) NOP = $ea
Constant (const byte*) main::sc#0 = SCREEN+$28
Constant (const byte*) main::msg#0 = MESSAGE
Constant (const void()*) $0 = &syscall1
Constant (const void()*) $1 = &syscall2
Constant (const void()*) $2 = &main
Successful SSA optimization Pass2ConstantIdentification
Constant (const void*) memset::str#0 = (void*)SCREEN
Constant (const void*) memset::str#1 = (void*)COLS
Constant (const byte) memset::c#1 = WHITE
Constant (const byte*) main::msg#0 = MESSAGE
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [49] if(true) goto main::@8
if() condition always true - replacing block destination [40] if(true) goto main::@8
Successful SSA optimization Pass2ConstantIfs
Converting *(pointer+n) to pointer[n] [58] *((byte*~) syscall1::$0) ← (byte) '>' -- *(SCREEN + $4f)
Converting *(pointer+n) to pointer[n] [61] *((byte*~) syscall2::$0) ← (byte) '<' -- *(SCREEN + $4e)
Successful SSA optimization Pass2InlineDerefIdx
Eliminating unused variable (void*) memset::return#2 and assignment [12] (void*) memset::return#2 ← (void*) memset::str#3
Eliminating unused variable (void*) memset::return#3 and assignment [14] (void*) memset::return#3 ← (void*) memset::str#3
Eliminating unused variable (byte*~) syscall1::$0 and assignment [27] (byte*~) syscall1::$0 ← (const byte*) SCREEN + (byte) $4f
Eliminating unused variable (byte*~) syscall2::$0 and assignment [30] (byte*~) syscall2::$0 ← (const byte*) SCREEN + (byte) $4e
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Simple Condition (bool~) main::$3 [21] if(*((const byte*) RASTER)==(byte) $36) goto main::@10
Simple Condition (bool~) main::$4 [31] if(*((const byte*) RASTER)==(byte) $42) goto main::@10
Simple Condition (bool~) main::$2 [20] if(*((const byte*) RASTER)==(byte) $36) goto main::@10
Simple Condition (bool~) main::$3 [30] if(*((const byte*) RASTER)==(byte) $42) goto main::@10
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [13] (byte*) main::sc#0 ← (const byte*) SCREEN + (byte) $28
Successful SSA optimization Pass2ConstantRValueConsolidation
Identified constant from value list (struct SysCall) { xjmp: (const byte) JMP, syscall: (const void()*) $0, xnop: (const byte) NOP }
Identified constant from value list (struct SysCall) { xjmp: (const byte) JMP, syscall: (const void()*) $1, xnop: (const byte) NOP }
Identified constant from value list (struct SysCall) { xjmp: (const byte) JMP, syscall: (const void()*) $2, xnop: (const byte) NOP }
@ -407,21 +349,20 @@ Successful SSA optimization Pass2ConstantInitializerValueLists
Identified constant from value list (struct SysCall[]) { { xjmp: (const byte) JMP, syscall: (const void()*) $0, xnop: (const byte) NOP }, { xjmp: (const byte) JMP, syscall: (const void()*) $1, xnop: (const byte) NOP } }
Identified constant from value list (struct SysCall[]) { { xjmp: (const byte) JMP, syscall: (const void()*) $2, xnop: (const byte) NOP } }
Successful SSA optimization Pass2ConstantInitializerValueLists
Constant (const byte*) main::sc#0 = SCREEN+$28
Constant (const struct SysCall[]) SYSCALLS = { { xjmp: JMP, syscall: $0, xnop: NOP }, { xjmp: JMP, syscall: $1, xnop: NOP } }
Constant (const struct SysCall[]) SYSCALL_RESET = { { xjmp: JMP, syscall: $2, xnop: NOP } }
Successful SSA optimization Pass2ConstantIdentification
Inlining Noop Cast [2] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 keeping memset::str#3
Inlining Noop Cast [4] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3
Successful SSA optimization Pass2NopCastInlining
Inlining constant with var siblings (const void*) memset::str#0
Inlining constant with var siblings (const byte) memset::c#0
Inlining constant with var siblings (const word) memset::num#0
Inlining constant with var siblings (const word) memset::num#1
Inlining constant with var siblings (const void*) memset::str#0
Inlining constant with var siblings (const void*) memset::str#1
Inlining constant with var siblings (const byte) memset::c#1
Inlining constant with var siblings (const byte*) main::msg#0
Inlining constant with var siblings (const word) memset::num#1
Inlining constant with var siblings (const byte*) main::sc#0
Inlining constant with var siblings (const byte*) main::msg#0
Constant inlined memset::str#1 = (void*)(const byte*) COLS
Constant inlined memset::str#0 = (void*)(const byte*) SCREEN
Constant inlined main::msg#0 = (const byte[]) MESSAGE
@ -433,13 +374,8 @@ Constant inlined memset::c#1 = (const byte) WHITE
Constant inlined $0 = &(void()) syscall1()
Constant inlined $1 = &(void()) syscall2()
Constant inlined $2 = &(void()) main()
Constant inlined $3 = (const byte[]) MESSAGE
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in *(SCREEN+$4f)
Consolidated array index constant in *(SCREEN+$4e)
Successful SSA optimization Pass2ConstantAdditionElimination
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @4
Adding NOP phi() at start of @7
Adding NOP phi() at start of @8
Adding NOP phi() at start of @end
@ -448,15 +384,14 @@ Adding NOP phi() at start of main::@18
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of memset::@1
CALL GRAPH
Calls in [] to main:3
Calls in [main] to memset:7 memset:9
Calls in [] to main:2
Calls in [main] to memset:6 memset:8
Created 6 initial phi equivalence classes
Coalesced [21] main::msg#4 ← main::msg#1
Coalesced [22] main::sc#4 ← main::sc#1
Coalesced [33] memset::dst#5 ← memset::dst#1
Coalesced [20] main::msg#4 ← main::msg#1
Coalesced [21] main::sc#4 ← main::sc#1
Coalesced [32] memset::dst#5 ← memset::dst#1
Coalesced down to 6 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) @8
Culled Empty Block (label) main::@18
Culled Empty Block (label) main::@7
@ -1219,11 +1154,11 @@ FINAL SYMBOL TABLE
(label) @begin
(label) @end
(const byte*) BGCOL = (byte*) 53281
(const byte) BLACK = (byte) 0
(const byte) BLACK = (number) 0
(const byte*) COLS = (byte*) 55296
(const byte) JMP = (byte) $4c
(const byte) JMP = (number) $4c
(const byte[]) MESSAGE = (string) "hello world!"
(const byte) NOP = (byte) $ea
(const byte) NOP = (number) $ea
(const byte*) RASTER = (byte*) 53266
(const byte*) SCREEN = (byte*) 1024
(const struct SysCall[]) SYSCALLS = { { xjmp: (const byte) JMP, syscall: &(void()) syscall1(), xnop: (const byte) NOP }, { xjmp: (const byte) JMP, syscall: &(void()) syscall2(), xnop: (const byte) NOP } }
@ -1232,7 +1167,7 @@ FINAL SYMBOL TABLE
(byte) SysCall::xjmp
(byte) SysCall::xnop
(const byte*) VIC_MEMORY = (byte*) 53272
(const byte) WHITE = (byte) 1
(const byte) WHITE = (number) 1
(void()) main()
(label) main::@1
(label) main::@2

View File

@ -2,11 +2,11 @@
(label) @begin
(label) @end
(const byte*) BGCOL = (byte*) 53281
(const byte) BLACK = (byte) 0
(const byte) BLACK = (number) 0
(const byte*) COLS = (byte*) 55296
(const byte) JMP = (byte) $4c
(const byte) JMP = (number) $4c
(const byte[]) MESSAGE = (string) "hello world!"
(const byte) NOP = (byte) $ea
(const byte) NOP = (number) $ea
(const byte*) RASTER = (byte*) 53266
(const byte*) SCREEN = (byte*) 1024
(const struct SysCall[]) SYSCALLS = { { xjmp: (const byte) JMP, syscall: &(void()) syscall1(), xnop: (const byte) NOP }, { xjmp: (const byte) JMP, syscall: &(void()) syscall2(), xnop: (const byte) NOP } }
@ -15,7 +15,7 @@
(byte) SysCall::xjmp
(byte) SysCall::xnop
(const byte*) VIC_MEMORY = (byte*) 53272
(const byte) WHITE = (byte) 1
(const byte) WHITE = (number) 1
(void()) main()
(label) main::@1
(label) main::@2

View File

@ -36,7 +36,7 @@ SYMBOL TABLE SSA
(bool~) main::$1
(label) main::@2
(label) main::@return
(const byte) main::b = (number) $c
(const byte) main::b = (byte) $c
(const byte*) main::screen = (byte*)(number) $400
Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (number) 0 != (const byte) main::b

View File

@ -41,7 +41,7 @@ SYMBOL TABLE SSA
(bool~) main::$1
(label) main::@1
(label) main::@return
(const byte) main::BLACK = (number) 0
(const byte) main::BLACK = (byte) 0
(const byte*) main::cols = (byte*)(number) $d800
(const byte*) main::screen = (byte*)(number) $400
(byte) main::x
@ -324,7 +324,7 @@ FINAL SYMBOL TABLE
(void()) main()
(label) main::@1
(label) main::@return
(const byte) main::BLACK = (number) 0
(const byte) main::BLACK = (byte) 0
(const byte*) main::cols = (byte*) 55296
(const byte*) main::screen = (byte*) 1024
(byte) main::x

View File

@ -4,7 +4,7 @@
(void()) main()
(label) main::@1
(label) main::@return
(const byte) main::BLACK = (number) 0
(const byte) main::BLACK = (byte) 0
(const byte*) main::cols = (byte*) 55296
(const byte*) main::screen = (byte*) 1024
(byte) main::x

View File

@ -3,7 +3,7 @@
:BasicUpstart(main)
.pc = $80d "Program"
main: {
.const b = 6*$e/3+mod($16,3)
.const b = $19
.label screen = $400
lda #b
sta screen

View File

@ -26,7 +26,7 @@ SYMBOL TABLE SSA
(label) @end
(void()) main()
(label) main::@return
(const byte) main::b = (number) 6*(number) $e/(number) 3+(number) $16%(number) 3
(const byte) main::b = (byte) $19
(const byte*) main::screen = (byte*)(number) $400
Adding number conversion cast (unumber) 0 in *((const byte*) main::screen + (number) 0) ← (const byte) main::b
@ -103,7 +103,7 @@ __bend_from___b1:
__bend:
// main
main: {
.const b = 6*$e/3+mod($16,3)
.const b = $19
.label screen = $400
// [4] *((const byte*) main::screen) ← (const byte) main::b -- _deref_pbuc1=vbuc2
lda #b
@ -150,7 +150,7 @@ __bend_from___b1:
__bend:
// main
main: {
.const b = 6*$e/3+mod($16,3)
.const b = $19
.label screen = $400
// [4] *((const byte*) main::screen) ← (const byte) main::b -- _deref_pbuc1=vbuc2
lda #b
@ -188,7 +188,7 @@ FINAL SYMBOL TABLE
(label) @end
(void()) main()
(label) main::@return
(const byte) main::b = (number) 6*(number) $e/(number) 3+(number) $16%(number) 3
(const byte) main::b = (byte) $19
(const byte*) main::screen = (byte*) 1024
@ -211,7 +211,7 @@ Score: 12
// @end
// main
main: {
.const b = 6*$e/3+mod($16,3)
.const b = $19
.label screen = $400
// screen[0] = b
// [4] *((const byte*) main::screen) ← (const byte) main::b -- _deref_pbuc1=vbuc2

View File

@ -3,6 +3,6 @@
(label) @end
(void()) main()
(label) main::@return
(const byte) main::b = (number) 6*(number) $e/(number) 3+(number) $16%(number) 3
(const byte) main::b = (byte) $19
(const byte*) main::screen = (byte*) 1024

View File

@ -45,7 +45,7 @@ SYMBOL TABLE SSA
(byte*) BGCOL#0
(byte*) BGCOL#1
(byte*) BGCOL#2
(const byte) RED = (number) 2
(const byte) RED = (byte) 2
(const byte*) SCREEN = (byte*)(number) $400
(const byte) STAR = (number) $51
(const byte*) VIC = (byte*)(number) $d000
@ -332,7 +332,7 @@ FINAL SYMBOL TABLE
(label) @begin
(label) @end
(byte*) BGCOL
(const byte) RED = (number) 2
(const byte) RED = (byte) 2
(const byte*) SCREEN = (byte*) 1024
(const byte) STAR = (number) $51
(const byte*) VIC = (byte*) 53248

View File

@ -2,7 +2,7 @@
(label) @begin
(label) @end
(byte*) BGCOL
(const byte) RED = (number) 2
(const byte) RED = (byte) 2
(const byte*) SCREEN = (byte*) 1024
(const byte) STAR = (number) $51
(const byte*) VIC = (byte*) 53248

View File

@ -824,7 +824,7 @@ SYMBOL TABLE SSA
(label) test_bytes::@2
(label) test_bytes::@3
(label) test_bytes::@return
(const byte) test_bytes::bb = (number) 0
(const byte) test_bytes::bb = (byte) 0
(byte) test_bytes::bc
(byte) test_bytes::bc#0
(byte) test_bytes::bc#1
@ -844,7 +844,7 @@ SYMBOL TABLE SSA
(label) test_sbytes::@4
(label) test_sbytes::@5
(label) test_sbytes::@return
(const signed byte) test_sbytes::bb = (number) 0
(const signed byte) test_sbytes::bb = (signed byte) 0
(signed byte) test_sbytes::bc
(signed byte) test_sbytes::bc#0
(signed byte) test_sbytes::bc#1
@ -3066,7 +3066,7 @@ FINAL SYMBOL TABLE
(label) test_bytes::@1
(label) test_bytes::@2
(label) test_bytes::@return
(const byte) test_bytes::bb = (number) 0
(const byte) test_bytes::bb = (byte) 0
(byte) test_bytes::bc
(const byte) test_bytes::bc#0 bc = (byte) 2
(byte) test_bytes::bd
@ -3078,7 +3078,7 @@ FINAL SYMBOL TABLE
(label) test_sbytes::@3
(label) test_sbytes::@4
(label) test_sbytes::@return
(const signed byte) test_sbytes::bb = (number) 0
(const signed byte) test_sbytes::bb = (signed byte) 0
(signed byte) test_sbytes::bc
(const signed byte) test_sbytes::bc#0 bc = (signed byte) 2
(signed byte) test_sbytes::bd

View File

@ -92,7 +92,7 @@
(label) test_bytes::@1
(label) test_bytes::@2
(label) test_bytes::@return
(const byte) test_bytes::bb = (number) 0
(const byte) test_bytes::bb = (byte) 0
(byte) test_bytes::bc
(const byte) test_bytes::bc#0 bc = (byte) 2
(byte) test_bytes::bd
@ -104,7 +104,7 @@
(label) test_sbytes::@3
(label) test_sbytes::@4
(label) test_sbytes::@return
(const signed byte) test_sbytes::bb = (number) 0
(const signed byte) test_sbytes::bb = (signed byte) 0
(signed byte) test_sbytes::bc
(const signed byte) test_sbytes::bc#0 bc = (signed byte) 2
(signed byte) test_sbytes::bd

View File

@ -6,8 +6,6 @@ Adding struct value list initializer (byte) bar_thing1 ← (byte) 'a'
Adding struct value list initializer (byte) bar_thing2 ← (byte) 'b'
Rewriting struct pointer member access *((struct foo*) main::barp).thing1
Rewriting struct pointer member access *((struct foo*) main::barp).thing2
Identified constant variable (byte) foo::thing1
Identified constant variable (byte) foo::thing2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -48,6 +46,8 @@ SYMBOL TABLE SSA
(struct foo) bar notregister
(byte) bar_thing1 notregister
(byte) bar_thing2 notregister
(byte) foo::thing1
(byte) foo::thing2
(void()) main()
(struct foo*~) main::$0
(byte*) main::$1
@ -144,6 +144,8 @@ main::@return: scope:[main] from main
VARIABLE REGISTER WEIGHTS
(byte) bar_thing1 notregister 20.0
(byte) bar_thing2 notregister 20.0
(byte) foo::thing1
(byte) foo::thing2
(void()) main()
(struct foo*) main::barp
(byte) main::i
@ -301,6 +303,8 @@ FINAL SYMBOL TABLE
(const byte) OFFSET_STRUCT_FOO_THING2 = (byte) 1
(byte) bar_thing1 notregister mem[1] 20.0
(byte) bar_thing2 notregister mem[1] 20.0
(byte) foo::thing1
(byte) foo::thing2
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024

View File

@ -4,6 +4,8 @@
(const byte) OFFSET_STRUCT_FOO_THING2 = (byte) 1
(byte) bar_thing1 notregister mem[1] 20.0
(byte) bar_thing2 notregister mem[1] 20.0
(byte) foo::thing1
(byte) foo::thing2
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024

View File

@ -11,8 +11,6 @@ Adding struct value list initializer (byte[$c]) bar_thing3 ← (string) "qwe"
Rewriting struct pointer member access *((struct foo*) main::barp).thing1
Rewriting struct pointer member access *((struct foo*) main::barp).thing2
Rewriting struct pointer member access *((struct foo*) main::barp).thing3
Identified constant variable (byte) foo::thing1
Identified constant variable (byte) foo::thing2
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@ -70,6 +68,9 @@ SYMBOL TABLE SSA
(byte) bar_thing1 notregister
(byte) bar_thing2 notregister
(byte[$c]) bar_thing3 notregister
(byte) foo::thing1
(byte) foo::thing2
(byte[$c]) foo::thing3
(void()) main()
(struct foo*~) main::$0
(bool~) main::$1
@ -217,6 +218,9 @@ VARIABLE REGISTER WEIGHTS
(byte) bar_thing1 notregister 20.0
(byte) bar_thing2 notregister 20.0
(byte[$c]) bar_thing3 notregister 20.0
(byte) foo::thing1
(byte) foo::thing2
(byte[$c]) foo::thing3
(void()) main()
(struct foo*) main::barp
(byte) main::i
@ -484,6 +488,9 @@ FINAL SYMBOL TABLE
(byte) bar_thing1 notregister mem[1] 20.0
(byte) bar_thing2 notregister mem[1] 20.0
(byte[$c]) bar_thing3 notregister zp[2]:2 20.0
(byte) foo::thing1
(byte) foo::thing2
(byte[$c]) foo::thing3
(void()) main()
(label) main::@1
(label) main::@return

View File

@ -7,6 +7,9 @@
(byte) bar_thing1 notregister mem[1] 20.0
(byte) bar_thing2 notregister mem[1] 20.0
(byte[$c]) bar_thing3 notregister zp[2]:2 20.0
(byte) foo::thing1
(byte) foo::thing2
(byte[$c]) foo::thing3
(void()) main()
(label) main::@1
(label) main::@return

View File

@ -5,8 +5,6 @@ Adding struct value list initializer (byte) bar_thing1 ← (byte) 'a'
Adding struct value list initializer (byte) bar_thing2 ← (byte) 'b'
Replacing struct member reference (struct foo) bar.thing1 with member unwinding reference (byte) bar_thing1
Replacing struct member reference (struct foo) bar.thing2 with member unwinding reference (byte) bar_thing2
Identified constant variable (byte) foo::thing1
Identified constant variable (byte) foo::thing2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -39,6 +37,8 @@ SYMBOL TABLE SSA
(label) @end
(byte) bar_thing1 notregister
(byte) bar_thing2 notregister
(byte) foo::thing1
(byte) foo::thing2
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*)(number) $400
@ -112,6 +112,8 @@ main::@return: scope:[main] from main
VARIABLE REGISTER WEIGHTS
(byte) bar_thing1 notregister 1.3333333333333333
(byte) bar_thing2 notregister 1.3333333333333333
(byte) foo::thing1
(byte) foo::thing2
(void()) main()
(byte) main::i
@ -263,6 +265,8 @@ FINAL SYMBOL TABLE
(label) @end
(byte) bar_thing1 notregister mem[1] 1.3333333333333333
(byte) bar_thing2 notregister mem[1] 1.3333333333333333
(byte) foo::thing1
(byte) foo::thing2
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024

View File

@ -3,6 +3,8 @@
(label) @end
(byte) bar_thing1 notregister mem[1] 1.3333333333333333
(byte) bar_thing2 notregister mem[1] 1.3333333333333333
(byte) foo::thing1
(byte) foo::thing2
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024

View File

@ -2,8 +2,8 @@
:BasicUpstart(main)
.pc = $80d "Program"
main: {
.const a = $ee6b2800
.label SCREEN = $400
.const a = $ee6b2800
.label b = 2
ldx #0
__b1:

View File

@ -7,17 +7,15 @@ CONTROL FLOW GRAPH SSA
(void()) main()
main: scope:[main] from @1
(dword) main::a ← (number) $ee6b2800
(byte) main::i#0 ← (byte) 0
to:main::@1
main::@1: scope:[main] from main main::@1
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
(dword~) main::$0 ← (dword) main::a + (byte) main::i#2
(dword~) main::$0 ← (const dword) main::a + (byte) main::i#2
(dword) main::b#0 ← (dword~) main::$0
(byte~) main::$1 ← ((byte)) (dword) main::b#0
(byte) main::c#0 ← (byte~) main::$1
(byte*) main::SCREEN ← ((byte*)) (number) $400
*((byte*) main::SCREEN + (byte) main::i#2) ← (byte) main::c#0
*((const byte*) main::SCREEN + (byte) main::i#2) ← (byte) main::c#0
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,$64)
(bool~) main::$2 ← (byte) main::i#1 != rangelast(0,$64)
if((bool~) main::$2) goto main::@1
@ -43,8 +41,8 @@ SYMBOL TABLE SSA
(bool~) main::$2
(label) main::@1
(label) main::@return
(byte*) main::SCREEN
(dword) main::a
(const byte*) main::SCREEN = (byte*)(number) $400
(const dword) main::a = (dword) $ee6b2800
(dword) main::b
(dword) main::b#0
(byte) main::c
@ -54,28 +52,19 @@ SYMBOL TABLE SSA
(byte) main::i#1
(byte) main::i#2
Adding number conversion cast (unumber) $ee6b2800 in (dword) main::a ← (number) $ee6b2800
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (dword) main::a ← (unumber)(number) $ee6b2800
Inlining cast (byte~) main::$1 ← (byte)(dword) main::b#0
Inlining cast (byte*) main::SCREEN ← (byte*)(number) $400
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast $ee6b2800
Simplifying constant pointer cast (byte*) 1024
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (dword) $ee6b2800
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (dword) main::b#0 = (dword~) main::$0
Alias (byte) main::c#0 = (byte~) main::$1
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) main::$2 [11] if((byte) main::i#1!=rangelast(0,$64)) goto main::@1
Simple Condition (bool~) main::$2 [9] if((byte) main::i#1!=rangelast(0,$64)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const dword) main::a = $ee6b2800
Constant (const byte) main::i#0 = 0
Constant (const byte*) main::SCREEN = (byte*) 1024
Successful SSA optimization Pass2ConstantIdentification
Resolved ranged next value [9] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [11] if(main::i#1!=rangelast(0,$64)) goto main::@1 to (number) $65
Resolved ranged next value [7] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [9] if(main::i#1!=rangelast(0,$64)) goto main::@1 to (number) $65
Adding number conversion cast (unumber) $65 in if((byte) main::i#1!=(number) $65) goto main::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $65
@ -180,8 +169,8 @@ __bend_from___b1:
__bend:
// main
main: {
.const a = $ee6b2800
.label SCREEN = $400
.const a = $ee6b2800
.label b = 3
.label c = 7
.label i = 2
@ -275,8 +264,8 @@ __bend_from___b1:
__bend:
// main
main: {
.const a = $ee6b2800
.label SCREEN = $400
.const a = $ee6b2800
.label b = 2
// [5] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
@ -386,8 +375,8 @@ Score: 471
// @end
// main
main: {
.const a = $ee6b2800
.label SCREEN = $400
.const a = $ee6b2800
.label b = 2
// [5] phi from main to main::@1 [phi:main->main::@1]
// [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1

View File

@ -5,8 +5,6 @@ Adding struct value list initializer (byte) main::button_color ← (const byte)
Adding struct value list initializer (byte) main::button_size ← (number) $18
Replacing struct member reference (struct Button) main::button.color with member unwinding reference (byte) main::button_color
Replacing struct member reference (struct Button) main::button.size with member unwinding reference (byte) main::button_size
Identified constant variable (byte) Button::color
Identified constant variable (byte) Button::size
Identified constant variable (byte) main::button_color
Identified constant variable (byte) main::button_size
@ -34,6 +32,8 @@ SYMBOL TABLE SSA
(label) @2
(label) @begin
(label) @end
(byte) Button::color
(byte) Button::size
(const byte) Color::GREEN = (byte) 1
(const byte) Color::RED = (byte) 0
(const byte) RED = (byte) 0
@ -41,7 +41,7 @@ SYMBOL TABLE SSA
(label) main::@return
(const byte*) main::SCREEN = (byte*)(number) $400
(const byte) main::button_color = (const byte) RED
(const byte) main::button_size = (number) $18
(const byte) main::button_size = (byte) $18
Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (const byte) main::button_color
Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (const byte) main::button_size
@ -95,6 +95,8 @@ main::@return: scope:[main] from main
VARIABLE REGISTER WEIGHTS
(byte) Button::color
(byte) Button::size
(void()) main()
Initial phi equivalence classes
@ -221,13 +223,15 @@ FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte) Button::color
(byte) Button::size
(const byte) Color::GREEN = (byte) 1
(const byte) Color::RED = (byte) 0
(const byte) RED = (byte) 0
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024
(const byte) main::button_size = (number) $18
(const byte) main::button_size = (byte) $18

View File

@ -1,11 +1,13 @@
(label) @1
(label) @begin
(label) @end
(byte) Button::color
(byte) Button::size
(const byte) Color::GREEN = (byte) 1
(const byte) Color::RED = (byte) 0
(const byte) RED = (byte) 0
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024
(const byte) main::button_size = (number) $18
(const byte) main::button_size = (byte) $18

View File

@ -5,8 +5,6 @@ Adding struct value list initializer (byte) main::button_color ← (const byte)
Adding struct value list initializer (byte) main::button_size ← (number) $18
Replacing struct member reference (struct Button) main::button.color with member unwinding reference (byte) main::button_color
Replacing struct member reference (struct Button) main::button.size with member unwinding reference (byte) main::button_size
Identified constant variable (byte) Button::color
Identified constant variable (byte) Button::size
Identified constant variable (byte) main::button_color
Identified constant variable (byte) main::button_size
@ -36,12 +34,14 @@ SYMBOL TABLE SSA
(label) @end
(const byte) Button::$0::GREEN = (number) 5
(const byte) Button::$0::RED = (number) 2
(byte) Button::color
(byte) Button::size
(const byte) RED = (number) 2
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*)(number) $400
(const byte) main::button_color = (const byte) RED
(const byte) main::button_size = (number) $18
(const byte) main::button_size = (byte) $18
Adding number conversion cast (unumber) 0 in *((const byte*) main::SCREEN + (number) 0) ← (const byte) main::button_color
Adding number conversion cast (unumber) 1 in *((const byte*) main::SCREEN + (number) 1) ← (const byte) main::button_size
@ -97,6 +97,8 @@ main::@return: scope:[main] from main
VARIABLE REGISTER WEIGHTS
(byte) Button::color
(byte) Button::size
(void()) main()
Initial phi equivalence classes
@ -223,11 +225,13 @@ FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte) Button::color
(byte) Button::size
(const byte) RED = (number) 2
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024
(const byte) main::button_size = (number) $18
(const byte) main::button_size = (byte) $18

View File

@ -1,9 +1,11 @@
(label) @1
(label) @begin
(label) @end
(byte) Button::color
(byte) Button::size
(const byte) RED = (number) 2
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024
(const byte) main::button_size = (number) $18
(const byte) main::button_size = (byte) $18

View File

@ -2150,7 +2150,7 @@ SYMBOL TABLE SSA
(signed byte) sy#7
(signed byte) sy#8
(signed byte) sy#9
(const signed byte) sz = (number) 0
(const signed byte) sz = (signed byte) 0
(const signed byte*) xp = (signed byte*)(number) $f4
(signed byte[8]) xps
(const signed byte*) xr = (signed byte*)(number) $f0
@ -9747,7 +9747,7 @@ FINAL SYMBOL TABLE
(signed byte) sy
(signed byte) sy#10 sy zp[1]:3 0.3846153846153846
(signed byte) sy#3 sy zp[1]:3 22.0
(const signed byte) sz = (number) 0
(const signed byte) sz = (signed byte) 0
(const signed byte*) xp = (signed byte*) 244
(const signed byte[8]) xps = { fill( 8, 0) }
(const signed byte*) xr = (signed byte*) 240

View File

@ -429,7 +429,7 @@
(signed byte) sy
(signed byte) sy#10 sy zp[1]:3 0.3846153846153846
(signed byte) sy#3 sy zp[1]:3 22.0
(const signed byte) sz = (number) 0
(const signed byte) sz = (signed byte) 0
(const signed byte*) xp = (signed byte*) 244
(const signed byte[8]) xps = { fill( 8, 0) }
(const signed byte*) xr = (signed byte*) 240

View File

@ -1228,7 +1228,7 @@ SYMBOL TABLE SSA
(byte) lines::l#2
(byte) lines::l#3
(byte) lines::l#4
(const byte) lines_cnt = (number) 8
(const byte) lines_cnt = (byte) 8
(byte[]) lines_x
(byte[]) lines_y
(void()) main()
@ -5560,7 +5560,7 @@ FINAL SYMBOL TABLE
(byte) lines::l
(byte) lines::l#1 l zp[1]:6 202.0
(byte) lines::l#2 l zp[1]:6 101.0
(const byte) lines_cnt = (number) 8
(const byte) lines_cnt = (byte) 8
(const byte[]) lines_x = { (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28, (byte) $a, (byte) $28, (byte) $3c }
(const byte[]) lines_y = { (byte) $a, (byte) $28, (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28, (byte) $a }
(void()) main()

View File

@ -280,7 +280,7 @@
(byte) lines::l
(byte) lines::l#1 l zp[1]:6 202.0
(byte) lines::l#2 l zp[1]:6 101.0
(const byte) lines_cnt = (number) 8
(const byte) lines_cnt = (byte) 8
(const byte[]) lines_x = { (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28, (byte) $a, (byte) $28, (byte) $3c }
(const byte[]) lines_y = { (byte) $a, (byte) $28, (byte) $3c, (byte) $50, (byte) $6e, (byte) $50, (byte) $3c, (byte) $28, (byte) $a }
(void()) main()

View File

@ -415,7 +415,7 @@ SYMBOL TABLE SSA
(byte*) init_screen::COLS#2
(byte*) init_screen::COLS#3
(byte*) init_screen::COLS#4
(const byte) init_screen::WHITE = (number) 1
(const byte) init_screen::WHITE = (byte) 1
(byte) init_screen::l
(byte) init_screen::l#0
(byte) init_screen::l#1
@ -2700,7 +2700,7 @@ FINAL SYMBOL TABLE
(byte*) init_screen::COLS
(byte*) init_screen::COLS#1 COLS zp[2]:10 7.333333333333333
(byte*) init_screen::COLS#3 COLS zp[2]:10 13.2
(const byte) init_screen::WHITE = (number) 1
(const byte) init_screen::WHITE = (byte) 1
(byte) init_screen::l
(byte) init_screen::l#1 reg byte x 16.5
(byte) init_screen::l#2 reg byte x 16.5

View File

@ -24,7 +24,7 @@
(byte*) init_screen::COLS
(byte*) init_screen::COLS#1 COLS zp[2]:10 7.333333333333333
(byte*) init_screen::COLS#3 COLS zp[2]:10 13.2
(const byte) init_screen::WHITE = (number) 1
(const byte) init_screen::WHITE = (byte) 1
(byte) init_screen::l
(byte) init_screen::l#1 reg byte x 16.5
(byte) init_screen::l#2 reg byte x 16.5

View File

@ -26,9 +26,6 @@ Culled Empty Block (label) utoa16n::@5
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) control ← ((byte*)) (number) $d011
(byte*) raster ← ((byte*)) (number) $d012
(byte*) bordercol ← ((byte*)) (number) $d020
to:@2
(void()) main()
@ -42,8 +39,8 @@ main::@1: scope:[main] from main::@15 main::@6
if(true) goto main::@4
to:main::@return
main::@4: scope:[main] from main::@1 main::@4
(number~) main::$1 ← *((byte*) control) & (number) $80
(byte~) main::$2 ← *((byte*) raster) >> (number) 1
(number~) main::$1 ← *((const byte*) control) & (number) $80
(byte~) main::$2 ← *((const byte*) raster) >> (number) 1
(number~) main::$3 ← (number~) main::$1 | (byte~) main::$2
(byte) main::rst#0 ← (number~) main::$3
(bool~) main::$4 ← (byte) main::rst#0 != (number) $30
@ -51,8 +48,8 @@ main::@4: scope:[main] from main::@1 main::@4
to:main::@5
main::@5: scope:[main] from main::@4
(byte*) main::screen#0 ← ((byte*)) (number) $400
*((byte*) bordercol) ← (number) 1
(byte) main::time_start#0 ← *((byte*) raster)
*((const byte*) bordercol) ← (number) 1
(byte) main::time_start#0 ← *((const byte*) raster)
(word) utoa16w::value#0 ← (number) 0
(byte*) utoa16w::dst#0 ← (byte*) main::screen#0
call utoa16w
@ -60,7 +57,7 @@ main::@5: scope:[main] from main::@4
main::@16: scope:[main] from main::@5
(byte) main::time_start#5 ← phi( main::@5/(byte) main::time_start#0 )
(byte*) main::screen#5 ← phi( main::@5/(byte*) main::screen#0 )
*((byte*) bordercol) ← ++ *((byte*) bordercol)
*((const byte*) bordercol) ← ++ *((const byte*) bordercol)
(byte*) main::screen#1 ← (byte*) main::screen#5 + (number) $28
(word) utoa16w::value#1 ← (number) $4d2
(byte*) utoa16w::dst#1 ← (byte*) main::screen#1
@ -69,7 +66,7 @@ main::@16: scope:[main] from main::@5
main::@17: scope:[main] from main::@16
(byte) main::time_start#4 ← phi( main::@16/(byte) main::time_start#5 )
(byte*) main::screen#6 ← phi( main::@16/(byte*) main::screen#1 )
*((byte*) bordercol) ← ++ *((byte*) bordercol)
*((const byte*) bordercol) ← ++ *((const byte*) bordercol)
(byte*) main::screen#2 ← (byte*) main::screen#6 + (number) $28
(word) utoa16w::value#2 ← (number) $162e
(byte*) utoa16w::dst#2 ← (byte*) main::screen#2
@ -78,7 +75,7 @@ main::@17: scope:[main] from main::@16
main::@18: scope:[main] from main::@17
(byte) main::time_start#3 ← phi( main::@17/(byte) main::time_start#4 )
(byte*) main::screen#7 ← phi( main::@17/(byte*) main::screen#2 )
*((byte*) bordercol) ← ++ *((byte*) bordercol)
*((const byte*) bordercol) ← ++ *((const byte*) bordercol)
(byte*) main::screen#3 ← (byte*) main::screen#7 + (number) $28
(word) utoa16w::value#3 ← (number) $270f
(byte*) utoa16w::dst#3 ← (byte*) main::screen#3
@ -87,7 +84,7 @@ main::@18: scope:[main] from main::@17
main::@19: scope:[main] from main::@18
(byte) main::time_start#2 ← phi( main::@18/(byte) main::time_start#3 )
(byte*) main::screen#8 ← phi( main::@18/(byte*) main::screen#3 )
*((byte*) bordercol) ← ++ *((byte*) bordercol)
*((const byte*) bordercol) ← ++ *((const byte*) bordercol)
(byte*) main::screen#4 ← (byte*) main::screen#8 + (number) $28
(word) utoa16w::value#4 ← (number) $e608
(byte*) utoa16w::dst#4 ← (byte*) main::screen#4
@ -96,8 +93,8 @@ main::@19: scope:[main] from main::@18
main::@20: scope:[main] from main::@19
(byte*) main::screen#9 ← phi( main::@19/(byte*) main::screen#4 )
(byte) main::time_start#1 ← phi( main::@19/(byte) main::time_start#2 )
(byte) main::time_end#0 ← *((byte*) raster)
*((byte*) bordercol) ← (number) 0
(byte) main::time_end#0 ← *((const byte*) raster)
*((const byte*) bordercol) ← (number) 0
(byte~) main::$14 ← (byte) main::time_end#0 - (byte) main::time_start#1
(byte) main::time#0 ← (byte~) main::$14
(word~) main::$15 ← ((word)) (byte) main::time#0
@ -108,13 +105,12 @@ main::@20: scope:[main] from main::@19
to:main::@21
main::@21: scope:[main] from main::@20
(byte*) main::screen#12 ← phi( main::@20/(byte*) main::screen#9 )
(byte[]) main::msg ← (const string) main::$21
(byte) main::i#0 ← (number) 0
to:main::@6
main::@6: scope:[main] from main::@21 main::@7
(byte*) main::screen#11 ← phi( main::@21/(byte*) main::screen#12 main::@7/(byte*) main::screen#10 )
(byte) main::i#2 ← phi( main::@21/(byte) main::i#0 main::@7/(byte) main::i#1 )
(bool~) main::$18 ← *((byte[]) main::msg + (byte) main::i#2) != (number) 0
(bool~) main::$18 ← *((const byte[]) main::msg + (byte) main::i#2) != (number) 0
if((bool~) main::$18) goto main::@7
to:main::@1
main::@7: scope:[main] from main::@6
@ -122,7 +118,7 @@ main::@7: scope:[main] from main::@6
(byte*) main::screen#10 ← phi( main::@6/(byte*) main::screen#11 )
(byte*~) main::$19 ← (byte*) main::screen#10 + (number) $50
(byte*~) main::$20 ← (byte*~) main::$19 + (number) 3
*((byte*~) main::$20 + (byte) main::i#3) ← *((byte[]) main::msg + (byte) main::i#3)
*((byte*~) main::$20 + (byte) main::i#3) ← *((const byte[]) main::msg + (byte) main::i#3)
(byte) main::i#1 ← ++ (byte) main::i#3
to:main::@6
main::@return: scope:[main] from main::@1
@ -131,9 +127,8 @@ main::@return: scope:[main] from main::@1
(void()) cls()
cls: scope:[cls] from main
(byte*) cls::screen ← ((byte*)) (number) $400
(byte*~) cls::$0 ← (byte*) cls::screen + (number) $3e7
(byte*) cls::sc#0 ← (byte*) cls::screen
(byte*~) cls::$0 ← (const byte*) cls::screen + (number) $3e7
(byte*) cls::sc#0 ← (const byte*) cls::screen
to:cls::@1
cls::@1: scope:[cls] from cls cls::@1
(byte*) cls::sc#2 ← phi( cls/(byte*) cls::sc#0 cls::@1/(byte*) cls::sc#1 )
@ -146,7 +141,6 @@ cls::@return: scope:[cls] from cls::@1
return
to:@return
@2: scope:[] from @begin
(byte[]) DIGITS ← (const string) $0
(word[]) UTOA10_SUB ← { (number) $7530, (number) $2710, (number) $bb8, (number) $3e8, (number) $12c, (number) $64, (number) $1e, (number) $a }
(byte[]) UTOA10_VAL ← { (number) 3, (number) 1, (number) 3, (number) 1, (number) 3, (number) 1, (number) 3, (number) 1 }
to:@5
@ -223,14 +217,14 @@ utoa10w::@9: scope:[utoa10w] from utoa10w::@8
(byte) utoa10w::i#8 ← phi( utoa10w::@8/(byte) utoa10w::i#7 )
(byte*) utoa10w::dst#3 ← phi( utoa10w::@8/(byte*) utoa10w::dst#5 )
(byte) utoa10w::digit#4 ← phi( utoa10w::@8/(byte) utoa10w::digit#6 )
*((byte*) utoa10w::dst#3) ← *((byte[]) DIGITS + (byte) utoa10w::digit#4)
*((byte*) utoa10w::dst#3) ← *((const byte[]) DIGITS + (byte) utoa10w::digit#4)
(byte*) utoa10w::dst#1 ← ++ (byte*) utoa10w::dst#3
to:utoa10w::@11
utoa10w::@12: scope:[utoa10w] from utoa10w::@10
(byte*) utoa10w::dst#4 ← phi( utoa10w::@10/(byte*) utoa10w::dst#6 )
(word) utoa10w::value#4 ← phi( utoa10w::@10/(word) utoa10w::value#6 )
(byte~) utoa10w::$0 ← ((byte)) (word) utoa10w::value#4
*((byte*) utoa10w::dst#4) ← *((byte[]) DIGITS + (byte~) utoa10w::$0)
*((byte*) utoa10w::dst#4) ← *((const byte[]) DIGITS + (byte~) utoa10w::$0)
(byte*) utoa10w::dst#2 ← ++ (byte*) utoa10w::dst#4
*((byte*) utoa10w::dst#2) ← (number) 0
to:utoa10w::@return
@ -335,7 +329,7 @@ utoa16n::@4: scope:[utoa16n] from utoa16n::@1
(byte) utoa16n::started#8 ← phi( utoa16n::@1/(byte) utoa16n::started#5 )
(word**) utoa16n::dst#4 ← phi( utoa16n::@1/(word**) utoa16n::dst#5 )
(byte) utoa16n::nybble#5 ← phi( utoa16n::@1/(byte) utoa16n::nybble#6 )
*(*((word**) utoa16n::dst#4)) ← *((byte[]) DIGITS + (byte) utoa16n::nybble#5)
*(*((word**) utoa16n::dst#4)) ← *((const byte[]) DIGITS + (byte) utoa16n::nybble#5)
*((word**) utoa16n::dst#4) ← ++ *((word**) utoa16n::dst#4)
to:utoa16n::@2
utoa16n::@return: scope:[utoa16n] from utoa16n::@2
@ -351,17 +345,16 @@ utoa16n::@return: scope:[utoa16n] from utoa16n::@2
@end: scope:[] from @6
SYMBOL TABLE SSA
(const string) $0 = (string) "0123456789abcdef"
(label) @2
(label) @5
(label) @6
(label) @begin
(label) @end
(byte[]) DIGITS
(const byte[]) DIGITS = (string) "0123456789abcdef"
(const byte) SIZEOF_WORD = (byte) 2
(word[]) UTOA10_SUB
(byte[]) UTOA10_VAL
(byte*) bordercol
(const byte*) bordercol = (byte*)(number) $d020
(void()) cls()
(byte*~) cls::$0
(bool~) cls::$1
@ -371,8 +364,8 @@ SYMBOL TABLE SSA
(byte*) cls::sc#0
(byte*) cls::sc#1
(byte*) cls::sc#2
(byte*) cls::screen
(byte*) control
(const byte*) cls::screen = (byte*)(number) $400
(const byte*) control = (byte*)(number) $d011
(void()) main()
(number~) main::$1
(byte~) main::$14
@ -382,7 +375,6 @@ SYMBOL TABLE SSA
(byte*~) main::$19
(byte~) main::$2
(byte*~) main::$20
(const string) main::$21 = (string) "raster lines"
(number~) main::$3
(bool~) main::$4
(label) main::@1
@ -403,7 +395,7 @@ SYMBOL TABLE SSA
(byte) main::i#1
(byte) main::i#2
(byte) main::i#3
(byte[]) main::msg
(const byte[]) main::msg = (string) "raster lines"
(byte) main::rst
(byte) main::rst#0
(byte*) main::screen
@ -431,7 +423,7 @@ SYMBOL TABLE SSA
(byte) main::time_start#3
(byte) main::time_start#4
(byte) main::time_start#5
(byte*) raster
(const byte*) raster = (byte*)(number) $d012
(void()) utoa10w((word) utoa10w::value , (byte*) utoa10w::dst)
(byte~) utoa10w::$0
(bool~) utoa10w::$1
@ -603,12 +595,12 @@ SYMBOL TABLE SSA
(word) utoa16w::value#7
(word) utoa16w::value#8
Adding number conversion cast (unumber) $80 in (number~) main::$1 ← *((byte*) control) & (number) $80
Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← *((byte*) control) & (unumber)(number) $80
Adding number conversion cast (unumber) 1 in (byte~) main::$2 ← *((byte*) raster) >> (number) 1
Adding number conversion cast (unumber) $80 in (number~) main::$1 ← *((const byte*) control) & (number) $80
Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← *((const byte*) control) & (unumber)(number) $80
Adding number conversion cast (unumber) 1 in (byte~) main::$2 ← *((const byte*) raster) >> (number) 1
Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (unumber~) main::$1 | (byte~) main::$2
Adding number conversion cast (unumber) $30 in (bool~) main::$4 ← (byte) main::rst#0 != (number) $30
Adding number conversion cast (unumber) 1 in *((byte*) bordercol) ← (number) 1
Adding number conversion cast (unumber) 1 in *((const byte*) bordercol) ← (number) 1
Adding number conversion cast (unumber) 0 in (word) utoa16w::value#0 ← (number) 0
Adding number conversion cast (unumber) $28 in (byte*) main::screen#1 ← (byte*) main::screen#5 + (number) $28
Adding number conversion cast (unumber) $4d2 in (word) utoa16w::value#1 ← (number) $4d2
@ -618,13 +610,13 @@ Adding number conversion cast (unumber) $28 in (byte*) main::screen#3 ← (byte*
Adding number conversion cast (unumber) $270f in (word) utoa16w::value#3 ← (number) $270f
Adding number conversion cast (unumber) $28 in (byte*) main::screen#4 ← (byte*) main::screen#8 + (number) $28
Adding number conversion cast (unumber) $e608 in (word) utoa16w::value#4 ← (number) $e608
Adding number conversion cast (unumber) 0 in *((byte*) bordercol) ← (number) 0
Adding number conversion cast (unumber) 0 in *((const byte*) bordercol) ← (number) 0
Adding number conversion cast (unumber) $50 in (byte*~) main::$16 ← (byte*) main::screen#9 + (number) $50
Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::$18 ← *((byte[]) main::msg + (byte) main::i#2) != (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::$18 ← *((const byte[]) main::msg + (byte) main::i#2) != (number) 0
Adding number conversion cast (unumber) $50 in (byte*~) main::$19 ← (byte*) main::screen#10 + (number) $50
Adding number conversion cast (unumber) 3 in (byte*~) main::$20 ← (byte*~) main::$19 + (number) 3
Adding number conversion cast (unumber) $3e7 in (byte*~) cls::$0 ← (byte*) cls::screen + (number) $3e7
Adding number conversion cast (unumber) $3e7 in (byte*~) cls::$0 ← (const byte*) cls::screen + (number) $3e7
Adding number conversion cast (unumber) 0 in (byte) utoa10w::bStarted#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) utoa10w::digit#0 ← (number) 0
Adding number conversion cast (unumber) 1 in (byte) utoa10w::bStarted#1 ← (number) 1
@ -650,20 +642,16 @@ Successful SSA optimization PassNAddNumberTypeConversions
Added casts to value list in (word[]) UTOA10_SUB ← (word[]){ (word)(number) $7530, (word)(number) $2710, (word)(number) $bb8, (word)(number) $3e8, (word)(number) $12c, (word)(number) $64, (word)(number) $1e, (word)(number) $a }
Added casts to value list in (byte[]) UTOA10_VAL ← (byte[]){ (byte)(number) 3, (byte)(number) 1, (byte)(number) 3, (byte)(number) 1, (byte)(number) 3, (byte)(number) 1, (byte)(number) 3, (byte)(number) 1 }
Successful SSA optimization PassNAddInitializerValueListTypeCasts
Inlining cast (byte*) control ← (byte*)(number) $d011
Inlining cast (byte*) raster ← (byte*)(number) $d012
Inlining cast (byte*) bordercol ← (byte*)(number) $d020
Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400
Inlining cast *((byte*) bordercol) ← (unumber)(number) 1
Inlining cast *((const byte*) bordercol) ← (unumber)(number) 1
Inlining cast (word) utoa16w::value#0 ← (unumber)(number) 0
Inlining cast (word) utoa16w::value#1 ← (unumber)(number) $4d2
Inlining cast (word) utoa16w::value#2 ← (unumber)(number) $162e
Inlining cast (word) utoa16w::value#3 ← (unumber)(number) $270f
Inlining cast (word) utoa16w::value#4 ← (unumber)(number) $e608
Inlining cast *((byte*) bordercol) ← (unumber)(number) 0
Inlining cast *((const byte*) bordercol) ← (unumber)(number) 0
Inlining cast (word~) main::$15 ← (word)(byte) main::time#0
Inlining cast (byte) main::i#0 ← (unumber)(number) 0
Inlining cast (byte*) cls::screen ← (byte*)(number) $400
Inlining cast (byte) utoa10w::bStarted#0 ← (unumber)(number) 0
Inlining cast (byte) utoa10w::digit#0 ← (unumber)(number) 0
Inlining cast (byte) utoa10w::bStarted#1 ← (unumber)(number) 1
@ -678,6 +666,7 @@ Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 53265
Simplifying constant pointer cast (byte*) 53266
Simplifying constant pointer cast (byte*) 53280
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast $80
Simplifying constant integer cast 1
Simplifying constant integer cast $30
@ -698,7 +687,6 @@ Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $50
Simplifying constant integer cast 3
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast $3e7
Simplifying constant integer cast $7530
Simplifying constant integer cast $2710
@ -774,15 +762,15 @@ Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) main::$1 ← *((byte*) control) & (byte) $80
Inferred type updated to byte in (unumber~) main::$1 ← *((const byte*) control) & (byte) $80
Inferred type updated to byte in (unumber~) main::$3 ← (byte~) main::$1 | (byte~) main::$2
Inferred type updated to byte in (unumber~) utoa10w::$2 ← (byte) utoa10w::i#4 & (byte) 1
Inferred type updated to byte in (unumber~) utoa16w::$5 ← (byte~) utoa16w::$4 & (byte) $f
Inferred type updated to byte in (unumber~) utoa16w::$13 ← (byte~) utoa16w::$12 & (byte) $f
Inversing boolean not [92] (bool~) utoa10w::$4 ← (byte~) utoa10w::$2 == (byte) 0 from [91] (bool~) utoa10w::$3 ← (byte~) utoa10w::$2 != (byte) 0
Inversing boolean not [100] (bool~) utoa10w::$6 ← (byte) utoa10w::bStarted#2 == (byte) 0 from [99] (bool~) utoa10w::$5 ← (byte) utoa10w::bStarted#2 != (byte) 0
Inversing boolean not [161] (bool~) utoa16n::$1 ← (byte) utoa16n::nybble#4 == (byte) 0 from [160] (bool~) utoa16n::$0 ← (byte) utoa16n::nybble#4 != (byte) 0
Inversing boolean not [165] (bool~) utoa16n::$3 ← (byte) utoa16n::started#5 == (byte) 0 from [164] (bool~) utoa16n::$2 ← (byte) utoa16n::started#5 != (byte) 0
Inversing boolean not [86] (bool~) utoa10w::$4 ← (byte~) utoa10w::$2 == (byte) 0 from [85] (bool~) utoa10w::$3 ← (byte~) utoa10w::$2 != (byte) 0
Inversing boolean not [94] (bool~) utoa10w::$6 ← (byte) utoa10w::bStarted#2 == (byte) 0 from [93] (bool~) utoa10w::$5 ← (byte) utoa10w::bStarted#2 != (byte) 0
Inversing boolean not [155] (bool~) utoa16n::$1 ← (byte) utoa16n::nybble#4 == (byte) 0 from [154] (bool~) utoa16n::$0 ← (byte) utoa16n::nybble#4 != (byte) 0
Inversing boolean not [159] (bool~) utoa16n::$3 ← (byte) utoa16n::started#5 == (byte) 0 from [158] (bool~) utoa16n::$2 ← (byte) utoa16n::started#5 != (byte) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte) main::rst#0 = (byte~) main::$3
Alias (byte*) main::screen#0 = (byte*) main::screen#5
@ -796,7 +784,6 @@ Alias (word) utoa10w::value#0 = (word~) main::$15
Alias (byte*) utoa10w::dst#0 = (byte*~) main::$16
Alias (byte*) main::screen#10 = (byte*) main::screen#11
Alias (byte) main::i#2 = (byte) main::i#3
Alias (byte*) cls::screen = (byte*) cls::sc#0
Alias (byte) utoa10w::digit#3 = (byte) utoa10w::digit#5 (byte) utoa10w::digit#8 (byte) utoa10w::digit#6 (byte) utoa10w::digit#4
Alias (byte) utoa10w::i#2 = (byte) utoa10w::i#3 (byte) utoa10w::i#4 (byte) utoa10w::i#7 (byte) utoa10w::i#8
Alias (word) utoa10w::value#10 = (word) utoa10w::value#3 (word) utoa10w::value#2 (word) utoa10w::value#8 (word) utoa10w::value#9
@ -842,37 +829,34 @@ Identical Phi Values (byte*) main::screen#10 (byte*) main::screen#12
Identical Phi Values (word) utoa10w::value#5 (word) utoa10w::value#0
Identical Phi Values (byte*) utoa10w::dst#10 (byte*) utoa10w::dst#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$4 [11] if((byte) main::rst#0!=(byte) $30) goto main::@4
Simple Condition (bool~) main::$18 [57] if(*((byte[]) main::msg + (byte) main::i#2)!=(byte) 0) goto main::@7
Simple Condition (bool~) cls::$1 [71] if((byte*) cls::sc#1!=rangelast(cls::screen,cls::$0)) goto cls::@1
Simple Condition (bool~) utoa10w::$1 [83] if((word) utoa10w::value#10>=*((word[]) UTOA10_SUB + (byte~) utoa10w::$8)) goto utoa10w::@3
Simple Condition (bool~) utoa10w::$4 [93] if((byte~) utoa10w::$2==(byte) 0) goto utoa10w::@10
Simple Condition (bool~) utoa10w::$7 [97] if((byte) utoa10w::i#1!=rangelast(0,7)) goto utoa10w::@2
Simple Condition (bool~) utoa10w::$6 [101] if((byte) utoa10w::bStarted#2==(byte) 0) goto utoa10w::@11
Simple Condition (bool~) utoa16n::$1 [162] if((byte) utoa16n::nybble#4==(byte) 0) goto utoa16n::@1
Simple Condition (bool~) utoa16n::$3 [166] if((byte) utoa16n::return#4==(byte) 0) goto utoa16n::@2
Simple Condition (bool~) main::$4 [8] if((byte) main::rst#0!=(byte) $30) goto main::@4
Simple Condition (bool~) main::$18 [53] if(*((const byte[]) main::msg + (byte) main::i#2)!=(byte) 0) goto main::@7
Simple Condition (bool~) cls::$1 [66] if((byte*) cls::sc#1!=rangelast(cls::screen,cls::$0)) goto cls::@1
Simple Condition (bool~) utoa10w::$1 [77] if((word) utoa10w::value#10>=*((word[]) UTOA10_SUB + (byte~) utoa10w::$8)) goto utoa10w::@3
Simple Condition (bool~) utoa10w::$4 [87] if((byte~) utoa10w::$2==(byte) 0) goto utoa10w::@10
Simple Condition (bool~) utoa10w::$7 [91] if((byte) utoa10w::i#1!=rangelast(0,7)) goto utoa10w::@2
Simple Condition (bool~) utoa10w::$6 [95] if((byte) utoa10w::bStarted#2==(byte) 0) goto utoa10w::@11
Simple Condition (bool~) utoa16n::$1 [156] if((byte) utoa16n::nybble#4==(byte) 0) goto utoa16n::@1
Simple Condition (bool~) utoa16n::$3 [160] if((byte) utoa16n::return#4==(byte) 0) goto utoa16n::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [117] (word**) utoa16n::dst#0 ← & (byte*) utoa16w::dst#5
Constant right-side identified [128] (word**) utoa16n::dst#1 ← & (byte*) utoa16w::dst#5
Constant right-side identified [139] (word**) utoa16n::dst#2 ← & (byte*) utoa16w::dst#5
Constant right-side identified [150] (word**) utoa16n::dst#3 ← & (byte*) utoa16w::dst#5
Constant right-side identified [60] (byte*~) cls::$0 ← (const byte*) cls::screen + (word) $3e7
Constant right-side identified [111] (word**) utoa16n::dst#0 ← & (byte*) utoa16w::dst#5
Constant right-side identified [122] (word**) utoa16n::dst#1 ← & (byte*) utoa16w::dst#5
Constant right-side identified [133] (word**) utoa16n::dst#2 ← & (byte*) utoa16w::dst#5
Constant right-side identified [144] (word**) utoa16n::dst#3 ← & (byte*) utoa16w::dst#5
Successful SSA optimization Pass2ConstantRValueConsolidation
Identified constant from value list (word[]) { (word) $7530, (word) $2710, (word) $bb8, (word) $3e8, (word) $12c, (word) $64, (word) $1e, (word) $a }
Identified constant from value list (byte[]) { (byte) 3, (byte) 1, (byte) 3, (byte) 1, (byte) 3, (byte) 1, (byte) 3, (byte) 1 }
Successful SSA optimization Pass2ConstantInitializerValueLists
Constant (const byte*) control = (byte*) 53265
Constant (const byte*) raster = (byte*) 53266
Constant (const byte*) bordercol = (byte*) 53280
Constant (const byte*) main::screen#0 = (byte*) 1024
Constant (const word) utoa16w::value#0 = 0
Constant (const word) utoa16w::value#1 = $4d2
Constant (const word) utoa16w::value#2 = $162e
Constant (const word) utoa16w::value#3 = $270f
Constant (const word) utoa16w::value#4 = $e608
Constant (const byte[]) main::msg = main::$21
Constant (const byte) main::i#0 = 0
Constant (const byte*) cls::screen = (byte*) 1024
Constant (const byte[]) DIGITS = $0
Constant (const byte*) cls::$0 = cls::screen+$3e7
Constant (const byte*) cls::sc#0 = cls::screen
Constant (const word[]) UTOA10_SUB = { $7530, $2710, $bb8, $3e8, $12c, $64, $1e, $a }
Constant (const byte[]) UTOA10_VAL = { 3, 1, 3, 1, 3, 1, 3, 1 }
Constant (const byte) utoa10w::bStarted#0 = 0
@ -890,38 +874,33 @@ Constant (const byte) utoa16n::started#4 = 1
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) utoa16n::started#0 = utoa16w::started#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [5] if(true) goto main::@4
if() condition always true - replacing block destination [2] if(true) goto main::@4
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [95] utoa10w::i#1 ← ++ utoa10w::i#2 to ++
Resolved ranged comparison value [97] if(utoa10w::i#1!=rangelast(0,7)) goto utoa10w::@2 to (number) 8
Eliminating unused variable (byte) utoa16w::started#3 and assignment [82] (byte) utoa16w::started#3 ← (byte) utoa16n::return#2
Eliminating unused variable (byte) utoa16n::return#3 and assignment [86] (byte) utoa16n::return#3 ← (byte) utoa16n::return#4
Resolved ranged next value [64] cls::sc#1 ← ++ cls::sc#2 to ++
Resolved ranged comparison value [66] if(cls::sc#1!=rangelast(cls::screen,cls::$0)) goto cls::@1 to (byte*)(const byte*) cls::$0+(number) 1
Resolved ranged next value [89] utoa10w::i#1 ← ++ utoa10w::i#2 to ++
Resolved ranged comparison value [91] if(utoa10w::i#1!=rangelast(0,7)) goto utoa10w::@2 to (number) 8
Eliminating unused variable (byte) utoa16w::started#3 and assignment [81] (byte) utoa16w::started#3 ← (byte) utoa16n::return#2
Eliminating unused variable (byte) utoa16n::return#3 and assignment [85] (byte) utoa16n::return#3 ← (byte) utoa16n::return#4
Successful SSA optimization PassNEliminateUnusedVars
Eliminating unused variable (byte) utoa16n::return#2 and assignment [81] (byte) utoa16n::return#2 ← (byte) utoa16n::return#4
Eliminating unused variable (byte) utoa16n::return#2 and assignment [80] (byte) utoa16n::return#2 ← (byte) utoa16n::return#4
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Adding number conversion cast (unumber) 8 in if((byte) utoa10w::i#1!=(number) 8) goto utoa10w::@2
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast 8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [11] (byte*) main::screen#1 ← (const byte*) main::screen#0 + (byte) $28
Constant right-side identified [38] (byte*~) cls::$0 ← (const byte*) cls::screen + (word) $3e7
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) main::screen#1 = main::screen#0+$28
Constant (const byte*) cls::$0 = cls::screen+$3e7
Successful SSA optimization Pass2ConstantIdentification
Resolved ranged next value [41] cls::sc#1 ← ++ cls::sc#2 to ++
Resolved ranged comparison value [42] if(cls::sc#1!=rangelast(cls::screen,cls::$0)) goto cls::@1 to (byte*)(const byte*) cls::$0+(number) 1
Adding number conversion cast (unumber) 1 in if((byte*) cls::sc#1!=(byte*)(const byte*) cls::$0+(number) 1) goto cls::@1
Adding number conversion cast (unumber) 8 in if((byte) utoa10w::i#1!=(number) 8) goto utoa10w::@2
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const byte*) cls::$0+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast 8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [11] (byte*) main::screen#1 ← (const byte*) main::screen#0 + (byte) $28
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) main::screen#1 = main::screen#0+$28
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [14] (byte*) main::screen#2 ← (const byte*) main::screen#1 + (byte) $28
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) main::screen#2 = main::screen#1+$28
@ -953,6 +932,7 @@ Inlining constant with different constant siblings (const byte*) main::screen#1
Inlining constant with different constant siblings (const byte*) main::screen#2
Inlining constant with different constant siblings (const byte*) main::screen#3
Inlining constant with different constant siblings (const byte*) main::screen#12
Inlining constant with var siblings (const byte*) cls::sc#0
Inlining constant with var siblings (const byte) utoa10w::bStarted#0
Inlining constant with var siblings (const byte) utoa10w::digit#0
Inlining constant with var siblings (const byte) utoa10w::i#0
@ -980,7 +960,6 @@ Constant inlined main::screen#2 = (byte*) 1024+(byte) $28+(byte) $28
Constant inlined utoa16w::value#0 = (byte) 0
Constant inlined main::screen#3 = (byte*) 1024+(byte) $28+(byte) $28+(byte) $28
Constant inlined utoa10w::bStarted#1 = (byte) 1
Constant inlined $0 = (const byte[]) DIGITS
Constant inlined utoa10w::bStarted#0 = (byte) 0
Constant inlined main::screen#12 = (byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28
Constant inlined utoa16n::started#0 = (byte) 0
@ -992,8 +971,8 @@ Constant inlined utoa16n::started#3 = (byte) 1
Constant inlined utoa16n::dst#3 = &(byte*) utoa16w::dst#5
Constant inlined utoa16n::started#4 = (byte) 1
Constant inlined utoa16n::dst#2 = &(byte*) utoa16w::dst#5
Constant inlined cls::sc#0 = (const byte*) cls::screen
Constant inlined main::$20 = (byte*) 1024+(byte) $28+(byte) $28+(byte) $28+(byte) $28+(byte) $50+(byte) 3
Constant inlined main::$21 = (const byte[]) main::msg
Constant inlined utoa16w::started#0 = (byte) 0
Constant inlined cls::$0 = (const byte*) cls::screen+(word) $3e7
Constant inlined utoa10w::i#0 = (byte) 0

View File

@ -11,7 +11,6 @@ CONTROL FLOW GRAPH SSA
(void()) main()
main: scope:[main] from @1
(byte*) main::SCREEN ← ((byte*)) (number) $400
(byte) main::idx#0 ← (number) 0
(byte) main::i#0 ← (byte) 0
to:main::@1
@ -20,11 +19,11 @@ main::@1: scope:[main] from main main::@1
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
(byte~) main::$1 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
(byte*) main::$3 ← (byte*)(struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
*((byte*) main::SCREEN + (byte) main::idx#3) ← *((byte*) main::$3 + (byte~) main::$1)
*((const byte*) main::SCREEN + (byte) main::idx#3) ← *((byte*) main::$3 + (byte~) main::$1)
(byte) main::idx#1 ← ++ (byte) main::idx#3
(byte~) main::$2 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
(byte*) main::$4 ← (byte*)(struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_Y
*((byte*) main::SCREEN + (byte) main::idx#1) ← *((byte*) main::$4 + (byte~) main::$2)
*((const byte*) main::SCREEN + (byte) main::idx#1) ← *((byte*) main::$4 + (byte~) main::$2)
(byte) main::idx#2 ← ++ (byte) main::idx#1
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,2)
(bool~) main::$0 ← (byte) main::i#1 != rangelast(0,2)
@ -58,7 +57,7 @@ SYMBOL TABLE SSA
(byte*) main::$4
(label) main::@1
(label) main::@return
(byte*) main::SCREEN
(const byte*) main::SCREEN = (byte*)(number) $400
(byte) main::i
(byte) main::i#0
(byte) main::i#1
@ -74,23 +73,22 @@ Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
Added casts to value list in (struct Point[]) points ← (struct Point[]){ (struct Point){ (byte)(number) 1, (byte)(number) 2 }, (struct Point){ (byte)(number) 3, (byte)(number) 4 }, (struct Point){ (byte)(number) 5, (byte)(number) 6 } }
Successful SSA optimization PassNAddInitializerValueListTypeCasts
Inlining cast (byte*) main::SCREEN ← (byte*)(number) $400
Inlining cast (byte) main::idx#0 ← (unumber)(number) 0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 3
Simplifying constant integer cast 4
Simplifying constant integer cast 5
Simplifying constant integer cast 6
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Identified duplicate assignment right side [9] (byte~) main::$2 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
Identified duplicate assignment right side [8] (byte~) main::$2 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) main::$0 [15] if((byte) main::i#1!=rangelast(0,2)) goto main::@1
Simple Condition (bool~) main::$0 [14] if((byte) main::i#1!=rangelast(0,2)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Identified constant from value list (struct Point) { x: (byte) 1, y: (byte) 2 }
Identified constant from value list (struct Point) { x: (byte) 3, y: (byte) 4 }
@ -99,16 +97,15 @@ Successful SSA optimization Pass2ConstantInitializerValueLists
Identified constant from value list (struct Point[]) { { x: (byte) 1, y: (byte) 2 }, { x: (byte) 3, y: (byte) 4 }, { x: (byte) 5, y: (byte) 6 } }
Successful SSA optimization Pass2ConstantInitializerValueLists
Constant (const struct Point[]) points = { { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 } }
Constant (const byte*) main::SCREEN = (byte*) 1024
Constant (const byte) main::idx#0 = 0
Constant (const byte) main::i#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (byte*)points in [6] (byte*) main::$3 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
Constant value identified (byte*)points in [10] (byte*) main::$4 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_Y
Constant value identified (byte*)points in [5] (byte*) main::$3 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
Constant value identified (byte*)points in [9] (byte*) main::$4 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_Y
Successful SSA optimization Pass2ConstantValues
Resolved ranged next value [13] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [15] if(main::i#1!=rangelast(0,2)) goto main::@1 to (number) 3
Simplifying expression containing zero (byte*)points in [6] (byte*) main::$3 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
Resolved ranged next value [12] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [14] if(main::i#1!=rangelast(0,2)) goto main::@1 to (number) 3
Simplifying expression containing zero (byte*)points in [5] (byte*) main::$3 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused constant (const byte) OFFSET_STRUCT_POINT_X
Successful SSA optimization PassNEliminateUnusedVars

View File

@ -13,7 +13,6 @@ CONTROL FLOW GRAPH SSA
(void()) main()
main: scope:[main] from @1
(byte*) main::SCREEN ← ((byte*)) (number) $400
(byte) main::idx#0 ← (number) 0
(byte) main::i#0 ← (byte) 0
to:main::@1
@ -22,17 +21,17 @@ main::@1: scope:[main] from main main::@1
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
(byte~) main::$3 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
(byte*) main::$6 ← (byte*)(struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
*((byte*) main::SCREEN + (byte) main::idx#4) ← *((byte*) main::$6 + (byte~) main::$3)
*((const byte*) main::SCREEN + (byte) main::idx#4) ← *((byte*) main::$6 + (byte~) main::$3)
(byte) main::idx#1 ← ++ (byte) main::idx#4
(byte~) main::$4 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
(signed word*) main::$7 ← (signed word*)(struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_Y
(byte~) main::$0 ← < *((signed word*) main::$7 + (byte~) main::$4)
*((byte*) main::SCREEN + (byte) main::idx#1) ← (byte~) main::$0
*((const byte*) main::SCREEN + (byte) main::idx#1) ← (byte~) main::$0
(byte) main::idx#2 ← ++ (byte) main::idx#1
(byte~) main::$5 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
(signed word*) main::$8 ← (signed word*)(struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_Y
(byte~) main::$1 ← > *((signed word*) main::$8 + (byte~) main::$5)
*((byte*) main::SCREEN + (byte) main::idx#2) ← (byte~) main::$1
*((const byte*) main::SCREEN + (byte) main::idx#2) ← (byte~) main::$1
(byte) main::idx#3 ← ++ (byte) main::idx#2
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,2)
(bool~) main::$2 ← (byte) main::i#1 != rangelast(0,2)
@ -70,7 +69,7 @@ SYMBOL TABLE SSA
(signed word*) main::$8
(label) main::@1
(label) main::@return
(byte*) main::SCREEN
(const byte*) main::SCREEN = (byte*)(number) $400
(byte) main::i
(byte) main::i#0
(byte) main::i#1
@ -87,24 +86,23 @@ Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
Added casts to value list in (struct Point[]) points ← (struct Point[]){ (struct Point){ (byte)(number) 1, (signed word)(number) 2 }, (struct Point){ (byte)(number) 3, (signed word)(number) 4 }, (struct Point){ (byte)(number) 5, (signed word)(number) 6 } }
Successful SSA optimization PassNAddInitializerValueListTypeCasts
Inlining cast (byte*) main::SCREEN ← (byte*)(number) $400
Inlining cast (byte) main::idx#0 ← (unumber)(number) 0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 3
Simplifying constant integer cast 4
Simplifying constant integer cast 5
Simplifying constant integer cast 6
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Identified duplicate assignment right side [9] (byte~) main::$4 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
Identified duplicate assignment right side [14] (byte~) main::$5 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
Identified duplicate assignment right side [8] (byte~) main::$4 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
Identified duplicate assignment right side [13] (byte~) main::$5 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_POINT
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) main::$2 [21] if((byte) main::i#1!=rangelast(0,2)) goto main::@1
Simple Condition (bool~) main::$2 [20] if((byte) main::i#1!=rangelast(0,2)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Identified constant from value list (struct Point) { x: (byte) 1, y: (signed word) 2 }
Identified constant from value list (struct Point) { x: (byte) 3, y: (signed word) 4 }
@ -113,17 +111,16 @@ Successful SSA optimization Pass2ConstantInitializerValueLists
Identified constant from value list (struct Point[]) { { x: (byte) 1, y: (signed word) 2 }, { x: (byte) 3, y: (signed word) 4 }, { x: (byte) 5, y: (signed word) 6 } }
Successful SSA optimization Pass2ConstantInitializerValueLists
Constant (const struct Point[]) points = { { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 5, y: 6 } }
Constant (const byte*) main::SCREEN = (byte*) 1024
Constant (const byte) main::idx#0 = 0
Constant (const byte) main::i#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (byte*)points in [6] (byte*) main::$6 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
Constant value identified (signed word*)points in [10] (signed word*) main::$7 ← (signed word*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_Y
Constant value identified (signed word*)points in [15] (signed word*) main::$8 ← (signed word*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_Y
Constant value identified (byte*)points in [5] (byte*) main::$6 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
Constant value identified (signed word*)points in [9] (signed word*) main::$7 ← (signed word*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_Y
Constant value identified (signed word*)points in [14] (signed word*) main::$8 ← (signed word*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_Y
Successful SSA optimization Pass2ConstantValues
Resolved ranged next value [19] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [21] if(main::i#1!=rangelast(0,2)) goto main::@1 to (number) 3
Simplifying expression containing zero (byte*)points in [6] (byte*) main::$6 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
Resolved ranged next value [18] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [20] if(main::i#1!=rangelast(0,2)) goto main::@1 to (number) 3
Simplifying expression containing zero (byte*)points in [5] (byte*) main::$6 ← (byte*)(const struct Point[]) points + (const byte) OFFSET_STRUCT_POINT_X
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused constant (const byte) OFFSET_STRUCT_POINT_X
Successful SSA optimization PassNEliminateUnusedVars

View File

@ -51,9 +51,9 @@ SYMBOL TABLE SSA
(label) @2
(label) @begin
(label) @end
(const byte) GREEN = (number) 5
(const byte) RED = (number) 2
(const byte) WHITE = (number) 1
(const byte) GREEN = (byte) 5
(const byte) RED = (byte) 2
(const byte) WHITE = (byte) 1
(void()) main()
(bool~) main::$0
(bool~) main::$1
@ -443,9 +443,9 @@ FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(const byte) GREEN = (number) 5
(const byte) RED = (number) 2
(const byte) WHITE = (number) 1
(const byte) GREEN = (byte) 5
(const byte) RED = (byte) 2
(const byte) WHITE = (byte) 1
(void()) main()
(label) main::@1
(label) main::@2

View File

@ -1,9 +1,9 @@
(label) @1
(label) @begin
(label) @end
(const byte) GREEN = (number) 5
(const byte) RED = (number) 2
(const byte) WHITE = (number) 1
(const byte) GREEN = (byte) 5
(const byte) RED = (byte) 2
(const byte) WHITE = (byte) 1
(void()) main()
(label) main::@1
(label) main::@2

View File

@ -51,7 +51,7 @@ SYMBOL TABLE SSA
(byte) main::i#0
(byte) main::i#1
(byte) main::i#2
(const byte) num = (number) 1
(const byte) num = (byte) 1
(byte[]) nums
(const byte[]) str = (string) "bcde"
@ -356,7 +356,7 @@ FINAL SYMBOL TABLE
(byte) main::i
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 22.0
(const byte) num = (number) 1
(const byte) num = (byte) 1
(const byte[]) nums = { (byte) 2, (byte) 3, (byte) 4, (byte) 5 }
(const byte[]) str = (string) "bcde"

View File

@ -9,7 +9,7 @@
(byte) main::i
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 22.0
(const byte) num = (number) 1
(const byte) num = (byte) 1
(const byte[]) nums = { (byte) 2, (byte) 3, (byte) 4, (byte) 5 }
(const byte[]) str = (string) "bcde"

View File

@ -28,8 +28,8 @@ SYMBOL TABLE SSA
(const byte*) BGCOL = (byte*)(number) $d021
(void()) main()
(label) main::@return
(const byte) main::i = (number) 0
(const byte) main::i1 = (number) 1
(const byte) main::i = (byte) 0
(const byte) main::i1 = (byte) 1
Simplifying constant pointer cast (byte*) 53281
Successful SSA optimization PassNCastSimplification
@ -194,8 +194,8 @@ FINAL SYMBOL TABLE
(const byte*) BGCOL = (byte*) 53281
(void()) main()
(label) main::@return
(const byte) main::i = (number) 0
(const byte) main::i1 = (number) 1
(const byte) main::i = (byte) 0
(const byte) main::i1 = (byte) 1

View File

@ -4,6 +4,6 @@
(const byte*) BGCOL = (byte*) 53281
(void()) main()
(label) main::@return
(const byte) main::i = (number) 0
(const byte) main::i1 = (number) 1
(const byte) main::i = (byte) 0
(const byte) main::i1 = (byte) 1

View File

@ -433,8 +433,8 @@ SYMBOL TABLE SSA
(label) main::@4
(label) main::@6
(label) main::@return
(const word) main::a = (number) $4d2
(const word) main::b = (number) $929
(const word) main::a = (word) $4d2
(const word) main::b = (word) $929
(dword) main::r
(dword) main::r#0
(dword()) mulf16u((word) mulf16u::a , (word) mulf16u::b)
@ -2779,8 +2779,8 @@ FINAL SYMBOL TABLE
(label) main::@4
(label) main::@5
(label) main::@6
(const word) main::a = (number) $4d2
(const word) main::b = (number) $929
(const word) main::a = (word) $4d2
(const word) main::b = (word) $929
(dword) main::r
(dword) main::r#0 r zp[4]:14 11.0
(dword()) mulf16u((word) mulf16u::a , (word) mulf16u::b)

View File

@ -15,8 +15,8 @@
(label) main::@4
(label) main::@5
(label) main::@6
(const word) main::a = (number) $4d2
(const word) main::b = (number) $929
(const word) main::a = (word) $4d2
(const word) main::b = (word) $929
(dword) main::r
(dword) main::r#0 r zp[4]:14 11.0
(dword()) mulf16u((word) mulf16u::a , (word) mulf16u::b)

View File

@ -46,7 +46,7 @@ SYMBOL TABLE SSA
(label) main::@2
(label) main::@return
(const byte) main::RED = (number) 2
(const byte) main::b1 = (number) $fa
(const byte) main::b1 = (byte) $fa
(byte) main::b2
(byte) main::b2#0
(const byte*) main::bgcol = (byte*)(number) $d020
@ -290,7 +290,7 @@ FINAL SYMBOL TABLE
(label) main::@1
(label) main::@return
(const byte) main::RED = (number) 2
(const byte) main::b1 = (number) $fa
(const byte) main::b1 = (byte) $fa
(byte) main::b2
(const byte) main::b2#0 b2 = (const byte) main::b1+(byte) $fa
(const byte*) main::bgcol = (byte*) 53280

View File

@ -5,7 +5,7 @@
(label) main::@1
(label) main::@return
(const byte) main::RED = (number) 2
(const byte) main::b1 = (number) $fa
(const byte) main::b1 = (byte) $fa
(byte) main::b2
(const byte) main::b2#0 b2 = (const byte) main::b1+(byte) $fa
(const byte*) main::bgcol = (byte*) 53280

View File

@ -11,7 +11,7 @@ main: {
.const dw = $2000
.const w1 = dw&$ffff
.const w2 = dw+1&$ffff
lda #<w1
lda #0
sta SCREEN
lda #>w1
sta SCREEN+1

View File

@ -10,7 +10,7 @@
(void()) main()
main: scope:[main] from @1
[4] *((const byte*) SCREEN) ← <(const word) main::w1#0
[4] *((const byte*) SCREEN) ← (byte) 0
[5] *((const byte*) SCREEN+(byte) 1) ← >(const word) main::w1#0
[6] *((const byte*) SCREEN+(byte) 3) ← <(const word) main::w2#0
[7] *((const byte*) SCREEN+(byte) 4) ← >(const word) main::w2#0

View File

@ -45,7 +45,7 @@ SYMBOL TABLE SSA
(byte~) main::$5
(byte~) main::$6
(label) main::@return
(const dword) main::dw = (number) $2000
(const dword) main::dw = (dword) $2000
(word) main::w1
(word) main::w1#0
(word) main::w2
@ -93,6 +93,8 @@ Constant (const word) main::w2#0 = <main::$1
Constant (const byte) main::$3 = <main::w1#0
Constant (const byte) main::$4 = >main::w1#0
Successful SSA optimization Pass2ConstantIdentification
Simplifying constant evaluating to zero <(const word) main::w1#0 in
Successful SSA optimization PassNSimplifyConstantZero
Constant right-side identified [2] (byte~) main::$5 ← < (const word) main::w2#0
Constant right-side identified [4] (byte~) main::$6 ← > (const word) main::w2#0
Successful SSA optimization Pass2ConstantRValueConsolidation
@ -101,7 +103,7 @@ Constant (const byte) main::$6 = >main::w2#0
Successful SSA optimization Pass2ConstantIdentification
Constant inlined main::$5 = <(const word) main::w2#0
Constant inlined main::$6 = >(const word) main::w2#0
Constant inlined main::$3 = <(const word) main::w1#0
Constant inlined main::$3 = (byte) 0
Constant inlined main::$4 = >(const word) main::w1#0
Constant inlined main::$1 = (const dword) main::dw+(byte) 1
Successful SSA optimization Pass2ConstantInlining
@ -136,7 +138,7 @@ FINAL CONTROL FLOW GRAPH
(void()) main()
main: scope:[main] from @1
[4] *((const byte*) SCREEN) ← <(const word) main::w1#0
[4] *((const byte*) SCREEN) ← (byte) 0
[5] *((const byte*) SCREEN+(byte) 1) ← >(const word) main::w1#0
[6] *((const byte*) SCREEN+(byte) 3) ← <(const word) main::w2#0
[7] *((const byte*) SCREEN+(byte) 4) ← >(const word) main::w2#0
@ -187,8 +189,8 @@ main: {
.const dw = $2000
.const w1 = dw&$ffff
.const w2 = dw+1&$ffff
// [4] *((const byte*) SCREEN) ← <(const word) main::w1#0 -- _deref_pbuc1=vbuc2
lda #<w1
// [4] *((const byte*) SCREEN) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SCREEN
// [5] *((const byte*) SCREEN+(byte) 1) ← >(const word) main::w1#0 -- _deref_pbuc1=vbuc2
lda #>w1
@ -208,7 +210,7 @@ main: {
// File Data
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *((const byte*) SCREEN) ← <(const word) main::w1#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [4] *((const byte*) SCREEN) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [5] *((const byte*) SCREEN+(byte) 1) ← >(const word) main::w1#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [6] *((const byte*) SCREEN+(byte) 3) ← <(const word) main::w2#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [7] *((const byte*) SCREEN+(byte) 4) ← >(const word) main::w2#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
@ -252,8 +254,8 @@ main: {
.const dw = $2000
.const w1 = dw&$ffff
.const w2 = dw+1&$ffff
// [4] *((const byte*) SCREEN) ← <(const word) main::w1#0 -- _deref_pbuc1=vbuc2
lda #<w1
// [4] *((const byte*) SCREEN) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SCREEN
// [5] *((const byte*) SCREEN+(byte) 1) ← >(const word) main::w1#0 -- _deref_pbuc1=vbuc2
lda #>w1
@ -298,7 +300,7 @@ FINAL SYMBOL TABLE
(const byte*) SCREEN = (byte*) 1024
(void()) main()
(label) main::@return
(const dword) main::dw = (number) $2000
(const dword) main::dw = (dword) $2000
(word) main::w1
(const word) main::w1#0 w1 = <(const dword) main::dw
(word) main::w2
@ -333,8 +335,8 @@ main: {
.const w1 = dw&$ffff
.const w2 = dw+1&$ffff
// SCREEN[0] = <w1
// [4] *((const byte*) SCREEN) ← <(const word) main::w1#0 -- _deref_pbuc1=vbuc2
lda #<w1
// [4] *((const byte*) SCREEN) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SCREEN
// SCREEN[1] = >w1
// [5] *((const byte*) SCREEN+(byte) 1) ← >(const word) main::w1#0 -- _deref_pbuc1=vbuc2

View File

@ -4,7 +4,7 @@
(const byte*) SCREEN = (byte*) 1024
(void()) main()
(label) main::@return
(const dword) main::dw = (number) $2000
(const dword) main::dw = (dword) $2000
(word) main::w1
(const word) main::w1#0 w1 = <(const dword) main::dw
(word) main::w2

View File

@ -4,7 +4,6 @@ Converted struct value to member variables (struct A) aa
Adding struct value list initializer (byte) aa_b ← (number) 1
Rewriting struct pointer member access *((struct A*) main::a).b
Warning! Adding boolean cast to non-boolean sub-expression *((byte*) main::$3)
Identified constant variable (byte) A::b
Adding versioned struct unwinding for (struct A) aa#0
CONTROL FLOW GRAPH SSA
@ -46,6 +45,7 @@ SYMBOL TABLE SSA
(label) @2
(label) @begin
(label) @end
(byte) A::b
(const byte) OFFSET_STRUCT_A_B = (byte) 0
(struct A) aa
(struct A) aa#0
@ -142,6 +142,7 @@ main::@return: scope:[main] from main::@1
VARIABLE REGISTER WEIGHTS
(byte) A::b
(struct A) aa
(byte) aa_b
(byte) aa_b#0 20.0
@ -309,6 +310,7 @@ FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte) A::b
(struct A) aa
(byte) aa_b
(byte) aa_b#0 aa_b zp[1]:2 20.0

View File

@ -1,6 +1,7 @@
(label) @1
(label) @begin
(label) @end
(byte) A::b
(struct A) aa
(byte) aa_b
(byte) aa_b#0 aa_b zp[1]:2 20.0

View File

@ -7,21 +7,19 @@ CONTROL FLOW GRAPH SSA
(void()) main()
main: scope:[main] from @1
(byte*) main::ub_screen ← ((byte*)) (number) $400
(byte) main::ub#0 ← (number) $ff
(byte*~) main::$0 ← & (byte) main::ub#0
(signed byte*~) main::$1 ← ((signed byte*)) (byte*~) main::$0
(signed byte*) main::sb_ptr#0 ← (signed byte*~) main::$1
*((signed byte*) main::sb_ptr#0) ← (number) 1
*((byte*) main::ub_screen) ← (byte) main::ub#0
(signed byte*) main::sb_screen ← ((signed byte*)) (number) $428
*((const byte*) main::ub_screen) ← (byte) main::ub#0
(signed byte~) main::$2 ← ((signed byte)) (number) $7f
(signed byte) main::sb#0 ← (signed byte~) main::$2
(signed byte*~) main::$3 ← & (signed byte) main::sb#0
(byte*~) main::$4 ← ((byte*)) (signed byte*~) main::$3
(byte*) main::ub_ptr#0 ← (byte*~) main::$4
*((byte*) main::ub_ptr#0) ← (number) 1
*((signed byte*) main::sb_screen) ← (signed byte) main::sb#0
*((const signed byte*) main::sb_screen) ← (signed byte) main::sb#0
to:main::@return
main::@return: scope:[main] from main
return
@ -49,30 +47,28 @@ SYMBOL TABLE SSA
(signed byte) main::sb#0
(signed byte*) main::sb_ptr
(signed byte*) main::sb_ptr#0
(signed byte*) main::sb_screen
(const signed byte*) main::sb_screen = (signed byte*)(number) $428
(byte) main::ub
(byte) main::ub#0
(byte*) main::ub_ptr
(byte*) main::ub_ptr#0
(byte*) main::ub_screen
(const byte*) main::ub_screen = (byte*)(number) $400
Adding number conversion cast (unumber) $ff in (byte) main::ub#0 ← (number) $ff
Adding number conversion cast (snumber) 1 in *((signed byte*) main::sb_ptr#0) ← (number) 1
Adding number conversion cast (unumber) 1 in *((byte*) main::ub_ptr#0) ← (number) 1
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) main::ub_screen ← (byte*)(number) $400
Inlining cast (byte) main::ub#0 ← (unumber)(number) $ff
Inlining cast (signed byte*~) main::$1 ← (signed byte*)(byte*~) main::$0
Inlining cast *((signed byte*) main::sb_ptr#0) ← (snumber)(number) 1
Inlining cast (signed byte*) main::sb_screen ← (signed byte*)(number) $428
Inlining cast (signed byte~) main::$2 ← (signed byte)(number) $7f
Inlining cast (byte*~) main::$4 ← (byte*)(signed byte*~) main::$3
Inlining cast *((byte*) main::ub_ptr#0) ← (unumber)(number) 1
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (signed byte*) 1064
Simplifying constant integer cast $ff
Simplifying constant integer cast 1
Simplifying constant pointer cast (signed byte*) 1064
Simplifying constant integer cast $7f
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
@ -85,12 +81,10 @@ Alias (signed byte*) main::sb_ptr#0 = (signed byte*~) main::$1
Alias (byte*) main::ub_ptr#0 = (byte*~) main::$4
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (volatile)(signed byte) main::sb#0 = (signed byte~) main::$2
Constant right-side identified [2] (byte*~) main::$0 ← & (byte) main::ub#0
Constant right-side identified [10] (signed byte*~) main::$3 ← & (signed byte) main::sb#0
Constant right-side identified [1] (byte*~) main::$0 ← & (byte) main::ub#0
Constant right-side identified [8] (signed byte*~) main::$3 ← & (signed byte) main::sb#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) main::ub_screen = (byte*) 1024
Constant (const byte*) main::$0 = &main::ub#0
Constant (const signed byte*) main::sb_screen = (signed byte*) 1064
Constant (const signed byte) main::$2 = $7f
Constant (const signed byte*) main::$3 = &main::sb#0
Successful SSA optimization Pass2ConstantIdentification

View File

@ -129,13 +129,13 @@ SYMBOL TABLE SSA
(signed byte*~) main::$8
(signed byte*~) main::$9
(label) main::@return
(const signed byte) sb = (number) -$29
(const signed byte) sb = (signed byte) -$29
(const signed byte*) sb_screen = (signed byte*)(number) $428
(const signed word) sw = (number) -$3000
(const signed word) sw = (signed word) -$3000
(const signed word*) sw_screen = (signed word*)(number) $478
(const byte) ub = (number) $29
(const byte) ub = (byte) $29
(const byte*) ub_screen = (byte*)(number) $400
(const word) uw = (number) $3000
(const word) uw = (word) $3000
(const word*) uw_screen = (word*)(number) $450
Adding number conversion cast (unumber) 1 in (signed byte*~) main::$2 ← (signed byte*~) main::$1 + (number) 1
@ -648,13 +648,13 @@ FINAL SYMBOL TABLE
(const byte) SIZEOF_WORD = (byte) 2
(void()) main()
(label) main::@return
(const signed byte) sb = (number) -$29
(const signed byte) sb = (signed byte) -$29
(const signed byte*) sb_screen = (signed byte*) 1064
(const signed word) sw = (number) -$3000
(const signed word) sw = (signed word) -$3000
(const signed word*) sw_screen = (signed word*) 1144
(const byte) ub = (number) $29
(const byte) ub = (byte) $29
(const byte*) ub_screen = (byte*) 1024
(const word) uw = (number) $3000
(const word) uw = (word) $3000
(const word*) uw_screen = (word*) 1104

View File

@ -5,12 +5,12 @@
(const byte) SIZEOF_WORD = (byte) 2
(void()) main()
(label) main::@return
(const signed byte) sb = (number) -$29
(const signed byte) sb = (signed byte) -$29
(const signed byte*) sb_screen = (signed byte*) 1064
(const signed word) sw = (number) -$3000
(const signed word) sw = (signed word) -$3000
(const signed word*) sw_screen = (signed word*) 1144
(const byte) ub = (number) $29
(const byte) ub = (byte) $29
(const byte*) ub_screen = (byte*) 1024
(const word) uw = (number) $3000
(const word) uw = (word) $3000
(const word*) uw_screen = (word*) 1104

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