1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-06 15:41:05 +00:00

Working on new ValueSource based unwinding!

A few __ptr__ problems in test outputs remain.
This commit is contained in:
jespergravgaard 2020-02-05 00:45:08 +01:00
parent e1258f943d
commit 0336b18a62
28 changed files with 468 additions and 445 deletions

View File

@ -52,7 +52,7 @@ public class StructVariableMemberUnwinding {
StructDefinition structDefinition;
/** Maps member names to the unwound variables. */
Map<String, RValue> memberUnwinding;
Map<String, SymbolVariableRef> memberUnwinding;
public VariableUnwinding(StructDefinition structDefinition) {
this.structDefinition = structDefinition;
@ -60,7 +60,7 @@ public class StructVariableMemberUnwinding {
}
/** Set how a member variable was unwound to a specific (new) variable. */
public void setMemberUnwinding(String memberName, RValue memberVariableUnwound) {
public void setMemberUnwinding(String memberName, SymbolVariableRef memberVariableUnwound) {
this.memberUnwinding.put(memberName, memberVariableUnwound);
}
@ -68,6 +68,10 @@ public class StructVariableMemberUnwinding {
return new ArrayList<>(memberUnwinding.keySet());
}
public SymbolVariableRef getMemberUnwound(String memberName) {
return memberUnwinding.get(memberName);
}
@Override
public RValueUnwinding getMemberUnwinding(String memberName, ProgramScope programScope) {
return new RValueUnwinding() {

View File

@ -225,11 +225,12 @@ public class Pass1UnwindStructValues extends Pass1Base {
// Check for bulk assignable values
if(isBulkAssignable(lValue) && isBulkAssignable(rValue)) {
RValueUnwinding lValueUnwinding = getValueUnwinding(lValue, assignment, stmtIt, currentBlock);
RValueUnwinding rValueUnwinding = getValueUnwinding(rValue, assignment, stmtIt, currentBlock);
unwindAssignment(lValueUnwinding, rValueUnwinding, null, stmtIt, initialAssignment, source);
stmtIt.remove();
return true;
throw new InternalError("E!");
//RValueUnwinding lValueUnwinding = getValueUnwinding(lValue, assignment, stmtIt, currentBlock);
//RValueUnwinding rValueUnwinding = getValueUnwinding(rValue, assignment, stmtIt, currentBlock);
//unwindAssignment(lValueUnwinding, rValueUnwinding, null, stmtIt, initialAssignment, source);
//stmtIt.remove();
//return true;
}
// Check for struct unwinding
@ -268,7 +269,7 @@ public class Pass1UnwindStructValues extends Pass1Base {
}
private boolean copyValues(ValueSource lValueSource, ValueSource rValueSource, List<RValue> lValueUnwoundList, boolean initialAssignment, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
if(lValueSource==null || rValueSource==null)
if(lValueSource == null || rValueSource == null)
return false;
if(lValueSource.isSimple() && rValueSource.isSimple()) {
stmtIt.previous();
@ -299,8 +300,8 @@ public class Pass1UnwindStructValues extends Pass1Base {
} else if(lValueSource.isUnwindable() && rValueSource.isUnwindable()) {
getLog().append("Unwinding value copy " + currentStmt.toString(getProgram(), false));
for(String memberName : lValueSource.getMemberNames(getScope())) {
ValueSource lValueSubSource = lValueSource.getMemberUnwinding(memberName, getScope(), currentStmt, currentBlock, stmtIt);
ValueSource rValueSubSource = rValueSource.getMemberUnwinding(memberName, getScope(), currentStmt, currentBlock, stmtIt);
ValueSource lValueSubSource = lValueSource.getMemberUnwinding(memberName, getProgram(), getScope(), currentStmt, currentBlock, stmtIt);
ValueSource rValueSubSource = rValueSource.getMemberUnwinding(memberName, getProgram(), getScope(), currentStmt, currentBlock, stmtIt);
boolean success = copyValues(lValueSubSource, rValueSubSource, lValueUnwoundList, initialAssignment, currentStmt, currentBlock, stmtIt);
if(!success)
throw new InternalError("Error during value unwinding copy! ", currentStmt);
@ -312,6 +313,7 @@ public class Pass1UnwindStructValues extends Pass1Base {
/**
* Get a value source for copying a value
*
* @param value The value being copied
* @param currentStmt The current statement
* @param stmtIt The statement iterator
@ -321,14 +323,24 @@ public class Pass1UnwindStructValues extends Pass1Base {
private ValueSource getValueSource(Value value, Statement currentStmt, ListIterator<Statement> stmtIt, ControlFlowBlock currentBlock) {
if(value instanceof VariableRef) {
Variable variable = getScope().getVariable((VariableRef) value);
if(variable.isStructClassic()) {
return new ValueSourceStructVariable(variable);
if(variable.getType() instanceof SymbolTypeStruct) {
return new ValueSourceVariable(variable);
}
}
if(value instanceof StructZero)
return new ValueSourceZero(((StructZero) value).getTypeStruct(), null);
if(value instanceof ConstantStructValue)
return new ValueSourceConstant(((ConstantStructValue) value).getType(getScope()), null, (ConstantStructValue) value);
if(value instanceof PointerDereferenceSimple)
return new ValueSourcePointerDereferenceSimple((PointerDereferenceSimple) value, SymbolTypeInference.inferType(getScope(), (RValue) value), null);
if(value instanceof PointerDereferenceIndexed)
return new ValueSourcePointerDereferenceIndexed((PointerDereferenceIndexed) value, SymbolTypeInference.inferType(getScope(), (RValue) value), null);
if(value instanceof StructMemberRef) {
final RValue structValue = ((StructMemberRef) value).getStruct();
final ValueSource structValueSource = getValueSource(structValue, currentStmt, stmtIt, currentBlock);
final ValueSource structMemberSource = structValueSource.getMemberUnwinding(((StructMemberRef) value).getMemberName(), getProgram(), getScope(), currentStmt, currentBlock, stmtIt);
return structMemberSource;
}
return null;
}
@ -431,7 +443,7 @@ public class Pass1UnwindStructValues extends Pass1Base {
final PointerDereferenceIndexed structPointerDerefIdx = (PointerDereferenceIndexed) structMemberRef.getStruct();
final SymbolType structPointerType = SymbolTypeInference.inferType(getScope(), structPointerDerefIdx);
if(!(structPointerType instanceof SymbolTypeStruct))
throw new CompileError("Value is not a struct"+structPointerDerefIdx.toString(getProgram()), currentStmt);
throw new CompileError("Value is not a struct" + structPointerDerefIdx.toString(getProgram()), currentStmt);
final StructDefinition structDefinition = ((SymbolTypeStruct) structPointerType).getStructDefinition(getScope());
final String memberName = structMemberRef.getMemberName();
@ -483,7 +495,7 @@ public class Pass1UnwindStructValues extends Pass1Base {
return new StructUnwindingVariable(variable, structDefinition);
}
} else if(value instanceof StructMemberRef && ((StructMemberRef) value).getStruct() instanceof VariableRef) {
getLog().append("Postponing unwinding for "+currentStmt.toString(getProgram(), false));
getLog().append("Postponing unwinding for " + currentStmt.toString(getProgram(), false));
return POSTPONE_UNWINDING;
} else if(value instanceof PointerDereferenceSimple) {
return new StructUnwindingPointerDerefSimple((PointerDereferenceSimple) value, structDefinition, stmtIt, currentBlock, currentStmt);
@ -491,7 +503,7 @@ public class Pass1UnwindStructValues extends Pass1Base {
return new StructUnwindingPointerDerefIndexed((PointerDereferenceIndexed) value, structDefinition, stmtIt, currentBlock, currentStmt);
} else if(value instanceof StructMemberRef && ((StructMemberRef) value).getStruct() instanceof PointerDereferenceIndexed) {
final StructMemberRef structMemberRef = (StructMemberRef) value;
return new StructUnwindingMemberOfPointerDerefIndexed((PointerDereferenceIndexed) structMemberRef.getStruct(),structMemberRef.getMemberName(), structDefinition, stmtIt, currentBlock, currentStmt);
return new StructUnwindingMemberOfPointerDerefIndexed((PointerDereferenceIndexed) structMemberRef.getStruct(), structMemberRef.getMemberName(), structDefinition, stmtIt, currentBlock, currentStmt);
} else if(value instanceof ConstantStructValue) {
return new StructUnwindingConstant((ConstantStructValue) value, structDefinition);
} else if(value instanceof StructZero) {

View File

@ -1,6 +1,7 @@
package dk.camelot64.kickc.passes.unwinding;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.symbols.ArraySpec;
import dk.camelot64.kickc.model.symbols.ProgramScope;
@ -80,12 +81,13 @@ public interface ValueSource {
* Get a sub value source for one member to use for copying that member.
*
* @param memberName The member name
* @param program
* @param programScope The program scope
* @param currentStmt
* @param currentBlock
* @param stmtIt
* @return The unwinding of the member
*/
ValueSource getMemberUnwinding(String memberName, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt);
ValueSource getMemberUnwinding(String memberName, Program program, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt);
}

View File

@ -1,7 +1,7 @@
package dk.camelot64.kickc.passes.unwinding;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.operators.OperatorSizeOf;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.symbols.*;
import dk.camelot64.kickc.model.types.SymbolType;
@ -44,7 +44,7 @@ public class ValueSourceConstant extends ValueSourceBase {
}
@Override
public ValueSource getMemberUnwinding(String memberName, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
public ValueSource getMemberUnwinding(String memberName, Program program, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
StructDefinition structDefinition = ((SymbolTypeStruct) getSymbolType()).getStructDefinition(programScope);
ConstantStructValue constantStructValue = (ConstantStructValue) value;
final Variable member = structDefinition.getMember(memberName);

View File

@ -0,0 +1,101 @@
package dk.camelot64.kickc.passes.unwinding;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.InternalError;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.operators.Operators;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.statements.StatementAssignment;
import dk.camelot64.kickc.model.symbols.*;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypePointer;
import dk.camelot64.kickc.model.types.SymbolTypeStruct;
import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.passes.PassNStructPointerRewriting;
import java.util.ListIterator;
/** Unwinding for a indexed pointer deref. */
public class ValueSourcePointerDereferenceIndexed extends ValueSourceBase {
private final PointerDereferenceIndexed pointerDereferenceIndexed;
/** The type of the value. */
private SymbolType valueType;
/** The array spec of the value. */
private final ArraySpec valueArraySpec;
public ValueSourcePointerDereferenceIndexed(PointerDereferenceIndexed pointerDereferenceIndexed, SymbolType valueType, ArraySpec valueArraySpec) {
this.pointerDereferenceIndexed = pointerDereferenceIndexed;
this.valueType = valueType;
this.valueArraySpec = valueArraySpec;
}
@Override
public SymbolType getSymbolType() {
return valueType;
}
@Override
public ArraySpec getArraySpec() {
return valueArraySpec;
}
@Override
protected boolean isStructClassic() {
return getSymbolType() instanceof SymbolTypeStruct;
}
@Override
public RValue getSimpleValue(ProgramScope programScope) {
if(getArraySpec() != null) {
// For arrays return the pointer to the array - not the deref
//return pointerDereferenceIndexed.getPointer();
// Maybe return pointer + index ?
throw new InternalError("Not implemented! ");
} else {
return pointerDereferenceIndexed;
}
}
@Override
public LValue getBulkLValue(ProgramScope scope) {
return pointerDereferenceIndexed;
}
@Override
public RValue getBulkRValue(ProgramScope scope) {
return new MemcpyValue(pointerDereferenceIndexed, getByteSize(scope), getSymbolType());
}
@Override
public ValueSource getMemberUnwinding(String memberName, Program program, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
StructDefinition structDefinition = ((SymbolTypeStruct) getSymbolType()).getStructDefinition(programScope);
final SymbolType memberType = structDefinition.getMember(memberName).getType();
final ArraySpec memberArraySpec = structDefinition.getMember(memberName).getArraySpec();
ConstantRef memberOffsetConstant = PassNStructPointerRewriting.getMemberOffsetConstant(programScope, structDefinition, memberName);
// Simple member value - unwind to value of member *((type*)&struct + OFFSET_MEMBER)
final RValue structPointer = pointerDereferenceIndexed.getPointer();
if(structPointer instanceof ConstantValue) {
// Pointer to member type
ConstantCastValue structTypedPointer = new ConstantCastValue(new SymbolTypePointer(memberType), (ConstantValue) structPointer);
// Calculate member address (type*)&struct + OFFSET_MEMBER
ConstantBinary memberPointer = new ConstantBinary(structTypedPointer, Operators.PLUS, memberOffsetConstant);
// Unwind to *((type*)&struct + OFFSET_MEMBER)
PointerDereferenceIndexed memberDeref = new PointerDereferenceIndexed(memberPointer, pointerDereferenceIndexed.getIndex());
return new ValueSourcePointerDereferenceIndexed(memberDeref, memberType, memberArraySpec);
} else {
Scope scope = programScope.getScope(currentBlock.getScope());
Variable memberAddress = scope.addVariableIntermediate();
memberAddress.setType(new SymbolTypePointer(memberType));
CastValue structTypedPointer = new CastValue(new SymbolTypePointer(memberType), structPointer);
// Add statement $1 = (memberType*)ptr_struct + OFFSET_MEMBER
stmtIt.previous();
stmtIt.add(new StatementAssignment((LValue) memberAddress.getRef(), structTypedPointer, Operators.PLUS, memberOffsetConstant, true, currentStmt.getSource(), currentStmt.getComments()));
stmtIt.next();
// Unwind to *((memberType*)ptr_struct+OFFSET_MEMBER)
PointerDereferenceIndexed memberDeref = new PointerDereferenceIndexed(memberAddress.getRef(), pointerDereferenceIndexed.getIndex());
return new ValueSourcePointerDereferenceIndexed(memberDeref, memberType, memberArraySpec);
}
}
}

View File

@ -1,7 +1,7 @@
package dk.camelot64.kickc.passes.unwinding;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.operators.OperatorSizeOf;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.operators.Operators;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.statements.StatementAssignment;
@ -12,13 +12,10 @@ import dk.camelot64.kickc.model.types.SymbolTypeStruct;
import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.passes.PassNStructPointerRewriting;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
/** Value Source for a pointer dereference. */
public class ValueSourcePointerDereferenceSimple implements ValueSource {
public class ValueSourcePointerDereferenceSimple extends ValueSourceBase {
/** The pointer dereference. */
private final PointerDereferenceSimple pointerDereference;
@ -44,91 +41,53 @@ public class ValueSourcePointerDereferenceSimple implements ValueSource {
}
@Override
public boolean isSimple() {
return getArraySpec() == null && !(getSymbolType() instanceof SymbolTypeStruct);
}
@Override
public RValue getSimpleValue(ProgramScope programScope) {
if(getArraySpec() != null) {
// For arrays return the pointer to the array - not the deref
return pointerDereference.getPointer();
} else {
return pointerDereference;
}
}
@Override
public boolean isBulkCopyable() {
return getArraySpec() != null || getSymbolType() instanceof SymbolTypeStruct;
}
@Override
public LValue getBulkLValue(ProgramScope scope) {
RValue memberArrayPointer = pointerDereference.getPointer();
return new PointerDereferenceSimple(memberArrayPointer);
}
private ConstantValue getByteSize(ProgramScope scope) {
return getArraySpec() != null ? getArraySpec().getArraySize() : OperatorSizeOf.getSizeOfConstantVar(scope, getSymbolType());
}
@Override
public RValue getBulkRValue(ProgramScope scope) {
RValue memberArrayPointer = pointerDereference.getPointer();
return new MemcpyValue(new PointerDereferenceSimple(memberArrayPointer), getByteSize(scope), getSymbolType());
}
@Override
public boolean isUnwindable() {
protected boolean isStructClassic() {
return getSymbolType() instanceof SymbolTypeStruct;
}
@Override
public List<String> getMemberNames(ProgramScope scope) {
if(getSymbolType() instanceof SymbolTypeStruct) {
StructDefinition structDefinition = ((SymbolTypeStruct) getSymbolType()).getStructDefinition(scope);
Collection<Variable> structMemberVars = structDefinition.getAllVars(false);
ArrayList<String> memberNames = new ArrayList<>();
for(Variable structMemberVar : structMemberVars) {
memberNames.add(structMemberVar.getLocalName());
}
return memberNames;
} else {
return null;
}
public RValue getSimpleValue(ProgramScope programScope) {
return pointerDereference;
}
@Override
public ValueSource getMemberUnwinding(String memberName, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
if(getSymbolType() instanceof SymbolTypeStruct) {
StructDefinition structDefinition = ((SymbolTypeStruct) getSymbolType()).getStructDefinition(programScope);
final SymbolType memberType = structDefinition.getMember(memberName).getType();
final ArraySpec memberArraySpec = structDefinition.getMember(memberName).getArraySpec();
ConstantRef memberOffsetConstant = PassNStructPointerRewriting.getMemberOffsetConstant(programScope, structDefinition, memberName);
// Simple member value - unwind to value of member *((type*)&struct + OFFSET_MEMBER)
final RValue structPointer = pointerDereference.getPointer();
if(structPointer instanceof ConstantValue) {
// Pointer to member type
ConstantCastValue structTypedPointer = new ConstantCastValue(new SymbolTypePointer(memberType), (ConstantValue) structPointer);
// Calculate member address (type*)&struct + OFFSET_MEMBER
ConstantBinary memberPointer = new ConstantBinary(structTypedPointer, Operators.PLUS, memberOffsetConstant);
// Unwind to *((type*)&struct + OFFSET_MEMBER)
PointerDereferenceSimple memberDeref = new PointerDereferenceSimple(memberPointer);
return new ValueSourcePointerDereferenceSimple(memberDeref, memberType, memberArraySpec);
} else {
Scope scope = programScope.getScope(currentBlock.getScope());
Variable memberAddress = scope.addVariableIntermediate();
memberAddress.setType(new SymbolTypePointer(memberType));
CastValue structTypedPointer = new CastValue(new SymbolTypePointer(memberType), structPointer);
// Add statement $1 = (memberType*)ptr_struct + OFFSET_MEMBER
stmtIt.add(new StatementAssignment((LValue) memberAddress.getRef(), structTypedPointer, Operators.PLUS, memberOffsetConstant, true, currentStmt.getSource(), currentStmt.getComments()));
// Unwind to *((memberType*)ptr_struct+OFFSET_MEMBER)
PointerDereferenceSimple memberDeref = new PointerDereferenceSimple(memberAddress.getRef());
return new ValueSourcePointerDereferenceSimple(memberDeref, memberType, memberArraySpec);
}
public LValue getBulkLValue(ProgramScope scope) {
return pointerDereference;
}
@Override
public RValue getBulkRValue(ProgramScope scope) {
return new MemcpyValue(pointerDereference, getByteSize(scope), getSymbolType());
}
@Override
public ValueSource getMemberUnwinding(String memberName, Program program, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
StructDefinition structDefinition = ((SymbolTypeStruct) getSymbolType()).getStructDefinition(programScope);
final SymbolType memberType = structDefinition.getMember(memberName).getType();
final ArraySpec memberArraySpec = structDefinition.getMember(memberName).getArraySpec();
ConstantRef memberOffsetConstant = PassNStructPointerRewriting.getMemberOffsetConstant(programScope, structDefinition, memberName);
// Simple member value - unwind to value of member *((type*)&struct + OFFSET_MEMBER)
final RValue structPointer = pointerDereference.getPointer();
if(structPointer instanceof ConstantValue) {
// Pointer to member type
ConstantCastValue structTypedPointer = new ConstantCastValue(new SymbolTypePointer(memberType), (ConstantValue) structPointer);
// Calculate member address (type*)&struct + OFFSET_MEMBER
ConstantBinary memberPointer = new ConstantBinary(structTypedPointer, Operators.PLUS, memberOffsetConstant);
// Unwind to *((type*)&struct + OFFSET_MEMBER)
PointerDereferenceSimple memberDeref = new PointerDereferenceSimple(memberPointer);
return new ValueSourcePointerDereferenceSimple(memberDeref, memberType, memberArraySpec);
} else {
return null;
Scope scope = programScope.getScope(currentBlock.getScope());
Variable memberAddress = scope.addVariableIntermediate();
memberAddress.setType(new SymbolTypePointer(memberType));
CastValue structTypedPointer = new CastValue(new SymbolTypePointer(memberType), structPointer);
// Add statement $1 = (memberType*)ptr_struct + OFFSET_MEMBER
stmtIt.previous();
stmtIt.add(new StatementAssignment((LValue) memberAddress.getRef(), structTypedPointer, Operators.PLUS, memberOffsetConstant, true, currentStmt.getSource(), currentStmt.getComments()));
stmtIt.next();
// Unwind to *((memberType*)ptr_struct+OFFSET_MEMBER)
PointerDereferenceSimple memberDeref = new PointerDereferenceSimple(memberAddress.getRef());
return new ValueSourcePointerDereferenceSimple(memberDeref, memberType, memberArraySpec);
}
}
}

View File

@ -1,7 +1,9 @@
package dk.camelot64.kickc.passes.unwinding;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.operators.OperatorSizeOf;
import dk.camelot64.kickc.model.InternalError;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.StructVariableMemberUnwinding;
import dk.camelot64.kickc.model.operators.Operators;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.symbols.ArraySpec;
@ -14,18 +16,15 @@ import dk.camelot64.kickc.model.types.SymbolTypeStruct;
import dk.camelot64.kickc.model.values.*;
import dk.camelot64.kickc.passes.PassNStructPointerRewriting;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
/** Value Source for a variable */
public class ValueSourceStructVariable extends ValueSourceBase {
public class ValueSourceVariable extends ValueSourceBase {
/** The variable. */
private final Variable variable;
public ValueSourceStructVariable(Variable variable) {
public ValueSourceVariable(Variable variable) {
this.variable = variable;
}
@ -46,7 +45,9 @@ public class ValueSourceStructVariable extends ValueSourceBase {
@Override
public RValue getSimpleValue(ProgramScope programScope) {
return new ConstantSymbolPointer(variable.getRef());
// Historically this returned a pointer - why?
//return new ConstantSymbolPointer(variable.getRef());
return variable.getRef();
}
@Override
@ -63,8 +64,8 @@ public class ValueSourceStructVariable extends ValueSourceBase {
}
@Override
public ValueSource getMemberUnwinding(String memberName, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
if(getSymbolType() instanceof SymbolTypeStruct) {
public ValueSource getMemberUnwinding(String memberName, Program program, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
if(variable.isStructClassic()) {
StructDefinition structDefinition = ((SymbolTypeStruct) getSymbolType()).getStructDefinition(programScope);
final SymbolType memberType = structDefinition.getMember(memberName).getType();
final ArraySpec memberArraySpec = structDefinition.getMember(memberName).getArraySpec();
@ -78,8 +79,14 @@ public class ValueSourceStructVariable extends ValueSourceBase {
// Unwind to *((type*)&struct + OFFSET_MEMBER)
PointerDereferenceSimple memberDeref = new PointerDereferenceSimple(memberPointer);
return new ValueSourcePointerDereferenceSimple(memberDeref, memberType, memberArraySpec);
} else if(variable.isStructUnwind()) {
StructVariableMemberUnwinding structVariableMemberUnwinding = program.getStructVariableMemberUnwinding();
final StructVariableMemberUnwinding.VariableUnwinding variableUnwinding = structVariableMemberUnwinding.getVariableUnwinding(variable.getRef());
final SymbolVariableRef memberUnwound = variableUnwinding.getMemberUnwound(memberName);
final Variable memberVariable = programScope.getVar(memberUnwound);
return new ValueSourceVariable(memberVariable);
} else {
return null;
throw new InternalError("Not implemented!");
}
}

View File

@ -3,22 +3,17 @@ package dk.camelot64.kickc.passes.unwinding;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.Initializers;
import dk.camelot64.kickc.model.InternalError;
import dk.camelot64.kickc.model.operators.OperatorSizeOf;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.symbols.ArraySpec;
import dk.camelot64.kickc.model.symbols.ProgramScope;
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.SymbolTypeStruct;
import dk.camelot64.kickc.model.values.ConstantValue;
import dk.camelot64.kickc.model.values.LValue;
import dk.camelot64.kickc.model.values.MemsetValue;
import dk.camelot64.kickc.model.values.RValue;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
/** Value Source for a zero value. */
@ -53,7 +48,7 @@ public class ValueSourceZero extends ValueSourceBase {
}
@Override
public ValueSource getMemberUnwinding(String memberName, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
public ValueSource getMemberUnwinding(String memberName, Program program, ProgramScope programScope, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt) {
StructDefinition structDefinition = ((SymbolTypeStruct) getSymbolType()).getStructDefinition(programScope);
final SymbolType memberType = structDefinition.getMember(memberName).getType();
final ArraySpec memberArraySpec = structDefinition.getMember(memberName).getArraySpec();

View File

@ -42,7 +42,7 @@ Created struct value member variable (byte) startProcessing::center_y
Created struct value member variable (byte) startProcessing::center_dist
Converted struct value to member variables (struct ProcessingChar) startProcessing::center
Converted procedure struct value parameter to member unwinding (void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (byte) startProcessing::center_dist)
Adding struct value member variable copy *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE)
Adding value bulk copy *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE)
Converted procedure call LValue to member unwinding { (byte~) main::$5_x, (byte~) main::$5_y, (byte~) main::$5_dist } ← call getCharToProcess
Adding struct value member variable copy (byte) main::center_x ← (byte~) main::$5_x
Adding struct value member variable copy (byte) main::center_y ← (byte~) main::$5_y

View File

@ -71,10 +71,10 @@ show_letter::@1: scope:[show_letter] from show_letter show_letter::@9
[28] (signed word) show_letter::current_y#4 ← phi( show_letter/(signed word) 0 show_letter::@9/(signed word) show_letter::current_y#11 )
[28] (signed word) show_letter::current_x#4 ← phi( show_letter/(signed word) 0 show_letter::@9/(signed word) show_letter::current_x#11 )
[28] (byte) show_letter::i#10 ← phi( show_letter/(byte) 0 show_letter::@9/(byte) show_letter::i#1 )
[29] (byte~) show_letter::$32 ← (byte) show_letter::i#10 << (byte) 3
[30] (byte~) show_letter::$20 ← (byte~) show_letter::$32 + (byte) show_letter::i#10
[31] (signed word) show_letter::to_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20)
[32] (signed word) show_letter::to_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20)
[29] (byte~) show_letter::$24 ← (byte) show_letter::i#10 << (byte) 3
[30] (byte~) show_letter::$20 ← (byte~) show_letter::$24 + (byte) show_letter::i#10
[31] (signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20)
[32] (signed word) show_letter::to_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20)
[33] (signed word) show_letter::to_x#1 ← (signed word) show_letter::to_x#0 - (signed byte) $32
[34] (signed word) show_letter::to_y#1 ← (signed word) show_letter::to_y#0 - (signed word) $96
[35] (signed word) rotate::vector_x#0 ← (signed word) show_letter::to_x#1
@ -89,10 +89,10 @@ show_letter::@6: scope:[show_letter] from show_letter::@1
[42] (signed word) show_letter::to_y#2 ← (signed word) rotate::return_y#0
[43] (signed word) show_letter::current_x#10 ← (signed word) show_letter::to_x#2 + (signed byte) $64
[44] (signed word) show_letter::current_y#10 ← (signed word) show_letter::to_y#2 + (signed byte) $64
[45] (byte~) show_letter::$34 ← (byte) show_letter::i#10 << (byte) 3
[46] (byte~) show_letter::$21 ← (byte~) show_letter::$34 + (byte) show_letter::i#10
[47] (signed word) show_letter::via_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21)
[48] (signed word) show_letter::via_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21)
[45] (byte~) show_letter::$26 ← (byte) show_letter::i#10 << (byte) 3
[46] (byte~) show_letter::$21 ← (byte~) show_letter::$26 + (byte) show_letter::i#10
[47] (signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21)
[48] (signed word) show_letter::via_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21)
[49] (signed word) show_letter::via_x#1 ← (signed word) show_letter::via_x#0 - (signed byte) $32
[50] (signed word) show_letter::via_y#1 ← (signed word) show_letter::via_y#0 - (signed word) $96
[51] (signed word) rotate::vector_x#1 ← (signed word) show_letter::via_x#1
@ -107,8 +107,8 @@ show_letter::@7: scope:[show_letter] from show_letter::@6
[58] (signed word) show_letter::via_y#2 ← (signed word) rotate::return_y#1
[59] (signed word) show_letter::segment_via_x#0 ← (signed word) show_letter::via_x#2 + (signed byte) $64
[60] (signed word) show_letter::segment_via_y#0 ← (signed word) show_letter::via_y#2 + (signed byte) $64
[61] (byte~) show_letter::$36 ← (byte) show_letter::i#10 << (byte) 3
[62] (byte~) show_letter::$22 ← (byte~) show_letter::$36 + (byte) show_letter::i#10
[61] (byte~) show_letter::$28 ← (byte) show_letter::i#10 << (byte) 3
[62] (byte~) show_letter::$22 ← (byte~) show_letter::$28 + (byte) show_letter::i#10
[63] (byte) show_letter::segment_type#0 ← *((byte*)(const struct Segment*) letter_c + (byte~) show_letter::$22)
[64] if((byte) show_letter::segment_type#0==(const byte) MOVE_TO) goto show_letter::@3
to:show_letter::@4

View File

@ -199,47 +199,62 @@ Adding struct value member variable copy (signed word) spline_8segB::i_x ← (si
Adding struct value member variable copy (signed word) spline_8segB::i_y ← (signed word~) spline_8segB::$29
Adding struct value member variable copy *((signed word*~) spline_8segB::$35 + (number~) spline_8segB::$32) ← (signed word)(number~) spline_8segB::$19
Adding struct value member variable copy *((signed word*~) spline_8segB::$36 + (number~) spline_8segB::$32) ← (signed word)(number~) spline_8segB::$21
Adding struct value member variable copy (signed word) show_letter::current_x ← (signed word) 0
Adding struct value member variable copy (signed word) show_letter::current_y ← (signed word) 0
Adding struct value member variable copy (signed word) show_letter::to_x ← *((signed word*~) show_letter::$24 + (byte~) show_letter::$20)
Adding struct value member variable copy (signed word) show_letter::to_y ← *((signed word*~) show_letter::$26 + (byte~) show_letter::$20)
Unwinding value copy (struct SplineVector16) show_letter::current ← { x: (signed word) 0, y: (signed word) 0 }
Adding value simple copy (signed word) show_letter::current_x ← (signed word) 0
Adding value simple copy (signed word) show_letter::current_y ← (signed word) 0
Unwinding value copy (struct SplineVector16) show_letter::to ← *((const struct Segment*) letter_c + (byte~) show_letter::$20).to
Adding value simple copy (signed word) show_letter::to_x ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$20)
Adding value simple copy (signed word) show_letter::to_y ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20)
Adding struct value member variable copy (signed word) show_letter::to_x ← (signed word)(number~) show_letter::$0
Adding struct value member variable copy (signed word) show_letter::to_y ← (signed word)(number~) show_letter::$1
Converted procedure call LValue to member unwinding { (signed word~) show_letter::$2_x, (signed word~) show_letter::$2_y } ← call rotate (struct SplineVector16) show_letter::to (byte) show_letter::angle
Converted procedure struct value parameter to member unwinding in call { (signed word~) show_letter::$2_x, (signed word~) show_letter::$2_y } ← call rotate (signed word) show_letter::to_x (signed word) show_letter::to_y (byte) show_letter::angle
Adding struct value member variable copy (signed word) show_letter::to_x ← (signed word~) show_letter::$2_x
Adding struct value member variable copy (signed word) show_letter::to_y ← (signed word~) show_letter::$2_y
Unwinding value copy (struct SplineVector16) show_letter::to ← (struct SplineVector16~) show_letter::$2
Adding value simple copy (signed word) show_letter::to_x ← (signed word~) show_letter::$2_x
Adding value simple copy (signed word) show_letter::to_y ← (signed word~) show_letter::$2_y
Adding struct value member variable copy (signed word) show_letter::to_x ← (signed word)(number~) show_letter::$3
Adding struct value member variable copy (signed word) show_letter::to_y ← (signed word)(number~) show_letter::$4
Adding struct value member variable copy (signed word) show_letter::via_x ← *((signed word*~) show_letter::$28 + (byte~) show_letter::$21)
Adding struct value member variable copy (signed word) show_letter::via_y ← *((signed word*~) show_letter::$30 + (byte~) show_letter::$21)
Unwinding value copy (struct SplineVector16) show_letter::via ← *((const struct Segment*) letter_c + (byte~) show_letter::$21).via
Adding value simple copy (signed word) show_letter::via_x ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$21)
Adding value simple copy (signed word) show_letter::via_y ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21)
Adding struct value member variable copy (signed word) show_letter::via_x ← (signed word)(number~) show_letter::$5
Adding struct value member variable copy (signed word) show_letter::via_y ← (signed word)(number~) show_letter::$6
Converted procedure call LValue to member unwinding { (signed word~) show_letter::$7_x, (signed word~) show_letter::$7_y } ← call rotate (struct SplineVector16) show_letter::via (byte) show_letter::angle
Converted procedure struct value parameter to member unwinding in call { (signed word~) show_letter::$7_x, (signed word~) show_letter::$7_y } ← call rotate (signed word) show_letter::via_x (signed word) show_letter::via_y (byte) show_letter::angle
Adding struct value member variable copy (signed word) show_letter::via_x ← (signed word~) show_letter::$7_x
Adding struct value member variable copy (signed word) show_letter::via_y ← (signed word~) show_letter::$7_y
Unwinding value copy (struct SplineVector16) show_letter::via ← (struct SplineVector16~) show_letter::$7
Adding value simple copy (signed word) show_letter::via_x ← (signed word~) show_letter::$7_x
Adding value simple copy (signed word) show_letter::via_y ← (signed word~) show_letter::$7_y
Adding struct value member variable copy (signed word) show_letter::via_x ← (signed word)(number~) show_letter::$8
Adding struct value member variable copy (signed word) show_letter::via_y ← (signed word)(number~) show_letter::$9
Adding struct value member variable copy (byte) show_letter::segment_type ← *((const struct Segment*) letter_c + (byte~) show_letter::$22).type
Adding struct value member variable copy (struct SplineVector16) show_letter::segment_to ← (struct SplineVector16) show_letter::to
Adding struct value member variable copy (struct SplineVector16) show_letter::segment_via ← (struct SplineVector16) show_letter::via
Postponing unwinding for (struct SplineVector16) show_letter::current ← (struct Segment) show_letter::segment.to
Unwinding value copy (struct SplineVector16) show_letter::current ← (struct Segment) show_letter::segment.to
Adding value simple copy (signed word) show_letter::current_x ← (signed word) show_letter::segment_to_x
Adding value simple copy (signed word) show_letter::current_y ← (signed word) show_letter::segment_to_y
Postponing unwinding for (void~) show_letter::$17 ← call spline_8segB (struct SplineVector16) show_letter::current (struct Segment) show_letter::segment.via (struct Segment) show_letter::segment.to
Postponing unwinding for (void~) show_letter::$17 ← call spline_8segB (struct SplineVector16) show_letter::current (struct Segment) show_letter::segment.via (struct Segment) show_letter::segment.to
Converted procedure struct value parameter to member unwinding in call (void~) show_letter::$17 ← call spline_8segB (signed word) show_letter::current_x (signed word) show_letter::current_y (struct Segment) show_letter::segment.via (struct Segment) show_letter::segment.to
Postponing unwinding for (struct SplineVector16) show_letter::current ← (struct Segment) show_letter::segment.to
Postponing unwinding for (struct SplineVector16) show_letter::current ← (struct Segment) show_letter::segment.to
Adding struct value member variable copy (signed word) bitmap_plot_spline_8seg::current_x ← *((signed word*~) bitmap_plot_spline_8seg::$10 + (number~) bitmap_plot_spline_8seg::$6)
Adding struct value member variable copy (signed word) bitmap_plot_spline_8seg::current_y ← *((signed word*~) bitmap_plot_spline_8seg::$11 + (number~) bitmap_plot_spline_8seg::$6)
Adding struct value member variable copy (signed word) bitmap_plot_spline_8seg::current_x ← *((signed word*~) bitmap_plot_spline_8seg::$12 + (byte~) bitmap_plot_spline_8seg::$9)
Adding struct value member variable copy (signed word) bitmap_plot_spline_8seg::current_y ← *((signed word*~) bitmap_plot_spline_8seg::$13 + (byte~) bitmap_plot_spline_8seg::$9)
Unwinding value copy (struct SplineVector16) show_letter::current ← (struct Segment) show_letter::segment.to
Adding value simple copy (signed word) show_letter::current_x ← (signed word) show_letter::segment_to_x
Adding value simple copy (signed word) show_letter::current_y ← (signed word) show_letter::segment_to_y
Unwinding value copy (struct SplineVector16) show_letter::current ← (struct Segment) show_letter::segment.to
Adding value simple copy (signed word) show_letter::current_x ← (signed word) show_letter::segment_to_x
Adding value simple copy (signed word) show_letter::current_y ← (signed word) show_letter::segment_to_y
Unwinding value copy (struct SplineVector16) bitmap_plot_spline_8seg::current ← *((const struct SplineVector16*) SPLINE_8SEG + (number~) bitmap_plot_spline_8seg::$6)
Adding value simple copy (signed word) bitmap_plot_spline_8seg::current_x ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (number~) bitmap_plot_spline_8seg::$6)
Adding value simple copy (signed word) bitmap_plot_spline_8seg::current_y ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (number~) bitmap_plot_spline_8seg::$6)
Unwinding value copy (struct SplineVector16) bitmap_plot_spline_8seg::current ← *((const struct SplineVector16*) SPLINE_8SEG + (byte~) bitmap_plot_spline_8seg::$9)
Adding value simple copy (signed word) bitmap_plot_spline_8seg::current_x ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) bitmap_plot_spline_8seg::$9)
Adding value simple copy (signed word) bitmap_plot_spline_8seg::current_y ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) bitmap_plot_spline_8seg::$9)
Adding struct value member variable copy (signed word) rotate::rotated_x ← (signed word~) rotate::$16
Adding struct value member variable copy (signed word) rotate::rotated_y ← (signed word~) rotate::$19
Adding struct value member variable copy (signed word) rotate::return_x ← (signed word) rotate::rotated_x
Adding struct value member variable copy (signed word) rotate::return_y ← (signed word) rotate::rotated_y
Adding struct value member variable copy (signed word) rotate::return_x ← (signed word) rotate::return_x
Adding struct value member variable copy (signed word) rotate::return_y ← (signed word) rotate::return_y
Unwinding value copy (struct SplineVector16) rotate::return ← (struct SplineVector16) rotate::rotated
Adding value simple copy (signed word) rotate::return_x ← (signed word) rotate::rotated_x
Adding value simple copy (signed word) rotate::return_y ← (signed word) rotate::rotated_y
Unwinding value copy (struct SplineVector16) rotate::return ← (struct SplineVector16) rotate::return
Adding value simple copy (signed word) rotate::return_x ← (signed word) rotate::return_x
Adding value simple copy (signed word) rotate::return_y ← (signed word) rotate::return_y
Converted procedure struct return value to member unwinding return { (signed word) rotate::return_x, (signed word) rotate::return_y }
Replacing struct member reference (struct SplineVector16) spline_16seg::p1.x with member unwinding reference (signed word) spline_16seg::p1_x
Replacing struct member reference (struct SplineVector16) spline_16seg::p2.x with member unwinding reference (signed word) spline_16seg::p2_x
@ -340,33 +355,26 @@ Replacing struct member reference (struct SplineVector16) show_letter::via.y wit
Replacing struct member reference (struct SplineVector16) show_letter::via.x with member unwinding reference (signed word) show_letter::via_x
Replacing struct member reference (struct SplineVector16) show_letter::via.y with member unwinding reference (signed word) show_letter::via_y
Replacing struct member reference (struct Segment) show_letter::segment.type with member unwinding reference (byte) show_letter::segment_type
Replacing struct member reference (struct Segment) show_letter::segment.to with member unwinding reference (struct SplineVector16) show_letter::segment_to
Replacing struct member reference (struct Segment) show_letter::segment.type with member unwinding reference (byte) show_letter::segment_type
Replacing struct member reference (struct Segment) show_letter::segment.via with member unwinding reference (struct SplineVector16) show_letter::segment_via
Replacing struct member reference (struct Segment) show_letter::segment.to with member unwinding reference (struct SplineVector16) show_letter::segment_to
Replacing struct member reference (struct Segment) show_letter::segment.to with member unwinding reference (struct SplineVector16) show_letter::segment_to
Replacing struct member reference (struct SplineVector16) show_letter::current.x with member unwinding reference (signed word) show_letter::current_x
Replacing struct member reference (struct SplineVector16) show_letter::current.y with member unwinding reference (signed word) show_letter::current_y
Replacing struct member reference (struct Segment) show_letter::segment.to with member unwinding reference (struct SplineVector16) show_letter::segment_to
Replacing struct member reference (struct Segment) show_letter::segment.to with member unwinding reference (struct SplineVector16) show_letter::segment_to
Replacing struct member reference (struct Segment) show_letter::segment.to with member unwinding reference (struct SplineVector16) show_letter::segment_to
Replacing struct member reference (struct SplineVector16) bitmap_plot_spline_8seg::current.x with member unwinding reference (signed word) bitmap_plot_spline_8seg::current_x
Replacing struct member reference (struct SplineVector16) bitmap_plot_spline_8seg::current.y with member unwinding reference (signed word) bitmap_plot_spline_8seg::current_y
Replacing struct member reference (struct SplineVector16) rotate::vector.x with member unwinding reference (signed word) rotate::vector_x
Replacing struct member reference (struct SplineVector16) rotate::vector.y with member unwinding reference (signed word) rotate::vector_y
Replacing struct member reference (struct SplineVector16) rotate::vector.y with member unwinding reference (signed word) rotate::vector_y
Replacing struct member reference (struct SplineVector16) rotate::vector.x with member unwinding reference (signed word) rotate::vector_x
Adding struct value member variable copy (signed word) show_letter::segment_to_x ← (signed word) show_letter::to_x
Adding struct value member variable copy (signed word) show_letter::segment_to_y ← (signed word) show_letter::to_y
Adding struct value member variable copy (signed word) show_letter::segment_via_x ← (signed word) show_letter::via_x
Adding struct value member variable copy (signed word) show_letter::segment_via_y ← (signed word) show_letter::via_y
Adding struct value member variable copy (signed word) show_letter::current_x ← (signed word) show_letter::segment_to_x
Adding struct value member variable copy (signed word) show_letter::current_y ← (signed word) show_letter::segment_to_y
Unwinding value copy (struct SplineVector16) show_letter::segment_to ← (struct SplineVector16) show_letter::to
Adding value simple copy (signed word) show_letter::segment_to_x ← (signed word) show_letter::to_x
Adding value simple copy (signed word) show_letter::segment_to_y ← (signed word) show_letter::to_y
Unwinding value copy (struct SplineVector16) show_letter::segment_via ← (struct SplineVector16) show_letter::via
Adding value simple copy (signed word) show_letter::segment_via_x ← (signed word) show_letter::via_x
Adding value simple copy (signed word) show_letter::segment_via_y ← (signed word) show_letter::via_y
Converted procedure struct value parameter to member unwinding in call (void~) show_letter::$17 ← call spline_8segB (signed word) show_letter::current_x (signed word) show_letter::current_y (signed word) show_letter::segment_via_x (signed word) show_letter::segment_via_y (signed word) show_letter::segment_to_x (signed word) show_letter::segment_to_y
Adding struct value member variable copy (signed word) show_letter::current_x ← (signed word) show_letter::segment_to_x
Adding struct value member variable copy (signed word) show_letter::current_y ← (signed word) show_letter::segment_to_y
Adding struct value member variable copy (signed word) show_letter::current_x ← (signed word) show_letter::segment_to_x
Adding struct value member variable copy (signed word) show_letter::current_y ← (signed word) show_letter::segment_to_y
Replacing struct member reference (struct SplineVector16) show_letter::segment_to.x with member unwinding reference (signed word) show_letter::segment_to_x
Replacing struct member reference (struct SplineVector16) show_letter::segment_to.y with member unwinding reference (signed word) show_letter::segment_to_y
Rewriting struct pointer member access *((const struct Segment*) letter_c + (byte~) show_letter::$22).type
@ -1409,12 +1417,8 @@ show_letter::@1: scope:[show_letter] from show_letter show_letter::@5
(byte) show_letter::angle#1 ← phi( show_letter/(byte) show_letter::angle#3 show_letter::@5/(byte) show_letter::angle#4 )
(byte) show_letter::i#2 ← phi( show_letter/(byte) show_letter::i#0 show_letter::@5/(byte) show_letter::i#1 )
(byte~) show_letter::$20 ← (byte) show_letter::i#2 * (const byte) SIZEOF_STRUCT_SEGMENT
(signed word*~) show_letter::$24 ← (signed word*)(signed word*~) show_letter::$23 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
(signed word) show_letter::to_x#0 ← *((signed word*~) show_letter::$24 + (byte~) show_letter::$20)
(signed word*~) show_letter::$23 ← (signed word*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TO
(signed word*~) show_letter::$26 ← (signed word*)(signed word*~) show_letter::$25 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
(signed word) show_letter::to_y#0 ← *((signed word*~) show_letter::$26 + (byte~) show_letter::$20)
(signed word*~) show_letter::$25 ← (signed word*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TO
(signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$20)
(signed word) show_letter::to_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20)
(number~) show_letter::$0 ← (signed word) show_letter::to_x#0 - (number) $32
(number~) show_letter::$1 ← (signed word) show_letter::to_y#0 - (number) $96
(signed word) show_letter::to_x#1 ← (signed word)(number~) show_letter::$0
@ -1442,12 +1446,8 @@ show_letter::@11: scope:[show_letter] from show_letter::@1
(signed word) show_letter::to_x#3 ← (signed word)(number~) show_letter::$3
(signed word) show_letter::to_y#3 ← (signed word)(number~) show_letter::$4
(byte~) show_letter::$21 ← (byte) show_letter::i#3 * (const byte) SIZEOF_STRUCT_SEGMENT
(signed word*~) show_letter::$28 ← (signed word*)(signed word*~) show_letter::$27 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
(signed word) show_letter::via_x#0 ← *((signed word*~) show_letter::$28 + (byte~) show_letter::$21)
(signed word*~) show_letter::$27 ← (signed word*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_VIA
(signed word*~) show_letter::$30 ← (signed word*)(signed word*~) show_letter::$29 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
(signed word) show_letter::via_y#0 ← *((signed word*~) show_letter::$30 + (byte~) show_letter::$21)
(signed word*~) show_letter::$29 ← (signed word*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_VIA
(signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$21)
(signed word) show_letter::via_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21)
(number~) show_letter::$5 ← (signed word) show_letter::via_x#0 - (number) $32
(number~) show_letter::$6 ← (signed word) show_letter::via_y#0 - (number) $96
(signed word) show_letter::via_x#1 ← (signed word)(number~) show_letter::$5
@ -1477,8 +1477,8 @@ show_letter::@12: scope:[show_letter] from show_letter::@11
(signed word) show_letter::via_x#3 ← (signed word)(number~) show_letter::$8
(signed word) show_letter::via_y#3 ← (signed word)(number~) show_letter::$9
(byte~) show_letter::$22 ← (byte) show_letter::i#4 * (const byte) SIZEOF_STRUCT_SEGMENT
(byte*~) show_letter::$31 ← (byte*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TYPE
(byte) show_letter::segment_type#0 ← *((byte*~) show_letter::$31 + (byte~) show_letter::$22)
(byte*~) show_letter::$23 ← (byte*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TYPE
(byte) show_letter::segment_type#0 ← *((byte*~) show_letter::$23 + (byte~) show_letter::$22)
(signed word) show_letter::segment_to_x#0 ← (signed word) show_letter::to_x#4
(signed word) show_letter::segment_to_y#0 ← (signed word) show_letter::to_y#4
(signed word) show_letter::segment_via_x#0 ← (signed word) show_letter::via_x#3
@ -1580,10 +1580,8 @@ show_letter::@return: scope:[show_letter] from show_letter::@5
(void()) bitmap_plot_spline_8seg()
bitmap_plot_spline_8seg: scope:[bitmap_plot_spline_8seg] from show_letter::@13
(number~) bitmap_plot_spline_8seg::$6 ← (number) 0 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16
(signed word*~) bitmap_plot_spline_8seg::$10 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
(signed word) bitmap_plot_spline_8seg::current_x#0 ← *((signed word*~) bitmap_plot_spline_8seg::$10 + (number~) bitmap_plot_spline_8seg::$6)
(signed word*~) bitmap_plot_spline_8seg::$11 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
(signed word) bitmap_plot_spline_8seg::current_y#0 ← *((signed word*~) bitmap_plot_spline_8seg::$11 + (number~) bitmap_plot_spline_8seg::$6)
(signed word) bitmap_plot_spline_8seg::current_x#0 ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (number~) bitmap_plot_spline_8seg::$6)
(signed word) bitmap_plot_spline_8seg::current_y#0 ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (number~) bitmap_plot_spline_8seg::$6)
(byte) bitmap_plot_spline_8seg::n#0 ← (byte) 1
to:bitmap_plot_spline_8seg::@1
bitmap_plot_spline_8seg::@1: scope:[bitmap_plot_spline_8seg] from bitmap_plot_spline_8seg bitmap_plot_spline_8seg::@3
@ -1593,11 +1591,11 @@ bitmap_plot_spline_8seg::@1: scope:[bitmap_plot_spline_8seg] from bitmap_plot_s
(word~) bitmap_plot_spline_8seg::$0 ← ((word)) (signed word) bitmap_plot_spline_8seg::current_x#2
(word~) bitmap_plot_spline_8seg::$1 ← ((word)) (signed word) bitmap_plot_spline_8seg::current_y#2
(byte~) bitmap_plot_spline_8seg::$7 ← (byte) bitmap_plot_spline_8seg::n#2 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16
(signed word*~) bitmap_plot_spline_8seg::$14 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
(word~) bitmap_plot_spline_8seg::$2 ← ((word)) *((signed word*~) bitmap_plot_spline_8seg::$14 + (byte~) bitmap_plot_spline_8seg::$7)
(signed word*~) bitmap_plot_spline_8seg::$10 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
(word~) bitmap_plot_spline_8seg::$2 ← ((word)) *((signed word*~) bitmap_plot_spline_8seg::$10 + (byte~) bitmap_plot_spline_8seg::$7)
(byte~) bitmap_plot_spline_8seg::$8 ← (byte) bitmap_plot_spline_8seg::n#2 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16
(signed word*~) bitmap_plot_spline_8seg::$15 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
(word~) bitmap_plot_spline_8seg::$3 ← ((word)) *((signed word*~) bitmap_plot_spline_8seg::$15 + (byte~) bitmap_plot_spline_8seg::$8)
(signed word*~) bitmap_plot_spline_8seg::$11 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
(word~) bitmap_plot_spline_8seg::$3 ← ((word)) *((signed word*~) bitmap_plot_spline_8seg::$11 + (byte~) bitmap_plot_spline_8seg::$8)
(word) bitmap_line::x1#1 ← (word~) bitmap_plot_spline_8seg::$0
(word) bitmap_line::y1#1 ← (word~) bitmap_plot_spline_8seg::$1
(word) bitmap_line::x2#1 ← (word~) bitmap_plot_spline_8seg::$2
@ -1607,10 +1605,8 @@ bitmap_plot_spline_8seg::@1: scope:[bitmap_plot_spline_8seg] from bitmap_plot_s
bitmap_plot_spline_8seg::@3: scope:[bitmap_plot_spline_8seg] from bitmap_plot_spline_8seg::@1
(byte) bitmap_plot_spline_8seg::n#3 ← phi( bitmap_plot_spline_8seg::@1/(byte) bitmap_plot_spline_8seg::n#2 )
(byte~) bitmap_plot_spline_8seg::$9 ← (byte) bitmap_plot_spline_8seg::n#3 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16
(signed word*~) bitmap_plot_spline_8seg::$12 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
(signed word) bitmap_plot_spline_8seg::current_x#1 ← *((signed word*~) bitmap_plot_spline_8seg::$12 + (byte~) bitmap_plot_spline_8seg::$9)
(signed word*~) bitmap_plot_spline_8seg::$13 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
(signed word) bitmap_plot_spline_8seg::current_y#1 ← *((signed word*~) bitmap_plot_spline_8seg::$13 + (byte~) bitmap_plot_spline_8seg::$9)
(signed word) bitmap_plot_spline_8seg::current_x#1 ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) bitmap_plot_spline_8seg::$9)
(signed word) bitmap_plot_spline_8seg::current_y#1 ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) bitmap_plot_spline_8seg::$9)
(byte) bitmap_plot_spline_8seg::n#1 ← (byte) bitmap_plot_spline_8seg::n#3 + rangenext(1,8)
(bool~) bitmap_plot_spline_8seg::$5 ← (byte) bitmap_plot_spline_8seg::n#1 != rangelast(1,8)
if((bool~) bitmap_plot_spline_8seg::$5) goto bitmap_plot_spline_8seg::@1
@ -2132,10 +2128,6 @@ SYMBOL TABLE SSA
(word~) bitmap_plot_spline_8seg::$1
(signed word*~) bitmap_plot_spline_8seg::$10
(signed word*~) bitmap_plot_spline_8seg::$11
(signed word*~) bitmap_plot_spline_8seg::$12
(signed word*~) bitmap_plot_spline_8seg::$13
(signed word*~) bitmap_plot_spline_8seg::$14
(signed word*~) bitmap_plot_spline_8seg::$15
(word~) bitmap_plot_spline_8seg::$2
(word~) bitmap_plot_spline_8seg::$3
(bool~) bitmap_plot_spline_8seg::$5
@ -2618,18 +2610,10 @@ SYMBOL TABLE SSA
(byte~) show_letter::$20
(byte~) show_letter::$21
(byte~) show_letter::$22
(signed word*~) show_letter::$23
(signed word*~) show_letter::$24
(signed word*~) show_letter::$25
(signed word*~) show_letter::$26
(signed word*~) show_letter::$27
(signed word*~) show_letter::$28
(signed word*~) show_letter::$29
(byte*~) show_letter::$23
(signed word~) show_letter::$2_x
(signed word~) show_letter::$2_y
(number~) show_letter::$3
(signed word*~) show_letter::$30
(byte*~) show_letter::$31
(number~) show_letter::$4
(number~) show_letter::$5
(number~) show_letter::$6
@ -3020,8 +3004,8 @@ Inlining cast (word~) show_letter::$14 ← (word)(signed word) show_letter::segm
Inlining cast (word~) show_letter::$15 ← (word)(signed word) show_letter::segment_to_y#4
Inlining cast (word~) bitmap_plot_spline_8seg::$0 ← (word)(signed word) bitmap_plot_spline_8seg::current_x#2
Inlining cast (word~) bitmap_plot_spline_8seg::$1 ← (word)(signed word) bitmap_plot_spline_8seg::current_y#2
Inlining cast (word~) bitmap_plot_spline_8seg::$2 ← (word)*((signed word*~) bitmap_plot_spline_8seg::$14 + (byte~) bitmap_plot_spline_8seg::$7)
Inlining cast (word~) bitmap_plot_spline_8seg::$3 ← (word)*((signed word*~) bitmap_plot_spline_8seg::$15 + (byte~) bitmap_plot_spline_8seg::$8)
Inlining cast (word~) bitmap_plot_spline_8seg::$2 ← (word)*((signed word*~) bitmap_plot_spline_8seg::$10 + (byte~) bitmap_plot_spline_8seg::$7)
Inlining cast (word~) bitmap_plot_spline_8seg::$3 ← (word)*((signed word*~) bitmap_plot_spline_8seg::$11 + (byte~) bitmap_plot_spline_8seg::$8)
Inlining cast (signed word~) rotate::$0 ← (signed word)*((const signed byte*) COS + (byte) rotate::angle#2)
Inlining cast (signed word~) rotate::$2 ← (signed word)(signed dword~) rotate::$1
Inlining cast (signed word~) rotate::$5 ← (signed word)(signed dword~) rotate::$4
@ -3114,14 +3098,10 @@ Simplifying constant integer cast $fe
Simplifying constant integer cast $ff
Simplifying constant integer cast 9
Simplifying constant integer cast $3e7
Simplifying constant integer cast (signed word*~) show_letter::$23
Simplifying constant integer cast (signed word*~) show_letter::$25
Simplifying constant integer cast $32
Simplifying constant integer cast $96
Simplifying constant integer cast $64
Simplifying constant integer cast $64
Simplifying constant integer cast (signed word*~) show_letter::$27
Simplifying constant integer cast (signed word*~) show_letter::$29
Simplifying constant integer cast $32
Simplifying constant integer cast $96
Simplifying constant integer cast $64
@ -3544,7 +3524,7 @@ Identical Phi Values (byte*) bitmap_screen#7 (byte*) bitmap_screen#1
Identical Phi Values (byte*) bitmap_gfx#12 (byte*) bitmap_gfx#1
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [111] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7
Identified duplicate assignment right side [551] (byte~) bitmap_plot_spline_8seg::$8 ← (byte) bitmap_plot_spline_8seg::n#2 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16
Identified duplicate assignment right side [541] (byte~) bitmap_plot_spline_8seg::$8 ← (byte) bitmap_plot_spline_8seg::n#2 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) spline_8segB::$30 [50] if((byte) spline_8segB::n#1!=rangelast(0,7)) goto spline_8segB::@1
Simple Condition (bool~) memset::$1 [65] if((word) memset::num#2<=(byte) 0) goto memset::@1
@ -3569,10 +3549,10 @@ Simple Condition (bool~) mulf16s::$6 [337] if((signed word) mulf16s::b#4>=(signe
Simple Condition (bool~) main::$7 [418] if(*((const byte*) RASTER)!=(byte) $fe) goto main::@5
Simple Condition (bool~) main::$8 [421] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@7
Simple Condition (bool~) main::$9 [425] if((byte) main::w#1!=rangelast(0,$3c)) goto main::@5
Simple Condition (bool~) show_letter::$10 [501] if((byte) show_letter::segment_type#0==(const byte) MOVE_TO) goto show_letter::@2
Simple Condition (bool~) show_letter::$11 [507] if((byte) show_letter::segment_type#0==(const byte) SPLINE_TO) goto show_letter::@3
Simple Condition (bool~) show_letter::$19 [537] if((byte) show_letter::i#1!=rangelast(0,$15)) goto show_letter::@1
Simple Condition (bool~) bitmap_plot_spline_8seg::$5 [567] if((byte) bitmap_plot_spline_8seg::n#1!=rangelast(1,8)) goto bitmap_plot_spline_8seg::@1
Simple Condition (bool~) show_letter::$10 [493] if((byte) show_letter::segment_type#0==(const byte) MOVE_TO) goto show_letter::@2
Simple Condition (bool~) show_letter::$11 [499] if((byte) show_letter::segment_type#0==(const byte) SPLINE_TO) goto show_letter::@3
Simple Condition (bool~) show_letter::$19 [529] if((byte) show_letter::i#1!=rangelast(0,$15)) goto show_letter::@1
Simple Condition (bool~) bitmap_plot_spline_8seg::$5 [555] if((byte) bitmap_plot_spline_8seg::n#1!=rangelast(1,8)) goto bitmap_plot_spline_8seg::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting ! if()-condition to reversed if() [171] (bool~) bitmap_line::$7 ← ! (bool~) bitmap_line::$6
Rewriting && if()-condition to two if()s [170] (bool~) bitmap_line::$6 ← (bool~) bitmap_line::$4 && (bool~) bitmap_line::$5
@ -3582,18 +3562,10 @@ Constant right-side identified [38] (signed word*~) spline_8segB::$34 ← (signe
Constant right-side identified [56] (byte~) spline_8segB::$32 ← (byte) 8 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16
Constant right-side identified [57] (signed word*~) spline_8segB::$35 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
Constant right-side identified [59] (signed word*~) spline_8segB::$36 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant right-side identified [444] (signed word*~) show_letter::$23 ← (signed word*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TO
Constant right-side identified [447] (signed word*~) show_letter::$25 ← (signed word*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TO
Constant right-side identified [470] (signed word*~) show_letter::$27 ← (signed word*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_VIA
Constant right-side identified [473] (signed word*~) show_letter::$29 ← (signed word*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_VIA
Constant right-side identified [494] (byte*~) show_letter::$31 ← (byte*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TYPE
Constant right-side identified [539] (byte~) bitmap_plot_spline_8seg::$6 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16
Constant right-side identified [540] (signed word*~) bitmap_plot_spline_8seg::$10 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
Constant right-side identified [486] (byte*~) show_letter::$23 ← (byte*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TYPE
Constant right-side identified [531] (byte~) bitmap_plot_spline_8seg::$6 ← (byte) 0 * (const byte) SIZEOF_STRUCT_SPLINEVECTOR16
Constant right-side identified [539] (signed word*~) bitmap_plot_spline_8seg::$10 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
Constant right-side identified [542] (signed word*~) bitmap_plot_spline_8seg::$11 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant right-side identified [549] (signed word*~) bitmap_plot_spline_8seg::$14 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
Constant right-side identified [552] (signed word*~) bitmap_plot_spline_8seg::$15 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant right-side identified [561] (signed word*~) bitmap_plot_spline_8seg::$12 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
Constant right-side identified [563] (signed word*~) bitmap_plot_spline_8seg::$13 ← (signed word*)(const struct SplineVector16*) SPLINE_8SEG + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) spline_8segB::n#0 = 0
Constant (const signed word*) spline_8segB::$33 = (signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_X
@ -3636,19 +3608,11 @@ Constant (const byte) main::w#0 = 0
Constant (const signed word) show_letter::current_x#0 = 0
Constant (const signed word) show_letter::current_y#0 = 0
Constant (const byte) show_letter::i#0 = 0
Constant (const signed word*) show_letter::$23 = (signed word*)letter_c+OFFSET_STRUCT_SEGMENT_TO
Constant (const signed word*) show_letter::$25 = (signed word*)letter_c+OFFSET_STRUCT_SEGMENT_TO
Constant (const signed word*) show_letter::$27 = (signed word*)letter_c+OFFSET_STRUCT_SEGMENT_VIA
Constant (const signed word*) show_letter::$29 = (signed word*)letter_c+OFFSET_STRUCT_SEGMENT_VIA
Constant (const byte*) show_letter::$31 = (byte*)letter_c+OFFSET_STRUCT_SEGMENT_TYPE
Constant (const byte*) show_letter::$23 = (byte*)letter_c+OFFSET_STRUCT_SEGMENT_TYPE
Constant (const byte) bitmap_plot_spline_8seg::$6 = 0*SIZEOF_STRUCT_SPLINEVECTOR16
Constant (const byte) bitmap_plot_spline_8seg::n#0 = 1
Constant (const signed word*) bitmap_plot_spline_8seg::$10 = (signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_X
Constant (const signed word*) bitmap_plot_spline_8seg::$11 = (signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant (const byte) bitmap_plot_spline_8seg::n#0 = 1
Constant (const signed word*) bitmap_plot_spline_8seg::$14 = (signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_X
Constant (const signed word*) bitmap_plot_spline_8seg::$15 = (signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant (const signed word*) bitmap_plot_spline_8seg::$12 = (signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_X
Constant (const signed word*) bitmap_plot_spline_8seg::$13 = (signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_Y
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) bitmap_gfx#1 = bitmap_init::gfx#0
Constant (const byte*) bitmap_screen#1 = bitmap_init::screen#0
@ -3670,27 +3634,27 @@ Resolved ranged next value [116] bitmap_init::y#1 ← ++ bitmap_init::y#2 to ++
Resolved ranged comparison value [118] if(bitmap_init::y#1!=rangelast(0,$ff)) goto bitmap_init::@5 to (number) 0
Resolved ranged next value [423] main::w#1 ← ++ main::w#4 to ++
Resolved ranged comparison value [425] if(main::w#1!=rangelast(0,$3c)) goto main::@5 to (number) $3d
Resolved ranged next value [535] show_letter::i#1 ← ++ show_letter::i#10 to ++
Resolved ranged comparison value [537] if(show_letter::i#1!=rangelast(0,$15)) goto show_letter::@1 to (number) $16
Resolved ranged next value [565] bitmap_plot_spline_8seg::n#1 ← ++ bitmap_plot_spline_8seg::n#2 to ++
Resolved ranged comparison value [567] if(bitmap_plot_spline_8seg::n#1!=rangelast(1,8)) goto bitmap_plot_spline_8seg::@1 to (number) 9
Resolved ranged next value [527] show_letter::i#1 ← ++ show_letter::i#10 to ++
Resolved ranged comparison value [529] if(show_letter::i#1!=rangelast(0,$15)) goto show_letter::@1 to (number) $16
Resolved ranged next value [553] bitmap_plot_spline_8seg::n#1 ← ++ bitmap_plot_spline_8seg::n#2 to ++
Resolved ranged comparison value [555] if(bitmap_plot_spline_8seg::n#1!=rangelast(1,8)) goto bitmap_plot_spline_8seg::@1 to (number) 9
Simplifying constant evaluating to zero (byte) 0*(const byte) SIZEOF_STRUCT_SPLINEVECTOR16 in
Successful SSA optimization PassNSimplifyConstantZero
Simplifying expression containing zero (signed word*)SPLINE_8SEG in
Simplifying expression containing zero (signed word*)SPLINE_8SEG in
Simplifying expression containing zero (byte*)letter_c in
Simplifying expression containing zero (signed word*)SPLINE_8SEG in
Simplifying expression containing zero (signed word*)SPLINE_8SEG in
Simplifying expression containing zero (signed word*)SPLINE_8SEG in
Simplifying expression containing zero show_letter::$23 in [442] (signed word*~) show_letter::$24 ← (const signed word*) show_letter::$23 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
Simplifying expression containing zero show_letter::$27 in [468] (signed word*~) show_letter::$28 ← (const signed word*) show_letter::$27 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
Simplifying expression containing zero bitmap_plot_spline_8seg::$10 in [541] (signed word) bitmap_plot_spline_8seg::current_x#0 ← *((const signed word*) bitmap_plot_spline_8seg::$10 + (const byte) bitmap_plot_spline_8seg::$6)
Simplifying expression containing zero bitmap_plot_spline_8seg::$11 in [543] (signed word) bitmap_plot_spline_8seg::current_y#0 ← *((const signed word*) bitmap_plot_spline_8seg::$11 + (const byte) bitmap_plot_spline_8seg::$6)
Simplifying expression containing zero (signed word*)(struct SplineVector16*)letter_c+OFFSET_STRUCT_SEGMENT_TO in [442] (signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$20)
Simplifying expression containing zero (signed word*)(struct SplineVector16*)letter_c+OFFSET_STRUCT_SEGMENT_VIA in [464] (signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$21)
Simplifying expression containing zero (signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_X in [532] (signed word) bitmap_plot_spline_8seg::current_x#0 ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (const byte) bitmap_plot_spline_8seg::$6)
Simplifying expression containing zero (signed word*)SPLINE_8SEG in [532] (signed word) bitmap_plot_spline_8seg::current_x#0 ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X)
Simplifying expression containing zero (signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_Y in [533] (signed word) bitmap_plot_spline_8seg::current_y#0 ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (const byte) bitmap_plot_spline_8seg::$6)
Simplifying expression containing zero (signed word*)SPLINE_8SEG in [551] (signed word) bitmap_plot_spline_8seg::current_x#1 ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) bitmap_plot_spline_8seg::$9)
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable (void*) memset::return#2 and assignment [75] (void*) memset::return#2 ← (void*) memset::str#3
Eliminating unused variable (void*) memset::return#3 and assignment [77] (void*) memset::return#3 ← (void*) memset::str#3
Eliminating unused variable (struct SplineVector16) rotate::return#0 and assignment [352] (struct SplineVector16) rotate::return#0 ← struct-unwound {(signed word) rotate::return_x#2, (signed word) rotate::return_y#2}
Eliminating unused variable (struct SplineVector16) rotate::return#1 and assignment [353] (struct SplineVector16) rotate::return#1 ← struct-unwound {(signed word) rotate::return_x#2, (signed word) rotate::return_y#2}
Eliminating unused variable (struct SplineVector16) rotate::return#0 and assignment [348] (struct SplineVector16) rotate::return#0 ← struct-unwound {(signed word) rotate::return_x#2, (signed word) rotate::return_y#2}
Eliminating unused variable (struct SplineVector16) rotate::return#1 and assignment [349] (struct SplineVector16) rotate::return#1 ← struct-unwound {(signed word) rotate::return_x#2, (signed word) rotate::return_y#2}
Eliminating unused constant (const byte) bitmap_plot_spline_8seg::$6
Eliminating unused constant (const byte) OFFSET_STRUCT_SPLINEVECTOR16_X
Eliminating unused constant (const byte) OFFSET_STRUCT_SEGMENT_TYPE
@ -3748,23 +3712,17 @@ Alias (signed word) show_letter::segment_via_y#0 = (signed word~) show_letter::$
Alias (byte~) bitmap_plot_spline_8seg::$8 = (byte~) bitmap_plot_spline_8seg::$7
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) bitmap_line::$4 [96] if((word) bitmap_line::dx#0==(byte) 0) goto bitmap_line::@24
Simple Condition (bool~) bitmap_line::$5 [350] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4
Simple Condition (bool~) bitmap_line::$5 [346] if((word) bitmap_line::dy#0==(byte) 0) goto bitmap_line::@4
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [96] if((word) bitmap_line::dx#0!=(byte) 0) goto bitmap_line::@1
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [207] (byte~) main::vicSelectGfxBank1_toDd001_$1 ← > (const word) main::vicSelectGfxBank1_toDd001_$0
Constant right-side identified [211] (word~) main::toD0181_$1 ← (const word) main::toD0181_$0 & (word) $3fff
Constant right-side identified [214] (byte~) main::toD0181_$5 ← > (const word) main::toD0181_$4
Constant right-side identified [234] (signed word*~) show_letter::$26 ← (const signed word*) show_letter::$25 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant right-side identified [255] (signed word*~) show_letter::$30 ← (const signed word*) show_letter::$29 + (const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::vicSelectGfxBank1_toDd001_$1 = >main::vicSelectGfxBank1_toDd001_$0
Constant (const word) main::toD0181_$1 = main::toD0181_$0&$3fff
Constant (const byte) main::toD0181_$5 = >main::toD0181_$4
Constant (const signed word*) show_letter::$24 = show_letter::$23
Constant (const signed word*) show_letter::$26 = show_letter::$25+OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant (const signed word*) show_letter::$28 = show_letter::$27
Constant (const signed word*) show_letter::$30 = show_letter::$29+OFFSET_STRUCT_SPLINEVECTOR16_Y
Successful SSA optimization Pass2ConstantIdentification
Eliminating unused constant (const byte*) PRINT_SCREEN
Successful SSA optimization PassNEliminateUnusedVars
@ -3792,8 +3750,8 @@ Inlining Noop Cast [41] (byte*~) memset::$2 ← (byte*)(void*) memset::str#3 kee
Inlining Noop Cast [43] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3
Inlining Noop Cast [190] (word~) mulf16s::$10 ← (word)(signed word) mulf16s::b#4 keeping mulf16s::b#4
Inlining Noop Cast [196] (word~) mulf16s::$14 ← (word)(signed word) mulf16s::a#4 keeping mulf16s::a#4
Inlining Noop Cast [274] (word) bitmap_line::x2#1 ← (word)*((const signed word*) bitmap_plot_spline_8seg::$14 + (byte~) bitmap_plot_spline_8seg::$8) keeping *(bitmap_plot_spline_8seg::$14 + bitmap_plot_spline_8seg::$8)
Inlining Noop Cast [275] (word) bitmap_line::y2#1 ← (word)*((const signed word*) bitmap_plot_spline_8seg::$15 + (byte~) bitmap_plot_spline_8seg::$8) keeping *(bitmap_plot_spline_8seg::$15 + bitmap_plot_spline_8seg::$8)
Inlining Noop Cast [274] (word) bitmap_line::x2#1 ← (word)*((const signed word*) bitmap_plot_spline_8seg::$10 + (byte~) bitmap_plot_spline_8seg::$8) keeping *(bitmap_plot_spline_8seg::$10 + bitmap_plot_spline_8seg::$8)
Inlining Noop Cast [275] (word) bitmap_line::y2#1 ← (word)*((const signed word*) bitmap_plot_spline_8seg::$11 + (byte~) bitmap_plot_spline_8seg::$8) keeping *(bitmap_plot_spline_8seg::$11 + bitmap_plot_spline_8seg::$8)
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [78] (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$3 keeping bitmap_plot::plotter#0
Inlining Noop Cast [317] (signed byte~) rotate::$15 ← (signed byte)(byte~) rotate::$14 keeping rotate::$15
@ -3879,17 +3837,11 @@ Constant inlined bitmap_gfx#1 = (const byte*) BITMAP_GRAPHICS
Constant inlined main::toD0181_$0 = (word)(const byte*) BITMAP_SCREEN
Constant inlined show_letter::current_x#0 = (signed word) 0
Constant inlined main::toD0181_$6 = >(word)(const byte*) BITMAP_GRAPHICS/(byte) 4
Constant inlined show_letter::$24 = (signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO
Constant inlined main::toD0181_$5 = >(word)(const byte*) BITMAP_GRAPHICS
Constant inlined show_letter::$25 = (signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO
Constant inlined main::w#0 = (byte) 0
Constant inlined main::toD0181_$4 = (word)(const byte*) BITMAP_GRAPHICS
Constant inlined show_letter::$23 = (signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO
Constant inlined main::toD0181_$3 = >(word)(const byte*) BITMAP_SCREEN&(word) $3fff*(byte) 4
Constant inlined bitmap_plot_spline_8seg::$12 = (signed word*)(const struct SplineVector16*) SPLINE_8SEG
Constant inlined bitmap_plot_spline_8seg::$13 = (signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant inlined bitmap_plot_spline_8seg::$14 = (signed word*)(const struct SplineVector16*) SPLINE_8SEG
Constant inlined bitmap_plot_spline_8seg::$15 = (signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant inlined show_letter::$23 = (byte*)(const struct Segment*) letter_c
Constant inlined mulf_init::sqr1_hi#0 = (const byte*) mulf_sqr1_hi+(byte) 1
Constant inlined mulf_init::sqr1_lo#0 = (const byte*) mulf_sqr1_lo+(byte) 1
Constant inlined spline_8segB::n#0 = (byte) 0
@ -3900,18 +3852,12 @@ Constant inlined bitmap_plot_spline_8seg::$11 = (signed word*)(const struct Spli
Constant inlined mulf_init::c#0 = (byte) 0
Constant inlined main::toD0181_screen#0 = (const byte*) BITMAP_SCREEN
Constant inlined main::toD0181_gfx#0 = (const byte*) BITMAP_GRAPHICS
Constant inlined show_letter::$31 = (byte*)(const struct Segment*) letter_c
Constant inlined show_letter::$30 = (signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant inlined bitmap_init::bits#0 = (byte) $80
Constant inlined spline_8segB::$36 = (signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant inlined bitmap_init::bits#2 = (byte) $80
Constant inlined spline_8segB::$32 = (byte) 8*(const byte) SIZEOF_STRUCT_SPLINEVECTOR16
Constant inlined show_letter::$28 = (signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA
Constant inlined spline_8segB::$33 = (signed word*)(const struct SplineVector16*) SPLINE_8SEG
Constant inlined show_letter::$29 = (signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA
Constant inlined spline_8segB::$34 = (signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant inlined show_letter::$26 = (signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y
Constant inlined show_letter::$27 = (signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA
Constant inlined spline_8segB::$35 = (signed word*)(const struct SplineVector16*) SPLINE_8SEG
Constant inlined sgn_u16::return#3 = (byte) 1
Constant inlined sgn_u16::return#2 = (byte) -1
@ -3933,9 +3879,9 @@ Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in *((signed word*)SPLINE_8SEG+8*SIZEOF_STRUCT_SPLINEVECTOR16)
Consolidated array index constant in *((signed word*)SPLINE_8SEG+OFFSET_STRUCT_SPLINEVECTOR16_Y+8*SIZEOF_STRUCT_SPLINEVECTOR16)
Successful SSA optimization Pass2ConstantAdditionElimination
Alias (byte~) show_letter::$20 = (byte~) show_letter::$33
Alias (byte~) show_letter::$21 = (byte~) show_letter::$35
Alias (byte~) show_letter::$22 = (byte~) show_letter::$37
Alias (byte~) show_letter::$20 = (byte~) show_letter::$25
Alias (byte~) show_letter::$21 = (byte~) show_letter::$27
Alias (byte~) show_letter::$22 = (byte~) show_letter::$29
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) bitmap_clear::fgcol#2 (const byte) WHITE
Identical Phi Values (byte) bitmap_clear::bgcol#2 (const byte) BLACK
@ -4308,10 +4254,10 @@ show_letter::@1: scope:[show_letter] from show_letter show_letter::@9
[28] (signed word) show_letter::current_y#4 ← phi( show_letter/(signed word) 0 show_letter::@9/(signed word) show_letter::current_y#11 )
[28] (signed word) show_letter::current_x#4 ← phi( show_letter/(signed word) 0 show_letter::@9/(signed word) show_letter::current_x#11 )
[28] (byte) show_letter::i#10 ← phi( show_letter/(byte) 0 show_letter::@9/(byte) show_letter::i#1 )
[29] (byte~) show_letter::$32 ← (byte) show_letter::i#10 << (byte) 3
[30] (byte~) show_letter::$20 ← (byte~) show_letter::$32 + (byte) show_letter::i#10
[31] (signed word) show_letter::to_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20)
[32] (signed word) show_letter::to_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20)
[29] (byte~) show_letter::$24 ← (byte) show_letter::i#10 << (byte) 3
[30] (byte~) show_letter::$20 ← (byte~) show_letter::$24 + (byte) show_letter::i#10
[31] (signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20)
[32] (signed word) show_letter::to_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20)
[33] (signed word) show_letter::to_x#1 ← (signed word) show_letter::to_x#0 - (signed byte) $32
[34] (signed word) show_letter::to_y#1 ← (signed word) show_letter::to_y#0 - (signed word) $96
[35] (signed word) rotate::vector_x#0 ← (signed word) show_letter::to_x#1
@ -4326,10 +4272,10 @@ show_letter::@6: scope:[show_letter] from show_letter::@1
[42] (signed word) show_letter::to_y#2 ← (signed word) rotate::return_y#0
[43] (signed word) show_letter::current_x#10 ← (signed word) show_letter::to_x#2 + (signed byte) $64
[44] (signed word) show_letter::current_y#10 ← (signed word) show_letter::to_y#2 + (signed byte) $64
[45] (byte~) show_letter::$34 ← (byte) show_letter::i#10 << (byte) 3
[46] (byte~) show_letter::$21 ← (byte~) show_letter::$34 + (byte) show_letter::i#10
[47] (signed word) show_letter::via_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21)
[48] (signed word) show_letter::via_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21)
[45] (byte~) show_letter::$26 ← (byte) show_letter::i#10 << (byte) 3
[46] (byte~) show_letter::$21 ← (byte~) show_letter::$26 + (byte) show_letter::i#10
[47] (signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21)
[48] (signed word) show_letter::via_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21)
[49] (signed word) show_letter::via_x#1 ← (signed word) show_letter::via_x#0 - (signed byte) $32
[50] (signed word) show_letter::via_y#1 ← (signed word) show_letter::via_y#0 - (signed word) $96
[51] (signed word) rotate::vector_x#1 ← (signed word) show_letter::via_x#1
@ -4344,8 +4290,8 @@ show_letter::@7: scope:[show_letter] from show_letter::@6
[58] (signed word) show_letter::via_y#2 ← (signed word) rotate::return_y#1
[59] (signed word) show_letter::segment_via_x#0 ← (signed word) show_letter::via_x#2 + (signed byte) $64
[60] (signed word) show_letter::segment_via_y#0 ← (signed word) show_letter::via_y#2 + (signed byte) $64
[61] (byte~) show_letter::$36 ← (byte) show_letter::i#10 << (byte) 3
[62] (byte~) show_letter::$22 ← (byte~) show_letter::$36 + (byte) show_letter::i#10
[61] (byte~) show_letter::$28 ← (byte) show_letter::i#10 << (byte) 3
[62] (byte~) show_letter::$22 ← (byte~) show_letter::$28 + (byte) show_letter::i#10
[63] (byte) show_letter::segment_type#0 ← *((byte*)(const struct Segment*) letter_c + (byte~) show_letter::$22)
[64] if((byte) show_letter::segment_type#0==(const byte) MOVE_TO) goto show_letter::@3
to:show_letter::@4
@ -5144,9 +5090,9 @@ VARIABLE REGISTER WEIGHTS
(byte~) show_letter::$20 151.5
(byte~) show_letter::$21 151.5
(byte~) show_letter::$22 202.0
(byte~) show_letter::$32 202.0
(byte~) show_letter::$34 202.0
(byte~) show_letter::$36 202.0
(byte~) show_letter::$24 202.0
(byte~) show_letter::$26 202.0
(byte~) show_letter::$28 202.0
(struct SplineVector16~) show_letter::$7
(byte) show_letter::angle
(byte) show_letter::angle#0 3.6724137931034484
@ -5299,7 +5245,7 @@ Initial phi equivalence classes
[ mulf_init::dir#2 mulf_init::dir#4 ]
[ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
Added variable show_letter::angle#0 to live range equivalence class [ show_letter::angle#0 ]
Added variable show_letter::$32 to live range equivalence class [ show_letter::$32 ]
Added variable show_letter::$24 to live range equivalence class [ show_letter::$24 ]
Added variable show_letter::$20 to live range equivalence class [ show_letter::$20 ]
Added variable show_letter::to_x#0 to live range equivalence class [ show_letter::to_x#0 ]
Added variable show_letter::to_y#0 to live range equivalence class [ show_letter::to_y#0 ]
@ -5311,7 +5257,7 @@ Added variable show_letter::to_x#2 to live range equivalence class [ show_letter
Added variable show_letter::to_y#2 to live range equivalence class [ show_letter::to_y#2 ]
Added variable show_letter::current_x#10 to live range equivalence class [ show_letter::current_x#10 ]
Added variable show_letter::current_y#10 to live range equivalence class [ show_letter::current_y#10 ]
Added variable show_letter::$34 to live range equivalence class [ show_letter::$34 ]
Added variable show_letter::$26 to live range equivalence class [ show_letter::$26 ]
Added variable show_letter::$21 to live range equivalence class [ show_letter::$21 ]
Added variable show_letter::via_x#0 to live range equivalence class [ show_letter::via_x#0 ]
Added variable show_letter::via_y#0 to live range equivalence class [ show_letter::via_y#0 ]
@ -5323,7 +5269,7 @@ Added variable show_letter::via_x#2 to live range equivalence class [ show_lette
Added variable show_letter::via_y#2 to live range equivalence class [ show_letter::via_y#2 ]
Added variable show_letter::segment_via_x#0 to live range equivalence class [ show_letter::segment_via_x#0 ]
Added variable show_letter::segment_via_y#0 to live range equivalence class [ show_letter::segment_via_y#0 ]
Added variable show_letter::$36 to live range equivalence class [ show_letter::$36 ]
Added variable show_letter::$28 to live range equivalence class [ show_letter::$28 ]
Added variable show_letter::$22 to live range equivalence class [ show_letter::$22 ]
Added variable show_letter::segment_type#0 to live range equivalence class [ show_letter::segment_type#0 ]
Added variable spline_8segB::p0_x#0 to live range equivalence class [ spline_8segB::p0_x#0 ]
@ -5463,7 +5409,7 @@ Complete equivalence classes
[ mulf_init::dir#2 mulf_init::dir#4 ]
[ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
[ show_letter::angle#0 ]
[ show_letter::$32 ]
[ show_letter::$24 ]
[ show_letter::$20 ]
[ show_letter::to_x#0 ]
[ show_letter::to_y#0 ]
@ -5475,7 +5421,7 @@ Complete equivalence classes
[ show_letter::to_y#2 ]
[ show_letter::current_x#10 ]
[ show_letter::current_y#10 ]
[ show_letter::$34 ]
[ show_letter::$26 ]
[ show_letter::$21 ]
[ show_letter::via_x#0 ]
[ show_letter::via_y#0 ]
@ -5487,7 +5433,7 @@ Complete equivalence classes
[ show_letter::via_y#2 ]
[ show_letter::segment_via_x#0 ]
[ show_letter::segment_via_y#0 ]
[ show_letter::$36 ]
[ show_letter::$28 ]
[ show_letter::$22 ]
[ show_letter::segment_type#0 ]
[ spline_8segB::p0_x#0 ]
@ -5626,7 +5572,7 @@ Allocated zp[2]:78 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ]
Allocated zp[1]:80 [ mulf_init::dir#2 mulf_init::dir#4 ]
Allocated zp[2]:81 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ]
Allocated zp[1]:83 [ show_letter::angle#0 ]
Allocated zp[1]:84 [ show_letter::$32 ]
Allocated zp[1]:84 [ show_letter::$24 ]
Allocated zp[1]:85 [ show_letter::$20 ]
Allocated zp[2]:86 [ show_letter::to_x#0 ]
Allocated zp[2]:88 [ show_letter::to_y#0 ]
@ -5638,7 +5584,7 @@ Allocated zp[2]:98 [ show_letter::to_x#2 ]
Allocated zp[2]:100 [ show_letter::to_y#2 ]
Allocated zp[2]:102 [ show_letter::current_x#10 ]
Allocated zp[2]:104 [ show_letter::current_y#10 ]
Allocated zp[1]:106 [ show_letter::$34 ]
Allocated zp[1]:106 [ show_letter::$26 ]
Allocated zp[1]:107 [ show_letter::$21 ]
Allocated zp[2]:108 [ show_letter::via_x#0 ]
Allocated zp[2]:110 [ show_letter::via_y#0 ]
@ -5650,7 +5596,7 @@ Allocated zp[2]:120 [ show_letter::via_x#2 ]
Allocated zp[2]:122 [ show_letter::via_y#2 ]
Allocated zp[2]:124 [ show_letter::segment_via_x#0 ]
Allocated zp[2]:126 [ show_letter::segment_via_y#0 ]
Allocated zp[1]:128 [ show_letter::$36 ]
Allocated zp[1]:128 [ show_letter::$28 ]
Allocated zp[1]:129 [ show_letter::$22 ]
Allocated zp[1]:130 [ show_letter::segment_type#0 ]
Allocated zp[2]:131 [ spline_8segB::p0_x#0 ]
@ -5946,9 +5892,9 @@ show_letter: {
.label current_y = 7
.label current_x_1 = $66
.label current_y_1 = $68
.label __32 = $54
.label __34 = $6a
.label __36 = $80
.label __24 = $54
.label __26 = $6a
.label __28 = $80
// [28] phi from show_letter to show_letter::@1 [phi:show_letter->show_letter::@1]
__b1_from_show_letter:
// [28] phi (signed word) show_letter::current_y#4 = (signed word) 0 [phi:show_letter->show_letter::@1#0] -- vwsz1=vwsc1
@ -5967,24 +5913,24 @@ show_letter: {
jmp __b1
// show_letter::@1
__b1:
// [29] (byte~) show_letter::$32 ← (byte) show_letter::i#10 << (byte) 3 -- vbuz1=vbuz2_rol_3
// [29] (byte~) show_letter::$24 ← (byte) show_letter::i#10 << (byte) 3 -- vbuz1=vbuz2_rol_3
lda.z i
asl
asl
asl
sta.z __32
// [30] (byte~) show_letter::$20 ← (byte~) show_letter::$32 + (byte) show_letter::i#10 -- vbuz1=vbuz2_plus_vbuz3
lda.z __32
sta.z __24
// [30] (byte~) show_letter::$20 ← (byte~) show_letter::$24 + (byte) show_letter::i#10 -- vbuz1=vbuz2_plus_vbuz3
lda.z __24
clc
adc.z i
sta.z __20
// [31] (signed word) show_letter::to_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuz2
// [31] (signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuz2
ldy.z __20
lda letter_c+OFFSET_STRUCT_SEGMENT_TO,y
sta.z to_x
lda letter_c+OFFSET_STRUCT_SEGMENT_TO+1,y
sta.z to_x+1
// [32] (signed word) show_letter::to_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuz2
// [32] (signed word) show_letter::to_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuz2
ldy.z __20
lda letter_c+OFFSET_STRUCT_SEGMENT_TO+OFFSET_STRUCT_SPLINEVECTOR16_Y,y
sta.z to_y
@ -6065,24 +6011,24 @@ show_letter: {
lda.z to_y_2+1
adc #>$64
sta.z current_y_1+1
// [45] (byte~) show_letter::$34 ← (byte) show_letter::i#10 << (byte) 3 -- vbuz1=vbuz2_rol_3
// [45] (byte~) show_letter::$26 ← (byte) show_letter::i#10 << (byte) 3 -- vbuz1=vbuz2_rol_3
lda.z i
asl
asl
asl
sta.z __34
// [46] (byte~) show_letter::$21 ← (byte~) show_letter::$34 + (byte) show_letter::i#10 -- vbuz1=vbuz2_plus_vbuz3
lda.z __34
sta.z __26
// [46] (byte~) show_letter::$21 ← (byte~) show_letter::$26 + (byte) show_letter::i#10 -- vbuz1=vbuz2_plus_vbuz3
lda.z __26
clc
adc.z i
sta.z __21
// [47] (signed word) show_letter::via_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuz2
// [47] (signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuz2
ldy.z __21
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA,y
sta.z via_x
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA+1,y
sta.z via_x+1
// [48] (signed word) show_letter::via_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuz2
// [48] (signed word) show_letter::via_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuz2
ldy.z __21
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA+OFFSET_STRUCT_SPLINEVECTOR16_Y,y
sta.z via_y
@ -6163,14 +6109,14 @@ show_letter: {
lda.z via_y_2+1
adc #>$64
sta.z segment_via_y+1
// [61] (byte~) show_letter::$36 ← (byte) show_letter::i#10 << (byte) 3 -- vbuz1=vbuz2_rol_3
// [61] (byte~) show_letter::$28 ← (byte) show_letter::i#10 << (byte) 3 -- vbuz1=vbuz2_rol_3
lda.z i
asl
asl
asl
sta.z __36
// [62] (byte~) show_letter::$22 ← (byte~) show_letter::$36 + (byte) show_letter::i#10 -- vbuz1=vbuz2_plus_vbuz3
lda.z __36
sta.z __28
// [62] (byte~) show_letter::$22 ← (byte~) show_letter::$28 + (byte) show_letter::i#10 -- vbuz1=vbuz2_plus_vbuz3
lda.z __28
clc
adc.z i
sta.z __22
@ -8418,13 +8364,13 @@ Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::a
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::w#4 main::w#1 ]
Statement [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@4 [ main::angle#2 main::w#4 ] ( main:2 [ main::angle#2 main::w#4 ] ) always clobbers reg byte a
Statement [26] (byte) main::angle#1 ← (byte) main::angle#2 + (byte) 9 [ main::angle#1 ] ( main:2 [ main::angle#1 ] ) always clobbers reg byte a
Statement [29] (byte~) show_letter::$32 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$32 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$32 ] ) always clobbers reg byte a
Statement [29] (byte~) show_letter::$24 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$24 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$24 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:83 [ show_letter::angle#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:4 [ show_letter::i#10 show_letter::i#1 ]
Statement [30] (byte~) show_letter::$20 ← (byte~) show_letter::$32 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 ] ) always clobbers reg byte a
Statement [31] (signed word) show_letter::to_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 show_letter::to_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 show_letter::to_x#0 ] ) always clobbers reg byte a
Statement [30] (byte~) show_letter::$20 ← (byte~) show_letter::$24 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 ] ) always clobbers reg byte a
Statement [31] (signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 show_letter::to_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 show_letter::to_x#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:85 [ show_letter::$20 ]
Statement [32] (signed word) show_letter::to_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#0 show_letter::to_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#0 show_letter::to_y#0 ] ) always clobbers reg byte a
Statement [32] (signed word) show_letter::to_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#0 show_letter::to_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#0 show_letter::to_y#0 ] ) always clobbers reg byte a
Statement [33] (signed word) show_letter::to_x#1 ← (signed word) show_letter::to_x#0 - (signed byte) $32 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#0 show_letter::to_x#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#0 show_letter::to_x#1 ] ) always clobbers reg byte a
Statement [34] (signed word) show_letter::to_y#1 ← (signed word) show_letter::to_y#0 - (signed word) $96 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#1 show_letter::to_y#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#1 show_letter::to_y#1 ] ) always clobbers reg byte a
Statement [35] (signed word) rotate::vector_x#0 ← (signed word) show_letter::to_x#1 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#1 rotate::vector_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#1 rotate::vector_x#0 ] ) always clobbers reg byte a
@ -8435,11 +8381,11 @@ Statement [41] (signed word) show_letter::to_x#2 ← (signed word) rotate::retur
Statement [42] (signed word) show_letter::to_y#2 ← (signed word) rotate::return_y#0 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#2 show_letter::to_y#2 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#2 show_letter::to_y#2 ] ) always clobbers reg byte a
Statement [43] (signed word) show_letter::current_x#10 ← (signed word) show_letter::to_x#2 + (signed byte) $64 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#2 show_letter::current_x#10 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#2 show_letter::current_x#10 ] ) always clobbers reg byte a
Statement [44] (signed word) show_letter::current_y#10 ← (signed word) show_letter::to_y#2 + (signed byte) $64 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 ] ) always clobbers reg byte a
Statement [45] (byte~) show_letter::$34 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$34 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$34 ] ) always clobbers reg byte a
Statement [46] (byte~) show_letter::$21 ← (byte~) show_letter::$34 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 ] ) always clobbers reg byte a
Statement [47] (signed word) show_letter::via_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 show_letter::via_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 show_letter::via_x#0 ] ) always clobbers reg byte a
Statement [45] (byte~) show_letter::$26 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$26 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$26 ] ) always clobbers reg byte a
Statement [46] (byte~) show_letter::$21 ← (byte~) show_letter::$26 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 ] ) always clobbers reg byte a
Statement [47] (signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 show_letter::via_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 show_letter::via_x#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:107 [ show_letter::$21 ]
Statement [48] (signed word) show_letter::via_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#0 show_letter::via_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#0 show_letter::via_y#0 ] ) always clobbers reg byte a
Statement [48] (signed word) show_letter::via_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#0 show_letter::via_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#0 show_letter::via_y#0 ] ) always clobbers reg byte a
Statement [49] (signed word) show_letter::via_x#1 ← (signed word) show_letter::via_x#0 - (signed byte) $32 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#0 show_letter::via_x#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#0 show_letter::via_x#1 ] ) always clobbers reg byte a
Statement [50] (signed word) show_letter::via_y#1 ← (signed word) show_letter::via_y#0 - (signed word) $96 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#1 show_letter::via_y#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#1 show_letter::via_y#1 ] ) always clobbers reg byte a
Statement [51] (signed word) rotate::vector_x#1 ← (signed word) show_letter::via_x#1 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#1 rotate::vector_x#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#1 rotate::vector_x#1 ] ) always clobbers reg byte a
@ -8450,8 +8396,8 @@ Statement [57] (signed word) show_letter::via_x#2 ← (signed word) rotate::retu
Statement [58] (signed word) show_letter::via_y#2 ← (signed word) rotate::return_y#1 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#2 show_letter::via_y#2 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#2 show_letter::via_y#2 ] ) always clobbers reg byte a
Statement [59] (signed word) show_letter::segment_via_x#0 ← (signed word) show_letter::via_x#2 + (signed byte) $64 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#2 show_letter::segment_via_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#2 show_letter::segment_via_x#0 ] ) always clobbers reg byte a
Statement [60] (signed word) show_letter::segment_via_y#0 ← (signed word) show_letter::via_y#2 + (signed byte) $64 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 ] ) always clobbers reg byte a
Statement [61] (byte~) show_letter::$36 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$36 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$36 ] ) always clobbers reg byte a
Statement [62] (byte~) show_letter::$22 ← (byte~) show_letter::$36 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$22 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$22 ] ) always clobbers reg byte a
Statement [61] (byte~) show_letter::$28 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$28 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$28 ] ) always clobbers reg byte a
Statement [62] (byte~) show_letter::$22 ← (byte~) show_letter::$28 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$22 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$22 ] ) always clobbers reg byte a
Statement [66] (word) bitmap_line::x1#0 ← (word)(signed word) show_letter::current_x#4 [ show_letter::angle#0 show_letter::i#10 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 ] ) always clobbers reg byte a
Statement [67] (word) bitmap_line::y1#0 ← (word)(signed word) show_letter::current_y#4 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 bitmap_line::y1#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 bitmap_line::y1#0 ] ) always clobbers reg byte a
Statement [68] (word) bitmap_line::x2#0 ← (word)(signed word) show_letter::current_x#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ) always clobbers reg byte a
@ -8656,10 +8602,10 @@ Statement [19] (byte) show_letter::angle#0 ← (byte) main::angle#2 [ main::angl
Statement [22] if(*((const byte*) RASTER)!=(byte) $fe) goto main::@3 [ main::angle#2 main::w#4 ] ( main:2 [ main::angle#2 main::w#4 ] ) always clobbers reg byte a
Statement [23] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@4 [ main::angle#2 main::w#4 ] ( main:2 [ main::angle#2 main::w#4 ] ) always clobbers reg byte a
Statement [26] (byte) main::angle#1 ← (byte) main::angle#2 + (byte) 9 [ main::angle#1 ] ( main:2 [ main::angle#1 ] ) always clobbers reg byte a reg byte x
Statement [29] (byte~) show_letter::$32 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$32 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$32 ] ) always clobbers reg byte a
Statement [30] (byte~) show_letter::$20 ← (byte~) show_letter::$32 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 ] ) always clobbers reg byte a
Statement [31] (signed word) show_letter::to_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 show_letter::to_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 show_letter::to_x#0 ] ) always clobbers reg byte a
Statement [32] (signed word) show_letter::to_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#0 show_letter::to_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#0 show_letter::to_y#0 ] ) always clobbers reg byte a
Statement [29] (byte~) show_letter::$24 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$24 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$24 ] ) always clobbers reg byte a
Statement [30] (byte~) show_letter::$20 ← (byte~) show_letter::$24 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 ] ) always clobbers reg byte a
Statement [31] (signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 show_letter::to_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::$20 show_letter::to_x#0 ] ) always clobbers reg byte a
Statement [32] (signed word) show_letter::to_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#0 show_letter::to_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#0 show_letter::to_y#0 ] ) always clobbers reg byte a
Statement [33] (signed word) show_letter::to_x#1 ← (signed word) show_letter::to_x#0 - (signed byte) $32 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#0 show_letter::to_x#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#0 show_letter::to_x#1 ] ) always clobbers reg byte a
Statement [34] (signed word) show_letter::to_y#1 ← (signed word) show_letter::to_y#0 - (signed word) $96 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#1 show_letter::to_y#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#1 show_letter::to_y#1 ] ) always clobbers reg byte a
Statement [35] (signed word) rotate::vector_x#0 ← (signed word) show_letter::to_x#1 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#1 rotate::vector_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#1 rotate::vector_x#0 ] ) always clobbers reg byte a
@ -8670,10 +8616,10 @@ Statement [41] (signed word) show_letter::to_x#2 ← (signed word) rotate::retur
Statement [42] (signed word) show_letter::to_y#2 ← (signed word) rotate::return_y#0 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#2 show_letter::to_y#2 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_x#2 show_letter::to_y#2 ] ) always clobbers reg byte a
Statement [43] (signed word) show_letter::current_x#10 ← (signed word) show_letter::to_x#2 + (signed byte) $64 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#2 show_letter::current_x#10 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::to_y#2 show_letter::current_x#10 ] ) always clobbers reg byte a
Statement [44] (signed word) show_letter::current_y#10 ← (signed word) show_letter::to_y#2 + (signed byte) $64 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 ] ) always clobbers reg byte a
Statement [45] (byte~) show_letter::$34 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$34 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$34 ] ) always clobbers reg byte a
Statement [46] (byte~) show_letter::$21 ← (byte~) show_letter::$34 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 ] ) always clobbers reg byte a
Statement [47] (signed word) show_letter::via_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 show_letter::via_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 show_letter::via_x#0 ] ) always clobbers reg byte a
Statement [48] (signed word) show_letter::via_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#0 show_letter::via_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#0 show_letter::via_y#0 ] ) always clobbers reg byte a
Statement [45] (byte~) show_letter::$26 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$26 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$26 ] ) always clobbers reg byte a
Statement [46] (byte~) show_letter::$21 ← (byte~) show_letter::$26 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 ] ) always clobbers reg byte a
Statement [47] (signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 show_letter::via_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::$21 show_letter::via_x#0 ] ) always clobbers reg byte a
Statement [48] (signed word) show_letter::via_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#0 show_letter::via_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#0 show_letter::via_y#0 ] ) always clobbers reg byte a
Statement [49] (signed word) show_letter::via_x#1 ← (signed word) show_letter::via_x#0 - (signed byte) $32 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#0 show_letter::via_x#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#0 show_letter::via_x#1 ] ) always clobbers reg byte a
Statement [50] (signed word) show_letter::via_y#1 ← (signed word) show_letter::via_y#0 - (signed word) $96 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#1 show_letter::via_y#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#1 show_letter::via_y#1 ] ) always clobbers reg byte a
Statement [51] (signed word) rotate::vector_x#1 ← (signed word) show_letter::via_x#1 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#1 rotate::vector_x#1 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#1 rotate::vector_x#1 ] ) always clobbers reg byte a
@ -8684,8 +8630,8 @@ Statement [57] (signed word) show_letter::via_x#2 ← (signed word) rotate::retu
Statement [58] (signed word) show_letter::via_y#2 ← (signed word) rotate::return_y#1 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#2 show_letter::via_y#2 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_x#2 show_letter::via_y#2 ] ) always clobbers reg byte a
Statement [59] (signed word) show_letter::segment_via_x#0 ← (signed word) show_letter::via_x#2 + (signed byte) $64 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#2 show_letter::segment_via_x#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::via_y#2 show_letter::segment_via_x#0 ] ) always clobbers reg byte a
Statement [60] (signed word) show_letter::segment_via_y#0 ← (signed word) show_letter::via_y#2 + (signed byte) $64 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 ] ) always clobbers reg byte a
Statement [61] (byte~) show_letter::$36 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$36 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$36 ] ) always clobbers reg byte a
Statement [62] (byte~) show_letter::$22 ← (byte~) show_letter::$36 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$22 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$22 ] ) always clobbers reg byte a
Statement [61] (byte~) show_letter::$28 ← (byte) show_letter::i#10 << (byte) 3 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$28 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$28 ] ) always clobbers reg byte a
Statement [62] (byte~) show_letter::$22 ← (byte~) show_letter::$28 + (byte) show_letter::i#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$22 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#4 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 show_letter::segment_via_x#0 show_letter::segment_via_y#0 show_letter::$22 ] ) always clobbers reg byte a
Statement [66] (word) bitmap_line::x1#0 ← (word)(signed word) show_letter::current_x#4 [ show_letter::angle#0 show_letter::i#10 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_y#4 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 ] ) always clobbers reg byte a
Statement [67] (word) bitmap_line::y1#0 ← (word)(signed word) show_letter::current_y#4 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 bitmap_line::y1#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 bitmap_line::y1#0 ] ) always clobbers reg byte a
Statement [68] (word) bitmap_line::x2#0 ← (word)(signed word) show_letter::current_x#10 [ show_letter::angle#0 show_letter::i#10 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ( main:2::show_letter:20 [ main::angle#2 show_letter::angle#0 show_letter::i#10 show_letter::current_x#10 show_letter::current_y#10 bitmap_line::x1#0 bitmap_line::y1#0 bitmap_line::x2#0 ] ) always clobbers reg byte a
@ -8906,7 +8852,7 @@ Potential registers zp[2]:78 [ mulf_init::sqr2_hi#2 mulf_init::sqr2_hi#1 ] : zp[
Potential registers zp[1]:80 [ mulf_init::dir#2 mulf_init::dir#4 ] : zp[1]:80 , reg byte x ,
Potential registers zp[2]:81 [ mulf_init::sqr#3 mulf_init::sqr#4 mulf_init::sqr#1 mulf_init::sqr#2 ] : zp[2]:81 ,
Potential registers zp[1]:83 [ show_letter::angle#0 ] : zp[1]:83 ,
Potential registers zp[1]:84 [ show_letter::$32 ] : zp[1]:84 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:84 [ show_letter::$24 ] : zp[1]:84 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:85 [ show_letter::$20 ] : zp[1]:85 , reg byte x , reg byte y ,
Potential registers zp[2]:86 [ show_letter::to_x#0 ] : zp[2]:86 ,
Potential registers zp[2]:88 [ show_letter::to_y#0 ] : zp[2]:88 ,
@ -8918,7 +8864,7 @@ Potential registers zp[2]:98 [ show_letter::to_x#2 ] : zp[2]:98 ,
Potential registers zp[2]:100 [ show_letter::to_y#2 ] : zp[2]:100 ,
Potential registers zp[2]:102 [ show_letter::current_x#10 ] : zp[2]:102 ,
Potential registers zp[2]:104 [ show_letter::current_y#10 ] : zp[2]:104 ,
Potential registers zp[1]:106 [ show_letter::$34 ] : zp[1]:106 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:106 [ show_letter::$26 ] : zp[1]:106 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:107 [ show_letter::$21 ] : zp[1]:107 , reg byte x , reg byte y ,
Potential registers zp[2]:108 [ show_letter::via_x#0 ] : zp[2]:108 ,
Potential registers zp[2]:110 [ show_letter::via_y#0 ] : zp[2]:110 ,
@ -8930,7 +8876,7 @@ Potential registers zp[2]:120 [ show_letter::via_x#2 ] : zp[2]:120 ,
Potential registers zp[2]:122 [ show_letter::via_y#2 ] : zp[2]:122 ,
Potential registers zp[2]:124 [ show_letter::segment_via_x#0 ] : zp[2]:124 ,
Potential registers zp[2]:126 [ show_letter::segment_via_y#0 ] : zp[2]:126 ,
Potential registers zp[1]:128 [ show_letter::$36 ] : zp[1]:128 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:128 [ show_letter::$28 ] : zp[1]:128 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:129 [ show_letter::$22 ] : zp[1]:129 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:130 [ show_letter::segment_type#0 ] : zp[1]:130 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:131 [ spline_8segB::p0_x#0 ] : zp[2]:131 ,
@ -9027,7 +8973,7 @@ Uplift Scope [bitmap_line] 7,125.57: zp[2]:20 [ bitmap_line::y#15 bitmap_line::y
Uplift Scope [spline_8segB] 2,002: zp[2]:200 [ spline_8segB::$22 ] 2,002: zp[2]:204 [ spline_8segB::$24 ] 1,751.75: zp[1]:39 [ spline_8segB::n#2 spline_8segB::n#1 ] 1,501.5: zp[1]:208 [ spline_8segB::$31 ] 941.32: zp[2]:42 [ spline_8segB::i_y#2 spline_8segB::i_y#0 spline_8segB::i_y#1 ] 801.57: zp[2]:40 [ spline_8segB::i_x#2 spline_8segB::i_x#0 spline_8segB::i_x#1 ] 711.62: zp[2]:35 [ spline_8segB::p_x#2 spline_8segB::p_x#0 spline_8segB::p_x#1 ] 667.33: zp[2]:206 [ spline_8segB::$25 ] 624.17: zp[2]:37 [ spline_8segB::p_y#2 spline_8segB::p_y#0 spline_8segB::p_y#1 ] 500.5: zp[2]:202 [ spline_8segB::$23 ] 59: zp[2]:198 [ spline_8segB::j_y#0 ] 55.72: zp[2]:196 [ spline_8segB::j_x#0 ] 34.33: zp[2]:139 [ spline_8segB::p2_x#0 ] 20.6: zp[2]:141 [ spline_8segB::p2_y#0 ] 10.5: zp[2]:135 [ spline_8segB::p1_x#0 ] 9.55: zp[2]:137 [ spline_8segB::p1_y#0 ] 4.86: zp[2]:131 [ spline_8segB::p0_x#0 ] 4.86: zp[2]:133 [ spline_8segB::p0_y#0 ] 4: zp[2]:172 [ spline_8segB::$0 ] 4: zp[2]:174 [ spline_8segB::$1 ] 4: zp[2]:178 [ spline_8segB::$3 ] 4: zp[2]:180 [ spline_8segB::$4 ] 4: zp[2]:184 [ spline_8segB::$6 ] 4: zp[2]:188 [ spline_8segB::$8 ] 4: zp[2]:192 [ spline_8segB::$10 ] 4: zp[2]:194 [ spline_8segB::$12 ] 4: zp[2]:209 [ spline_8segB::$18 ] 4: zp[2]:213 [ spline_8segB::$20 ] 2: zp[2]:215 [ spline_8segB::$21 ] 1.33: zp[2]:186 [ spline_8segB::b_x#0 ] 1.33: zp[2]:190 [ spline_8segB::b_y#0 ] 1.33: zp[2]:211 [ spline_8segB::$19 ] 0.6: zp[2]:182 [ spline_8segB::a_y#0 ] 0.5: zp[2]:176 [ spline_8segB::a_x#0 ]
Uplift Scope [bitmap_plot] 4,514.5: zp[2]:27 [ bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] 4,016: zp[1]:26 [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] 4: zp[2]:163 [ bitmap_plot::$1 ] 4: zp[1]:167 [ bitmap_plot::$2 ] 3: zp[2]:165 [ bitmap_plot::plotter#1 ] 1: zp[2]:161 [ bitmap_plot::plotter#0 ]
Uplift Scope [bitmap_plot_spline_8seg] 1,901.9: zp[1]:13 [ bitmap_plot_spline_8seg::n#2 bitmap_plot_spline_8seg::n#1 ] 1,505.5: zp[2]:9 [ bitmap_plot_spline_8seg::current_x#2 bitmap_plot_spline_8seg::current_x#0 bitmap_plot_spline_8seg::current_x#1 ] 1,501.5: zp[1]:144 [ bitmap_plot_spline_8seg::$9 ] 1,172.83: zp[2]:11 [ bitmap_plot_spline_8seg::current_y#2 bitmap_plot_spline_8seg::current_y#0 bitmap_plot_spline_8seg::current_y#1 ] 500.5: zp[1]:143 [ bitmap_plot_spline_8seg::$8 ]
Uplift Scope [show_letter] 207.05: zp[2]:7 [ show_letter::current_y#4 show_letter::current_y#11 ] 202: zp[1]:84 [ show_letter::$32 ] 202: zp[1]:106 [ show_letter::$34 ] 202: zp[1]:128 [ show_letter::$36 ] 202: zp[1]:129 [ show_letter::$22 ] 151.5: zp[1]:85 [ show_letter::$20 ] 151.5: zp[1]:107 [ show_letter::$21 ] 151.5: zp[1]:130 [ show_letter::segment_type#0 ] 106.32: zp[2]:5 [ show_letter::current_x#4 show_letter::current_x#11 ] 101: zp[2]:86 [ show_letter::to_x#0 ] 101: zp[2]:88 [ show_letter::to_y#0 ] 101: zp[2]:90 [ show_letter::to_x#1 ] 101: zp[2]:92 [ show_letter::to_y#1 ] 101: zp[2]:98 [ show_letter::to_x#2 ] 101: zp[2]:100 [ show_letter::to_y#2 ] 101: zp[2]:108 [ show_letter::via_x#0 ] 101: zp[2]:110 [ show_letter::via_y#0 ] 101: zp[2]:112 [ show_letter::via_x#1 ] 101: zp[2]:114 [ show_letter::via_y#1 ] 101: zp[2]:120 [ show_letter::via_x#2 ] 101: zp[2]:122 [ show_letter::via_y#2 ] 91.29: zp[1]:4 [ show_letter::i#10 show_letter::i#1 ] 22.44: zp[2]:124 [ show_letter::segment_via_x#0 ] 22.44: zp[2]:126 [ show_letter::segment_via_y#0 ] 7.77: zp[2]:102 [ show_letter::current_x#10 ] 7.77: zp[2]:104 [ show_letter::current_y#10 ] 3.67: zp[1]:83 [ show_letter::angle#0 ]
Uplift Scope [show_letter] 207.05: zp[2]:7 [ show_letter::current_y#4 show_letter::current_y#11 ] 202: zp[1]:84 [ show_letter::$24 ] 202: zp[1]:106 [ show_letter::$26 ] 202: zp[1]:128 [ show_letter::$28 ] 202: zp[1]:129 [ show_letter::$22 ] 151.5: zp[1]:85 [ show_letter::$20 ] 151.5: zp[1]:107 [ show_letter::$21 ] 151.5: zp[1]:130 [ show_letter::segment_type#0 ] 106.32: zp[2]:5 [ show_letter::current_x#4 show_letter::current_x#11 ] 101: zp[2]:86 [ show_letter::to_x#0 ] 101: zp[2]:88 [ show_letter::to_y#0 ] 101: zp[2]:90 [ show_letter::to_x#1 ] 101: zp[2]:92 [ show_letter::to_y#1 ] 101: zp[2]:98 [ show_letter::to_x#2 ] 101: zp[2]:100 [ show_letter::to_y#2 ] 101: zp[2]:108 [ show_letter::via_x#0 ] 101: zp[2]:110 [ show_letter::via_y#0 ] 101: zp[2]:112 [ show_letter::via_x#1 ] 101: zp[2]:114 [ show_letter::via_y#1 ] 101: zp[2]:120 [ show_letter::via_x#2 ] 101: zp[2]:122 [ show_letter::via_y#2 ] 91.29: zp[1]:4 [ show_letter::i#10 show_letter::i#1 ] 22.44: zp[2]:124 [ show_letter::segment_via_x#0 ] 22.44: zp[2]:126 [ show_letter::segment_via_y#0 ] 7.77: zp[2]:102 [ show_letter::current_x#10 ] 7.77: zp[2]:104 [ show_letter::current_y#10 ] 3.67: zp[1]:83 [ show_letter::angle#0 ]
Uplift Scope [rotate] 416.62: zp[1]:44 [ rotate::angle#2 rotate::angle#0 rotate::angle#1 ] 213.44: zp[2]:47 [ rotate::vector_y#2 rotate::vector_y#0 rotate::vector_y#1 ] 142.59: zp[2]:45 [ rotate::vector_x#2 rotate::vector_x#0 rotate::vector_x#1 ] 101: zp[2]:94 [ rotate::return_x#0 ] 101: zp[2]:96 [ rotate::return_y#0 ] 101: zp[2]:116 [ rotate::return_x#1 ] 101: zp[2]:118 [ rotate::return_y#1 ] 34: zp[2]:274 [ rotate::return_x#2 ] 34: zp[2]:277 [ rotate::return_y#2 ] 4: zp[2]:227 [ rotate::$2 ] 4: zp[2]:239 [ rotate::$5 ] 4: zp[2]:253 [ rotate::$9 ] 4: zp[2]:255 [ rotate::$10 ] 4: zp[2]:267 [ rotate::$12 ] 4: zp[2]:269 [ rotate::$13 ] 2: zp[4]:223 [ rotate::$1 ] 2: zp[4]:235 [ rotate::$4 ] 2: zp[4]:249 [ rotate::$8 ] 2: zp[4]:263 [ rotate::$11 ] 2: zp[1]:273 [ rotate::$15 ] 2: zp[1]:276 [ rotate::$18 ] 1.33: zp[2]:271 [ rotate::yr#1 ] 0.75: zp[2]:217 [ rotate::cos_a#0 ] 0.67: zp[2]:243 [ rotate::sin_a#0 ] 0.44: zp[2]:257 [ rotate::xr#1 ] 0.25: zp[2]:229 [ rotate::xr#0 ] 0.24: zp[2]:241 [ rotate::yr#0 ]
Uplift Scope [main] 886.17: zp[1]:3 [ main::w#4 main::w#1 ] 25.3: zp[1]:2 [ main::angle#2 main::angle#1 ]
Uplift Scope [memset] 341.33: zp[2]:62 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 17.17: zp[2]:303 [ memset::end#0 ] 12.62: zp[1]:61 [ memset::c#4 ] 2: zp[2]:57 [ memset::num#2 ] 0: zp[2]:59 [ memset::str#3 ]
@ -9049,7 +8995,7 @@ Uplifting [bitmap_line] best 849275 combination zp[2]:20 [ bitmap_line::y#15 bit
Uplifting [spline_8segB] best 832275 combination zp[2]:200 [ spline_8segB::$22 ] zp[2]:204 [ spline_8segB::$24 ] reg byte y [ spline_8segB::n#2 spline_8segB::n#1 ] reg byte x [ spline_8segB::$31 ] zp[2]:42 [ spline_8segB::i_y#2 spline_8segB::i_y#0 spline_8segB::i_y#1 ] zp[2]:40 [ spline_8segB::i_x#2 spline_8segB::i_x#0 spline_8segB::i_x#1 ] zp[2]:35 [ spline_8segB::p_x#2 spline_8segB::p_x#0 spline_8segB::p_x#1 ] zp[2]:206 [ spline_8segB::$25 ] zp[2]:37 [ spline_8segB::p_y#2 spline_8segB::p_y#0 spline_8segB::p_y#1 ] zp[2]:202 [ spline_8segB::$23 ] zp[2]:198 [ spline_8segB::j_y#0 ] zp[2]:196 [ spline_8segB::j_x#0 ] zp[2]:139 [ spline_8segB::p2_x#0 ] zp[2]:141 [ spline_8segB::p2_y#0 ] zp[2]:135 [ spline_8segB::p1_x#0 ] zp[2]:137 [ spline_8segB::p1_y#0 ] zp[2]:131 [ spline_8segB::p0_x#0 ] zp[2]:133 [ spline_8segB::p0_y#0 ] zp[2]:172 [ spline_8segB::$0 ] zp[2]:174 [ spline_8segB::$1 ] zp[2]:178 [ spline_8segB::$3 ] zp[2]:180 [ spline_8segB::$4 ] zp[2]:184 [ spline_8segB::$6 ] zp[2]:188 [ spline_8segB::$8 ] zp[2]:192 [ spline_8segB::$10 ] zp[2]:194 [ spline_8segB::$12 ] zp[2]:209 [ spline_8segB::$18 ] zp[2]:213 [ spline_8segB::$20 ] zp[2]:215 [ spline_8segB::$21 ] zp[2]:186 [ spline_8segB::b_x#0 ] zp[2]:190 [ spline_8segB::b_y#0 ] zp[2]:211 [ spline_8segB::$19 ] zp[2]:182 [ spline_8segB::a_y#0 ] zp[2]:176 [ spline_8segB::a_x#0 ]
Uplifting [bitmap_plot] best 830266 combination zp[2]:27 [ bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 ] reg byte x [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ] zp[2]:163 [ bitmap_plot::$1 ] reg byte a [ bitmap_plot::$2 ] zp[2]:165 [ bitmap_plot::plotter#1 ] zp[2]:161 [ bitmap_plot::plotter#0 ]
Uplifting [bitmap_plot_spline_8seg] best 816266 combination zp[1]:13 [ bitmap_plot_spline_8seg::n#2 bitmap_plot_spline_8seg::n#1 ] zp[2]:9 [ bitmap_plot_spline_8seg::current_x#2 bitmap_plot_spline_8seg::current_x#0 bitmap_plot_spline_8seg::current_x#1 ] reg byte x [ bitmap_plot_spline_8seg::$9 ] zp[2]:11 [ bitmap_plot_spline_8seg::current_y#2 bitmap_plot_spline_8seg::current_y#0 bitmap_plot_spline_8seg::current_y#1 ] reg byte x [ bitmap_plot_spline_8seg::$8 ]
Uplifting [show_letter] best 814066 combination zp[2]:7 [ show_letter::current_y#4 show_letter::current_y#11 ] reg byte a [ show_letter::$32 ] reg byte a [ show_letter::$34 ] reg byte a [ show_letter::$36 ] reg byte a [ show_letter::$22 ] zp[1]:85 [ show_letter::$20 ] zp[1]:107 [ show_letter::$21 ] zp[1]:130 [ show_letter::segment_type#0 ] zp[2]:5 [ show_letter::current_x#4 show_letter::current_x#11 ] zp[2]:86 [ show_letter::to_x#0 ] zp[2]:88 [ show_letter::to_y#0 ] zp[2]:90 [ show_letter::to_x#1 ] zp[2]:92 [ show_letter::to_y#1 ] zp[2]:98 [ show_letter::to_x#2 ] zp[2]:100 [ show_letter::to_y#2 ] zp[2]:108 [ show_letter::via_x#0 ] zp[2]:110 [ show_letter::via_y#0 ] zp[2]:112 [ show_letter::via_x#1 ] zp[2]:114 [ show_letter::via_y#1 ] zp[2]:120 [ show_letter::via_x#2 ] zp[2]:122 [ show_letter::via_y#2 ] zp[1]:4 [ show_letter::i#10 show_letter::i#1 ] zp[2]:124 [ show_letter::segment_via_x#0 ] zp[2]:126 [ show_letter::segment_via_y#0 ] zp[2]:102 [ show_letter::current_x#10 ] zp[2]:104 [ show_letter::current_y#10 ] zp[1]:83 [ show_letter::angle#0 ]
Uplifting [show_letter] best 814066 combination zp[2]:7 [ show_letter::current_y#4 show_letter::current_y#11 ] reg byte a [ show_letter::$24 ] reg byte a [ show_letter::$26 ] reg byte a [ show_letter::$28 ] reg byte a [ show_letter::$22 ] zp[1]:85 [ show_letter::$20 ] zp[1]:107 [ show_letter::$21 ] zp[1]:130 [ show_letter::segment_type#0 ] zp[2]:5 [ show_letter::current_x#4 show_letter::current_x#11 ] zp[2]:86 [ show_letter::to_x#0 ] zp[2]:88 [ show_letter::to_y#0 ] zp[2]:90 [ show_letter::to_x#1 ] zp[2]:92 [ show_letter::to_y#1 ] zp[2]:98 [ show_letter::to_x#2 ] zp[2]:100 [ show_letter::to_y#2 ] zp[2]:108 [ show_letter::via_x#0 ] zp[2]:110 [ show_letter::via_y#0 ] zp[2]:112 [ show_letter::via_x#1 ] zp[2]:114 [ show_letter::via_y#1 ] zp[2]:120 [ show_letter::via_x#2 ] zp[2]:122 [ show_letter::via_y#2 ] zp[1]:4 [ show_letter::i#10 show_letter::i#1 ] zp[2]:124 [ show_letter::segment_via_x#0 ] zp[2]:126 [ show_letter::segment_via_y#0 ] zp[2]:102 [ show_letter::current_x#10 ] zp[2]:104 [ show_letter::current_y#10 ] zp[1]:83 [ show_letter::angle#0 ]
Limited combination testing to 100 combinations of 9216 possible.
Uplifting [rotate] best 813448 combination reg byte y [ rotate::angle#2 rotate::angle#0 rotate::angle#1 ] zp[2]:47 [ rotate::vector_y#2 rotate::vector_y#0 rotate::vector_y#1 ] zp[2]:45 [ rotate::vector_x#2 rotate::vector_x#0 rotate::vector_x#1 ] zp[2]:94 [ rotate::return_x#0 ] zp[2]:96 [ rotate::return_y#0 ] zp[2]:116 [ rotate::return_x#1 ] zp[2]:118 [ rotate::return_y#1 ] zp[2]:274 [ rotate::return_x#2 ] zp[2]:277 [ rotate::return_y#2 ] zp[2]:227 [ rotate::$2 ] zp[2]:239 [ rotate::$5 ] zp[2]:253 [ rotate::$9 ] zp[2]:255 [ rotate::$10 ] zp[2]:267 [ rotate::$12 ] zp[2]:269 [ rotate::$13 ] zp[4]:223 [ rotate::$1 ] zp[4]:235 [ rotate::$4 ] zp[4]:249 [ rotate::$8 ] zp[4]:263 [ rotate::$11 ] reg byte a [ rotate::$15 ] reg byte a [ rotate::$18 ] zp[2]:271 [ rotate::yr#1 ] zp[2]:217 [ rotate::cos_a#0 ] zp[2]:243 [ rotate::sin_a#0 ] zp[2]:257 [ rotate::xr#1 ] zp[2]:229 [ rotate::xr#0 ] zp[2]:241 [ rotate::yr#0 ]
Uplifting [main] best 809848 combination reg byte x [ main::w#4 main::w#1 ] zp[1]:2 [ main::angle#2 main::angle#1 ]
@ -9434,21 +9380,21 @@ show_letter: {
jmp __b1
// show_letter::@1
__b1:
// [29] (byte~) show_letter::$32 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
// [29] (byte~) show_letter::$24 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [30] (byte~) show_letter::$20 ← (byte~) show_letter::$32 + (byte) show_letter::i#10 -- vbuxx=vbuaa_plus_vbuz1
// [30] (byte~) show_letter::$20 ← (byte~) show_letter::$24 + (byte) show_letter::i#10 -- vbuxx=vbuaa_plus_vbuz1
clc
adc.z i
tax
// [31] (signed word) show_letter::to_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuxx
// [31] (signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuxx
lda letter_c+OFFSET_STRUCT_SEGMENT_TO,x
sta.z to_x
lda letter_c+OFFSET_STRUCT_SEGMENT_TO+1,x
sta.z to_x+1
// [32] (signed word) show_letter::to_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuxx
// [32] (signed word) show_letter::to_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuxx
lda letter_c+OFFSET_STRUCT_SEGMENT_TO+OFFSET_STRUCT_SPLINEVECTOR16_Y,x
sta.z to_y
lda letter_c+OFFSET_STRUCT_SEGMENT_TO+OFFSET_STRUCT_SPLINEVECTOR16_Y+1,x
@ -9503,21 +9449,21 @@ show_letter: {
lda.z to_y_1+1
adc #>$64
sta.z current_y_1+1
// [45] (byte~) show_letter::$34 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
// [45] (byte~) show_letter::$26 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [46] (byte~) show_letter::$21 ← (byte~) show_letter::$34 + (byte) show_letter::i#10 -- vbuxx=vbuaa_plus_vbuz1
// [46] (byte~) show_letter::$21 ← (byte~) show_letter::$26 + (byte) show_letter::i#10 -- vbuxx=vbuaa_plus_vbuz1
clc
adc.z i
tax
// [47] (signed word) show_letter::via_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuxx
// [47] (signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuxx
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA,x
sta.z via_x
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA+1,x
sta.z via_x+1
// [48] (signed word) show_letter::via_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuxx
// [48] (signed word) show_letter::via_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuxx
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA+OFFSET_STRUCT_SPLINEVECTOR16_Y,x
sta.z via_y
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA+OFFSET_STRUCT_SPLINEVECTOR16_Y+1,x
@ -9572,12 +9518,12 @@ show_letter: {
lda.z segment_via_y+1
adc #>$64
sta.z segment_via_y+1
// [61] (byte~) show_letter::$36 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
// [61] (byte~) show_letter::$28 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [62] (byte~) show_letter::$22 ← (byte~) show_letter::$36 + (byte) show_letter::i#10 -- vbuaa=vbuaa_plus_vbuz1
// [62] (byte~) show_letter::$22 ← (byte~) show_letter::$28 + (byte) show_letter::i#10 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [63] (byte) show_letter::segment_type#0 ← *((byte*)(const struct Segment*) letter_c + (byte~) show_letter::$22) -- vbuaa=pbuc1_derefidx_vbuaa
@ -12179,9 +12125,9 @@ FINAL SYMBOL TABLE
(byte~) show_letter::$20 reg byte x 151.5
(byte~) show_letter::$21 reg byte x 151.5
(byte~) show_letter::$22 reg byte a 202.0
(byte~) show_letter::$32 reg byte a 202.0
(byte~) show_letter::$34 reg byte a 202.0
(byte~) show_letter::$36 reg byte a 202.0
(byte~) show_letter::$24 reg byte a 202.0
(byte~) show_letter::$26 reg byte a 202.0
(byte~) show_letter::$28 reg byte a 202.0
(struct SplineVector16~) show_letter::$7
(label) show_letter::@1
(label) show_letter::@2
@ -12317,13 +12263,13 @@ zp[1]:18 [ mulf_init::c#2 mulf_init::c#1 main::angle#2 main::angle#1 show_letter
reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ]
zp[1]:19 [ mulf_init::dir#2 mulf_init::dir#4 show_letter::i#10 show_letter::i#1 ]
reg byte a [ show_letter::$32 ]
reg byte a [ show_letter::$24 ]
reg byte x [ show_letter::$20 ]
zp[2]:20 [ show_letter::current_x#10 spline_8segB::p2_x#0 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ]
zp[2]:22 [ show_letter::current_y#10 spline_8segB::p2_y#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
reg byte a [ show_letter::$34 ]
reg byte a [ show_letter::$26 ]
reg byte x [ show_letter::$21 ]
reg byte a [ show_letter::$36 ]
reg byte a [ show_letter::$28 ]
reg byte a [ show_letter::$22 ]
reg byte a [ show_letter::segment_type#0 ]
reg byte x [ bitmap_plot_spline_8seg::$8 ]
@ -12519,21 +12465,21 @@ show_letter: {
// show_letter::@1
__b1:
// to = letter_c[i].to
// [29] (byte~) show_letter::$32 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
// [29] (byte~) show_letter::$24 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [30] (byte~) show_letter::$20 ← (byte~) show_letter::$32 + (byte) show_letter::i#10 -- vbuxx=vbuaa_plus_vbuz1
// [30] (byte~) show_letter::$20 ← (byte~) show_letter::$24 + (byte) show_letter::i#10 -- vbuxx=vbuaa_plus_vbuz1
clc
adc.z i
tax
// [31] (signed word) show_letter::to_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuxx
// [31] (signed word) show_letter::to_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuxx
lda letter_c+OFFSET_STRUCT_SEGMENT_TO,x
sta.z to_x
lda letter_c+OFFSET_STRUCT_SEGMENT_TO+1,x
sta.z to_x+1
// [32] (signed word) show_letter::to_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuxx
// [32] (signed word) show_letter::to_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$20) -- vwsz1=pwsc1_derefidx_vbuxx
lda letter_c+OFFSET_STRUCT_SEGMENT_TO+OFFSET_STRUCT_SPLINEVECTOR16_Y,x
sta.z to_y
lda letter_c+OFFSET_STRUCT_SEGMENT_TO+OFFSET_STRUCT_SPLINEVECTOR16_Y+1,x
@ -12591,21 +12537,21 @@ show_letter: {
adc #>$64
sta.z current_y_1+1
// via = letter_c[i].via
// [45] (byte~) show_letter::$34 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
// [45] (byte~) show_letter::$26 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [46] (byte~) show_letter::$21 ← (byte~) show_letter::$34 + (byte) show_letter::i#10 -- vbuxx=vbuaa_plus_vbuz1
// [46] (byte~) show_letter::$21 ← (byte~) show_letter::$26 + (byte) show_letter::i#10 -- vbuxx=vbuaa_plus_vbuz1
clc
adc.z i
tax
// [47] (signed word) show_letter::via_x#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuxx
// [47] (signed word) show_letter::via_x#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuxx
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA,x
sta.z via_x
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA+1,x
sta.z via_x+1
// [48] (signed word) show_letter::via_y#0 ← *((signed word*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuxx
// [48] (signed word) show_letter::via_y#0 ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$21) -- vwsz1=pwsc1_derefidx_vbuxx
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA+OFFSET_STRUCT_SPLINEVECTOR16_Y,x
sta.z via_y
lda letter_c+OFFSET_STRUCT_SEGMENT_VIA+OFFSET_STRUCT_SPLINEVECTOR16_Y+1,x
@ -12663,12 +12609,12 @@ show_letter: {
adc #>$64
sta.z segment_via_y+1
// segment = { letter_c[i].type, to, via}
// [61] (byte~) show_letter::$36 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
// [61] (byte~) show_letter::$28 ← (byte) show_letter::i#10 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [62] (byte~) show_letter::$22 ← (byte~) show_letter::$36 + (byte) show_letter::i#10 -- vbuaa=vbuaa_plus_vbuz1
// [62] (byte~) show_letter::$22 ← (byte~) show_letter::$28 + (byte) show_letter::i#10 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [63] (byte) show_letter::segment_type#0 ← *((byte*)(const struct Segment*) letter_c + (byte~) show_letter::$22) -- vbuaa=pbuc1_derefidx_vbuaa

View File

@ -411,9 +411,9 @@
(byte~) show_letter::$20 reg byte x 151.5
(byte~) show_letter::$21 reg byte x 151.5
(byte~) show_letter::$22 reg byte a 202.0
(byte~) show_letter::$32 reg byte a 202.0
(byte~) show_letter::$34 reg byte a 202.0
(byte~) show_letter::$36 reg byte a 202.0
(byte~) show_letter::$24 reg byte a 202.0
(byte~) show_letter::$26 reg byte a 202.0
(byte~) show_letter::$28 reg byte a 202.0
(struct SplineVector16~) show_letter::$7
(label) show_letter::@1
(label) show_letter::@2
@ -549,13 +549,13 @@ zp[1]:18 [ mulf_init::c#2 mulf_init::c#1 main::angle#2 main::angle#1 show_letter
reg byte x [ mulf_init::x_2#3 mulf_init::x_2#2 mulf_init::x_2#1 ]
reg byte x [ mulf_init::x_255#2 mulf_init::x_255#1 ]
zp[1]:19 [ mulf_init::dir#2 mulf_init::dir#4 show_letter::i#10 show_letter::i#1 ]
reg byte a [ show_letter::$32 ]
reg byte a [ show_letter::$24 ]
reg byte x [ show_letter::$20 ]
zp[2]:20 [ show_letter::current_x#10 spline_8segB::p2_x#0 mulf_init::sqr1_lo#2 mulf_init::sqr1_lo#1 ]
zp[2]:22 [ show_letter::current_y#10 spline_8segB::p2_y#0 mulf_init::sqr1_hi#2 mulf_init::sqr1_hi#1 ]
reg byte a [ show_letter::$34 ]
reg byte a [ show_letter::$26 ]
reg byte x [ show_letter::$21 ]
reg byte a [ show_letter::$36 ]
reg byte a [ show_letter::$28 ]
reg byte a [ show_letter::$22 ]
reg byte a [ show_letter::segment_type#0 ]
reg byte x [ bitmap_plot_spline_8seg::$8 ]

View File

@ -1,16 +1,12 @@
Adding value bulk copy *(&(struct Vector) main::v) ← memset(struct Vector, (const byte) SIZEOF_STRUCT_VECTOR)
Adding value bulk copy *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Postponing unwinding for (struct Vector) main::v.p ← (struct Point) main::p1
Postponing unwinding for (struct Vector) main::v.q ← (struct Point) main::p2
Replacing struct member reference (struct Vector) main::v.p with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P)
Replacing struct member reference (struct Vector) main::v.q with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)
Adding value bulk copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Replacing struct member reference (struct Vector) main::v.p with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P)
Replacing struct member reference (struct Vector) main::v.p with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P)
Replacing struct member reference (struct Vector) main::v.q with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)
Replacing struct member reference (struct Vector) main::v.q with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)
Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).x
Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).y
Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).x

View File

@ -6,8 +6,8 @@ Replacing struct member reference (struct Vector) main::v.p with member unwindin
Replacing struct member reference (struct Vector) main::v.p with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P)
Replacing struct member reference (struct Vector) main::v.q with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)
Replacing struct member reference (struct Vector) main::v.q with member unwinding reference *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q)
Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).x
Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).y
Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).x

View File

@ -1,5 +1,5 @@
Setting inferred volatile on symbol affected by address-of (struct Point*) main::p2 ← &(struct Point) point2
Adding struct value member variable copy *((struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Replacing struct member reference (struct Point) point2.x with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X)
Replacing struct member reference (struct Point) point2.y with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y)
Identified constant variable (struct Point*) main::p2

View File

@ -6,8 +6,8 @@
.const SPLINE_TO = 1
.label SCREEN = $400
.const OFFSET_STRUCT_SEGMENT_TO = 1
.const OFFSET_STRUCT_VECTOR_Y = 2
.const SIZEOF_STRUCT_VECTOR = 4
.const OFFSET_STRUCT_VECTOR_Y = 2
main: {
.label to = 4
.label j = 3

View File

@ -15,8 +15,8 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@1
[5] (byte) main::j#3 ← phi( main/(byte) 0 main::@1/(byte) main::j#2 )
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 )
[6] (byte~) main::$5 ← (byte) main::i#2 << (byte) 3
[7] (byte~) main::$1 ← (byte~) main::$5 + (byte) main::i#2
[6] (byte~) main::$4 ← (byte) main::i#2 << (byte) 3
[7] (byte~) main::$1 ← (byte~) main::$4 + (byte) main::i#2
[8] *(&(struct Vector) main::to) ← memcpy(*((struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR)
[9] (byte~) main::$2 ← (byte) main::j#3 << (byte) 1
[10] *((const signed word*) SCREEN + (byte~) main::$2) ← *((signed word*)&(struct Vector) main::to)

View File

@ -1,10 +1,9 @@
Fixing pointer array-indexing *((const struct Segment*) letter_c + (byte) main::i)
Fixing pointer array-indexing *((const signed word*) SCREEN + (byte) main::j)
Fixing pointer array-indexing *((const signed word*) SCREEN + (byte) main::j)
Adding struct value member variable copy *(&(struct Vector) main::to) ← *((struct Vector*~) main::$4 + (byte~) main::$1)
Adding value bulk copy *(&(struct Vector) main::to) ← memcpy(*((struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR)
Replacing struct member reference (struct Vector) main::to.x with member unwinding reference *((signed word*)&(struct Vector) main::to+(const byte) OFFSET_STRUCT_VECTOR_X)
Replacing struct member reference (struct Vector) main::to.y with member unwinding reference *((signed word*)&(struct Vector) main::to+(const byte) OFFSET_STRUCT_VECTOR_Y)
Adding struct value member variable copy *(&(struct Vector) main::to) ← memcpy(*((struct Vector*~) main::$4 + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR)
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@ -20,8 +19,8 @@ main::@1: scope:[main] from main main::@1
(byte) main::j#3 ← phi( main/(byte) main::j#0 main::@1/(byte) main::j#2 )
(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_SEGMENT
(struct Vector*~) main::$4 ← (struct Vector*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TO
*(&(struct Vector) main::to) ← memcpy(*((struct Vector*~) main::$4 + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR)
*(&(struct Vector) main::to) ← memcpy(*((struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR)
(struct Vector) main::to ← struct-unwound {*(&(struct Vector) main::to)}
(byte~) main::$2 ← (byte) main::j#3 * (const byte) SIZEOF_SIGNED_WORD
*((const signed word*) SCREEN + (byte~) main::$2) ← *((signed word*)&(struct Vector) main::to+(const byte) OFFSET_STRUCT_VECTOR_X)
(byte) main::j#1 ← ++ (byte) main::j#3
@ -70,7 +69,6 @@ SYMBOL TABLE SSA
(byte~) main::$1
(byte~) main::$2
(byte~) main::$3
(struct Vector*~) main::$4
(label) main::@1
(label) main::@return
(byte) main::i
@ -88,11 +86,9 @@ Simplifying constant pointer cast (signed word*) 1024
Successful SSA optimization PassNCastSimplification
Simple Condition (bool~) main::$0 [14] if((byte) main::i#1!=rangelast(0,2)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [4] (struct Vector*~) main::$4 ← (struct Vector*)(const struct Segment*) letter_c + (const byte) OFFSET_STRUCT_SEGMENT_TO
Successful SSA optimization Pass2ConstantRValueConsolidation
Removing C-classic struct-unwound assignment [5] (struct Vector) main::to ← struct-unwound {*(&(struct Vector) main::to)}
Constant (const byte) main::j#0 = 0
Constant (const byte) main::i#0 = 0
Constant (const struct Vector*) main::$4 = (struct Vector*)letter_c+OFFSET_STRUCT_SEGMENT_TO
Successful SSA optimization Pass2ConstantIdentification
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
@ -113,10 +109,9 @@ Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const byte) main::j#0
Inlining constant with var siblings (const byte) main::i#0
Constant inlined main::i#0 = (byte) 0
Constant inlined main::$4 = (struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO
Constant inlined main::j#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Alias (byte~) main::$1 = (byte~) main::$6
Alias (byte~) main::$1 = (byte~) main::$5
Successful SSA optimization Pass2AliasElimination
Eliminating unused constant (const byte) SIZEOF_STRUCT_SEGMENT
Eliminating unused constant (const byte) SIZEOF_SIGNED_WORD
@ -159,8 +154,8 @@ main: scope:[main] from @1
main::@1: scope:[main] from main main::@1
[5] (byte) main::j#3 ← phi( main/(byte) 0 main::@1/(byte) main::j#2 )
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 )
[6] (byte~) main::$5 ← (byte) main::i#2 << (byte) 3
[7] (byte~) main::$1 ← (byte~) main::$5 + (byte) main::i#2
[6] (byte~) main::$4 ← (byte) main::i#2 << (byte) 3
[7] (byte~) main::$1 ← (byte~) main::$4 + (byte) main::i#2
[8] *(&(struct Vector) main::to) ← memcpy(*((struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR)
[9] (byte~) main::$2 ← (byte) main::j#3 << (byte) 1
[10] *((const signed word*) SCREEN + (byte~) main::$2) ← *((signed word*)&(struct Vector) main::to)
@ -186,7 +181,7 @@ VARIABLE REGISTER WEIGHTS
(byte~) main::$1 11.0
(byte~) main::$2 22.0
(byte~) main::$3 22.0
(byte~) main::$5 22.0
(byte~) main::$4 22.0
(byte) main::i
(byte) main::i#1 16.5
(byte) main::i#2 4.4
@ -199,7 +194,7 @@ VARIABLE REGISTER WEIGHTS
Initial phi equivalence classes
[ main::i#2 main::i#1 ]
[ main::j#3 main::j#2 ]
Added variable main::$5 to live range equivalence class [ main::$5 ]
Added variable main::$4 to live range equivalence class [ main::$4 ]
Added variable main::$1 to live range equivalence class [ main::$1 ]
Added variable main::$2 to live range equivalence class [ main::$2 ]
Added variable main::j#1 to live range equivalence class [ main::j#1 ]
@ -208,7 +203,7 @@ Added variable main::to to live range equivalence class [ main::to ]
Complete equivalence classes
[ main::i#2 main::i#1 ]
[ main::j#3 main::j#2 ]
[ main::$5 ]
[ main::$4 ]
[ main::$1 ]
[ main::$2 ]
[ main::j#1 ]
@ -216,7 +211,7 @@ Complete equivalence classes
[ main::to ]
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
Allocated zp[1]:3 [ main::j#3 main::j#2 ]
Allocated zp[1]:4 [ main::$5 ]
Allocated zp[1]:4 [ main::$4 ]
Allocated zp[1]:5 [ main::$1 ]
Allocated zp[1]:6 [ main::$2 ]
Allocated zp[1]:7 [ main::j#1 ]
@ -236,8 +231,8 @@ Target platform is c64basic / MOS6502X
.const SPLINE_TO = 1
.label SCREEN = $400
.const OFFSET_STRUCT_SEGMENT_TO = 1
.const OFFSET_STRUCT_VECTOR_Y = 2
.const SIZEOF_STRUCT_VECTOR = 4
.const OFFSET_STRUCT_VECTOR_Y = 2
// @begin
__bbegin:
// [1] phi from @begin to @1 [phi:@begin->@1]
@ -263,7 +258,7 @@ main: {
.label j = 7
.label j_1 = 3
.label i = 2
.label __5 = 4
.label __4 = 4
// [5] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
// [5] phi (byte) main::j#3 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
@ -280,14 +275,14 @@ main: {
jmp __b1
// main::@1
__b1:
// [6] (byte~) main::$5 ← (byte) main::i#2 << (byte) 3 -- vbuz1=vbuz2_rol_3
// [6] (byte~) main::$4 ← (byte) main::i#2 << (byte) 3 -- vbuz1=vbuz2_rol_3
lda.z i
asl
asl
asl
sta.z __5
// [7] (byte~) main::$1 ← (byte~) main::$5 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda.z __5
sta.z __4
// [7] (byte~) main::$1 ← (byte~) main::$4 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda.z __4
clc
adc.z i
sta.z __1
@ -351,10 +346,10 @@ main: {
.word 'e', 'f', $4b, $c3
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] (byte~) main::$5 ← (byte) main::i#2 << (byte) 3 [ main::i#2 main::j#3 main::$5 main::to ] ( main:2 [ main::i#2 main::j#3 main::$5 main::to ] ) always clobbers reg byte a
Statement [6] (byte~) main::$4 ← (byte) main::i#2 << (byte) 3 [ main::i#2 main::j#3 main::$4 main::to ] ( main:2 [ main::i#2 main::j#3 main::$4 main::to ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::j#3 main::j#2 ]
Statement [7] (byte~) main::$1 ← (byte~) main::$5 + (byte) main::i#2 [ main::i#2 main::j#3 main::$1 main::to ] ( main:2 [ main::i#2 main::j#3 main::$1 main::to ] ) always clobbers reg byte a
Statement [7] (byte~) main::$1 ← (byte~) main::$4 + (byte) main::i#2 [ main::i#2 main::j#3 main::$1 main::to ] ( main:2 [ main::i#2 main::j#3 main::$1 main::to ] ) always clobbers reg byte a
Statement [8] *(&(struct Vector) main::to) ← memcpy(*((struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) [ main::i#2 main::j#3 main::to ] ( main:2 [ main::i#2 main::j#3 main::to ] ) always clobbers reg byte a reg byte x reg byte y
Removing always clobbered register reg byte x as potential for zp[1]:2 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:2 [ main::i#2 main::i#1 ]
@ -366,8 +361,8 @@ Statement [12] (byte~) main::$3 ← (byte) main::j#1 << (byte) 1 [ main::i#2 mai
Removing always clobbered register reg byte a as potential for zp[1]:7 [ main::j#1 ]
Statement [13] *((const signed word*) SCREEN + (byte~) main::$3) ← *((signed word*)&(struct Vector) main::to+(const byte) OFFSET_STRUCT_VECTOR_Y) [ main::i#2 main::to main::j#1 ] ( main:2 [ main::i#2 main::to main::j#1 ] ) always clobbers reg byte a
Statement [16] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 main::j#2 main::to ] ( main:2 [ main::i#1 main::j#2 main::to ] ) always clobbers reg byte a
Statement [6] (byte~) main::$5 ← (byte) main::i#2 << (byte) 3 [ main::i#2 main::j#3 main::$5 main::to ] ( main:2 [ main::i#2 main::j#3 main::$5 main::to ] ) always clobbers reg byte a
Statement [7] (byte~) main::$1 ← (byte~) main::$5 + (byte) main::i#2 [ main::i#2 main::j#3 main::$1 main::to ] ( main:2 [ main::i#2 main::j#3 main::$1 main::to ] ) always clobbers reg byte a
Statement [6] (byte~) main::$4 ← (byte) main::i#2 << (byte) 3 [ main::i#2 main::j#3 main::$4 main::to ] ( main:2 [ main::i#2 main::j#3 main::$4 main::to ] ) always clobbers reg byte a
Statement [7] (byte~) main::$1 ← (byte~) main::$4 + (byte) main::i#2 [ main::i#2 main::j#3 main::$1 main::to ] ( main:2 [ main::i#2 main::j#3 main::$1 main::to ] ) always clobbers reg byte a
Statement [8] *(&(struct Vector) main::to) ← memcpy(*((struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) [ main::i#2 main::j#3 main::to ] ( main:2 [ main::i#2 main::j#3 main::to ] ) always clobbers reg byte a reg byte x reg byte y
Statement [9] (byte~) main::$2 ← (byte) main::j#3 << (byte) 1 [ main::i#2 main::j#3 main::to main::$2 ] ( main:2 [ main::i#2 main::j#3 main::to main::$2 ] ) always clobbers reg byte a
Statement [10] *((const signed word*) SCREEN + (byte~) main::$2) ← *((signed word*)&(struct Vector) main::to) [ main::i#2 main::j#3 main::to ] ( main:2 [ main::i#2 main::j#3 main::to ] ) always clobbers reg byte a
@ -376,7 +371,7 @@ Statement [13] *((const signed word*) SCREEN + (byte~) main::$3) ← *((signed w
Statement [16] if((byte) main::i#1!=(byte) 3) goto main::@1 [ main::i#1 main::j#2 main::to ] ( main:2 [ main::i#1 main::j#2 main::to ] ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 ,
Potential registers zp[1]:3 [ main::j#3 main::j#2 ] : zp[1]:3 ,
Potential registers zp[1]:4 [ main::$5 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::$4 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:5 [ main::$1 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:6 [ main::$2 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:7 [ main::j#1 ] : zp[1]:7 , reg byte x , reg byte y ,
@ -384,13 +379,13 @@ Potential registers zp[1]:8 [ main::$3 ] : zp[1]:8 , reg byte a , reg byte x , r
Potential registers zp[4]:9 [ main::to ] : zp[4]:9 ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 22: zp[1]:4 [ main::$5 ] 22: zp[1]:6 [ main::$2 ] 22: zp[1]:8 [ main::$3 ] 20.9: zp[1]:2 [ main::i#2 main::i#1 ] 12.83: zp[1]:3 [ main::j#3 main::j#2 ] 11: zp[1]:5 [ main::$1 ] 11: zp[1]:7 [ main::j#1 ] 0: zp[4]:9 [ main::to ]
Uplift Scope [main] 22: zp[1]:4 [ main::$4 ] 22: zp[1]:6 [ main::$2 ] 22: zp[1]:8 [ main::$3 ] 20.9: zp[1]:2 [ main::i#2 main::i#1 ] 12.83: zp[1]:3 [ main::j#3 main::j#2 ] 11: zp[1]:5 [ main::$1 ] 11: zp[1]:7 [ main::j#1 ] 0: zp[4]:9 [ main::to ]
Uplift Scope [Vector]
Uplift Scope [Segment]
Uplift Scope [Segment::SegmentType]
Uplift Scope []
Uplifting [main] best 1333 combination reg byte a [ main::$5 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[1]:2 [ main::i#2 main::i#1 ] zp[1]:3 [ main::j#3 main::j#2 ] reg byte a [ main::$1 ] zp[1]:7 [ main::j#1 ] zp[4]:9 [ main::to ]
Uplifting [main] best 1333 combination reg byte a [ main::$4 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[1]:2 [ main::i#2 main::i#1 ] zp[1]:3 [ main::j#3 main::j#2 ] reg byte a [ main::$1 ] zp[1]:7 [ main::j#1 ] zp[4]:9 [ main::to ]
Limited combination testing to 100 combinations of 768 possible.
Uplifting [Vector] best 1333 combination
Uplifting [Segment] best 1333 combination
@ -416,8 +411,8 @@ ASSEMBLER BEFORE OPTIMIZATION
.const SPLINE_TO = 1
.label SCREEN = $400
.const OFFSET_STRUCT_SEGMENT_TO = 1
.const OFFSET_STRUCT_VECTOR_Y = 2
.const SIZEOF_STRUCT_VECTOR = 4
.const OFFSET_STRUCT_VECTOR_Y = 2
// @begin
__bbegin:
// [1] phi from @begin to @1 [phi:@begin->@1]
@ -455,12 +450,12 @@ main: {
jmp __b1
// main::@1
__b1:
// [6] (byte~) main::$5 ← (byte) main::i#2 << (byte) 3 -- vbuaa=vbuz1_rol_3
// [6] (byte~) main::$4 ← (byte) main::i#2 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [7] (byte~) main::$1 ← (byte~) main::$5 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
// [7] (byte~) main::$1 ← (byte~) main::$4 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [8] *(&(struct Vector) main::to) ← memcpy(*((struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) -- _deref_pssc1=pssc2_derefidx_vbuaa_memcpy_vbuc3
@ -569,7 +564,7 @@ FINAL SYMBOL TABLE
(byte~) main::$1 reg byte a 11.0
(byte~) main::$2 reg byte a 22.0
(byte~) main::$3 reg byte a 22.0
(byte~) main::$5 reg byte a 22.0
(byte~) main::$4 reg byte a 22.0
(label) main::@1
(label) main::@return
(byte) main::i
@ -583,7 +578,7 @@ FINAL SYMBOL TABLE
zp[1]:2 [ main::i#2 main::i#1 ]
zp[1]:3 [ main::j#3 main::j#2 ]
reg byte a [ main::$5 ]
reg byte a [ main::$4 ]
reg byte a [ main::$1 ]
reg byte a [ main::$2 ]
reg byte x [ main::j#1 ]
@ -605,8 +600,8 @@ Score: 1141
.const SPLINE_TO = 1
.label SCREEN = $400
.const OFFSET_STRUCT_SEGMENT_TO = 1
.const OFFSET_STRUCT_VECTOR_Y = 2
.const SIZEOF_STRUCT_VECTOR = 4
.const OFFSET_STRUCT_VECTOR_Y = 2
// @begin
// [1] phi from @begin to @1 [phi:@begin->@1]
// @1
@ -631,12 +626,12 @@ main: {
// main::@1
__b1:
// to = letter_c[i].to
// [6] (byte~) main::$5 ← (byte) main::i#2 << (byte) 3 -- vbuaa=vbuz1_rol_3
// [6] (byte~) main::$4 ← (byte) main::i#2 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda.z i
asl
asl
asl
// [7] (byte~) main::$1 ← (byte~) main::$5 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
// [7] (byte~) main::$1 ← (byte~) main::$4 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [8] *(&(struct Vector) main::to) ← memcpy(*((struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) -- _deref_pssc1=pssc2_derefidx_vbuaa_memcpy_vbuc3

View File

@ -20,7 +20,7 @@
(byte~) main::$1 reg byte a 11.0
(byte~) main::$2 reg byte a 22.0
(byte~) main::$3 reg byte a 22.0
(byte~) main::$5 reg byte a 22.0
(byte~) main::$4 reg byte a 22.0
(label) main::@1
(label) main::@return
(byte) main::i
@ -34,7 +34,7 @@
zp[1]:2 [ main::i#2 main::i#1 ]
zp[1]:3 [ main::j#3 main::j#2 ]
reg byte a [ main::$5 ]
reg byte a [ main::$4 ]
reg byte a [ main::$1 ]
reg byte a [ main::$2 ]
reg byte x [ main::j#1 ]

View File

@ -56,8 +56,8 @@ Adding struct value member variable copy *((byte*~) main::$0) ← (byte) main::v
Adding struct value member variable copy *((byte*~) main::$1) ← (byte) main::v1_p_y
Adding struct value member variable copy *((byte*~) main::$2) ← (byte) main::v1_q_x
Adding struct value member variable copy *((byte*~) main::$3) ← (byte) main::v1_q_y
Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*((struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_P), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding struct value member variable copy *((struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*((struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_P), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding struct value member variable copy (byte) main::v5_p_x ← *((struct Point*)&(struct Vector) main::v4+(const byte) OFFSET_STRUCT_VECTOR_P).x
Adding struct value member variable copy (byte) main::v5_p_y ← *((struct Point*)&(struct Vector) main::v4+(const byte) OFFSET_STRUCT_VECTOR_P).y
Adding struct value member variable copy (byte) main::v5_q_x ← (byte) 8

View File

@ -2,7 +2,7 @@ Fixing pointer array-indexing *((const struct Point*) points + (byte) main::i)
Fixing pointer array-indexing *((const struct Point*) points + (number) 2)
Fixing pointer array-indexing *((const struct Point*) points + (number) 2)
Constantified RValue *((const struct Point*) points + (byte~) main::$1) ← { x: (byte) 2, y: (byte) 3 }
Adding struct value member variable copy *((const struct Point*) points + (byte~) main::$1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((const struct Point*) points + (byte~) main::$1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Rewriting struct pointer member access *((const struct Point*) points + (number~) main::$2).x
Rewriting struct pointer member access *((const struct Point*) points + (number~) main::$3).y

View File

@ -10,19 +10,20 @@ Converted struct value to member variables (struct Point) main::point
Created struct value member variable (byte) main::c_center_x
Created struct value member variable (byte) main::c_center_y
Converted struct value to member variables (struct Point) main::c_center
Adding struct value member variable copy (byte) main::p_x ← (byte) $a
Adding struct value member variable copy (byte) main::p_y ← (byte) $a
Unwinding value copy (struct Point) main::p ← { x: (byte) $a, y: (byte) $a }
Adding value simple copy (byte) main::p_x ← (byte) $a
Adding value simple copy (byte) main::p_y ← (byte) $a
Adding struct value member variable copy (struct Point) main::c_center ← (struct Point) main::p
Adding struct value member variable copy (byte) main::c_radius ← (byte) 5
Postponing unwinding for (struct Point) main::point ← (struct Circle) main::c.center
Replacing struct member reference (struct Circle) main::c.center with member unwinding reference (struct Point) main::c_center
Unwinding value copy (struct Point) main::point ← (struct Circle) main::c.center
Adding value simple copy (byte) main::point_x ← (byte) main::c_center_x
Adding value simple copy (byte) main::point_y ← (byte) main::c_center_y
Replacing struct member reference (struct Point) main::point.x with member unwinding reference (byte) main::point_x
Replacing struct member reference (struct Point) main::point.y with member unwinding reference (byte) main::point_y
Replacing struct member reference (struct Circle) main::c.radius with member unwinding reference (byte) main::c_radius
Adding struct value member variable copy (byte) main::c_center_x ← (byte) main::p_x
Adding struct value member variable copy (byte) main::c_center_y ← (byte) main::p_y
Adding struct value member variable copy (byte) main::point_x ← (byte) main::c_center_x
Adding struct value member variable copy (byte) main::point_y ← (byte) main::c_center_y
Unwinding value copy (struct Point) main::c_center ← (struct Point) main::p
Adding value simple copy (byte) main::c_center_x ← (byte) main::p_x
Adding value simple copy (byte) main::c_center_y ← (byte) main::p_y
Identified constant variable (byte) main::p_x
Identified constant variable (byte) main::p_y
Identified constant variable (byte) main::c_radius

View File

@ -7,20 +7,21 @@ Converted struct value to member variables (struct Circle) main::c
Created struct value member variable (byte) main::c_center_x
Created struct value member variable (byte) main::c_center_y
Converted struct value to member variables (struct Point) main::c_center
Adding struct value member variable copy (byte) main::p_x ← (byte) $a
Adding struct value member variable copy (byte) main::p_y ← (byte) $a
Adding struct value member variable copy (struct Point) main::c_center ← {}
Adding struct value member variable copy (byte) main::c_radius ← (byte) 0
Postponing unwinding for (struct Circle) main::c.center ← (struct Point) main::p
Replacing struct member reference (struct Circle) main::c.center with member unwinding reference (struct Point) main::c_center
Unwinding value copy (struct Point) main::p ← { x: (byte) $a, y: (byte) $a }
Adding value simple copy (byte) main::p_x ← (byte) $a
Adding value simple copy (byte) main::p_y ← (byte) $a
Unwinding value copy (struct Circle) main::c ← {}
Unwinding value copy (struct Circle) main::c ← {}
Adding value simple copy (byte) main::c_center_x ← (byte) 0
Adding value simple copy (byte) main::c_center_y ← (byte) 0
Adding value simple copy (byte) main::c_radius ← (byte) 0
Unwinding value copy (struct Circle) main::c.center ← (struct Point) main::p
Adding value simple copy (byte) main::c_center_x ← (byte) main::p_x
Adding value simple copy (byte) main::c_center_y ← (byte) main::p_y
Replacing struct member reference (struct Circle) main::c.radius with member unwinding reference (byte) main::c_radius
Replacing struct member reference (struct Circle) main::c.center with member unwinding reference (struct Point) main::c_center
Replacing struct member reference (struct Circle) main::c.center with member unwinding reference (struct Point) main::c_center
Replacing struct member reference (struct Circle) main::c.radius with member unwinding reference (byte) main::c_radius
Adding struct value member variable copy (byte) main::c_center_x ← (byte) 0
Adding struct value member variable copy (byte) main::c_center_y ← (byte) 0
Adding struct value member variable copy (byte) main::c_center_x ← (byte) main::p_x
Adding struct value member variable copy (byte) main::c_center_y ← (byte) main::p_y
Replacing struct member reference (struct Point) main::c_center.x with member unwinding reference (byte) main::c_center_x
Replacing struct member reference (struct Point) main::c_center.y with member unwinding reference (byte) main::c_center_y
Identified constant variable (byte) main::p_x
@ -64,6 +65,7 @@ SYMBOL TABLE SSA
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*)(number) $400
(struct Point) main::c_center
(byte) main::c_center_x
(byte) main::c_center_x#0
(byte) main::c_center_x#1
@ -155,6 +157,7 @@ VARIABLE REGISTER WEIGHTS
(byte) Point::x
(byte) Point::y
(void()) main()
(struct Point) main::c_center
(byte) main::c_center_x
(byte) main::c_center_y
(byte) main::c_radius
@ -299,6 +302,7 @@ FINAL SYMBOL TABLE
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024
(struct Point) main::c_center
(byte) main::c_center_x
(byte) main::c_center_y
(byte) main::c_radius

View File

@ -8,6 +8,7 @@
(void()) main()
(label) main::@return
(const byte*) main::SCREEN = (byte*) 1024
(struct Point) main::c_center
(byte) main::c_center_x
(byte) main::c_center_y
(byte) main::c_radius

View File

@ -4,7 +4,7 @@ Fixing pointer array-indexing *((const struct Point*) main::SCREEN + (word) main
Constantified RValue *((const struct Point*) points + (word~) main::$3) ← (struct Point){ (byte) 2, (byte~) main::$0 }
Adding struct value member variable copy *((byte*~) main::$5 + (word~) main::$3) ← (byte) 2
Adding struct value member variable copy *((byte*~) main::$6 + (word~) main::$3) ← (byte~) main::$0
Adding struct value member variable copy *((const struct Point*) main::SCREEN + (word~) main::$4) ← memcpy(*((const struct Point*) points + (word~) main::$4), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((const struct Point*) main::SCREEN + (word~) main::$4) ← memcpy(*((const struct Point*) points + (word~) main::$4), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA

View File

@ -5,7 +5,7 @@ Constantified RValue *((const struct Point*) points + (byte~) main::$6) ← (str
Adding struct value member variable copy *((signed byte*~) main::$8 + (byte~) main::$6) ← (signed byte~) main::$0
Adding struct value member variable copy *((signed byte*~) main::$9 + (byte~) main::$6) ← (signed byte~) main::$2
Adding struct value member variable copy *((signed byte*~) main::$10 + (byte~) main::$6) ← (signed byte~) main::$3
Adding struct value member variable copy *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((const struct Point*) main::SCREEN + (byte~) main::$7) ← memcpy(*((const struct Point*) points + (byte~) main::$7), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA

View File

@ -7,8 +7,8 @@ Created struct value member variable (byte) print::p_x
Created struct value member variable (byte) print::p_y
Converted struct value to member variables (struct Point) print::p
Converted procedure struct value parameter to member unwinding (void()) print((byte) print::p_x , (byte) print::p_y)
Adding struct value member variable copy *((const struct Point*) points + (number~) main::$2) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding struct value member variable copy *((const struct Point*) points + (number~) main::$3) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((const struct Point*) points + (number~) main::$2) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((const struct Point*) points + (number~) main::$3) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Converted procedure struct value parameter to member unwinding in call (void~) main::$0 ← call print *((byte*~) main::$5 + (byte~) main::$4) *((byte*~) main::$6 + (byte~) main::$4)
Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x
Replacing struct member reference (struct Point) print::p.y with member unwinding reference (byte) print::p_y

View File

@ -4,7 +4,7 @@ Fixing pointer array-indexing *((const struct Point*) main::SCREEN + (byte) main
Constantified RValue *((const struct Point*) points + (byte~) main::$2) ← (struct Point){ (byte) 2, (byte) main::i }
Adding struct value member variable copy *((byte*~) main::$4 + (byte~) main::$2) ← (byte) 2
Adding struct value member variable copy *((byte*~) main::$5 + (byte~) main::$2) ← (byte) main::i
Adding struct value member variable copy *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Adding value bulk copy *((const struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT)
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA